java 語言定義了一些異常類在java.lang 標準包中。
所有的異常類是從 java.lang.Exception 類繼承的子類。
Exception 類是Throwable 類的子類。除了Exception類外,Throwable還有一個子類Error 。
Java 程序通常不捕獲錯誤。錯誤一般發生在嚴重故障時,它們在Java程序處理的范疇之外。
Error 用來指示運行時環境發生的錯誤。
例如,JVM 內存溢出。一般地,程序不會從錯誤中恢復。
異常類有兩個主要的子類:IOException 類和 RuntimeException 類。

在 Java 內置類中,有大部分常用檢查性和非檢查性異常。
通常,Java的異常(包括Exception和Error)分為可查的異常(checked exceptions)和不可查的異常(uncheckedexceptions)。
可查異常(編譯器要求必須處置的異常):正確的程序在運行中,很容易出現的、情理可容的異常狀況。可查異常雖然是異常狀況,但在一定程度上它的發生是可以預計的,而且一旦發生這種異常狀況,就必須采取某種方式進行處理。
除了RuntimeException及其子類以外,其他的Exception類及其子類都屬于可查異常。這種異常的特點是Java編譯器會檢查它,也就是說,當程序中可能出現這類異常,要么用try-catch語句捕獲它,要么用throws子句聲明拋出它,否則編譯不會通過。
不可查異常(編譯器不要求強制處置的異常):包括運行時異常(RuntimeException與其子類)和錯誤(Error)。
Exception 這種異常分兩大類運行時異常和非運行時異常(編譯異常)。程序中應當盡可能去處理這些異常。
運行時異常:都是RuntimeException類及其子類異常,如NullPointerException(空指針異常)、IndexOutOfBoundsException(下標越界異常)等,這些異常是不檢查異常,程序中可以選擇捕獲處理,也可以不處理。這些異常一般是由程序邏輯錯誤引起的,程序應該從邏輯角度盡可能避免這類異常的發生。
運行時異常的特點是Java編譯器不會檢查它,也就是說,當程序中可能出現這類異常,即使沒有用try-catch語句捕獲它,也沒有用throws子句聲明拋出它,也會編譯通過。
非運行時異常 (編譯異常):是RuntimeException以外的異常,類型上都屬于Exception類及其子類。從程序語法角度講是必須進行處理的異常,如果不處理,程序就不能編譯通過。如IOException、SQLException等以及用戶自定義的Exception異常,一般情況下不自定義檢查異常。
在 Java 應用程序中,異常處理機制為:拋出異常,捕捉異常。
捕獲異常:在方法拋出異常之后,運行時系統將轉為尋找合適的異常處理器(exception handler)。
捕獲異常:try、catch 和 finally
try 塊:用于捕獲異常。其后可接零個或多個catch塊,如果沒有catch塊,則必須跟一個finally塊。
catch 塊:用于處理try捕獲到的異常。
finally 塊:無論是否捕獲或處理異常,finally塊里的語句都會被執行。當在try塊或catch塊中遇到return語句時,finally語句塊將在方法返回之前被執行。
如何釋放物理資源?
Close
當程序執行try塊,catch塊時遇到return語句或者throw語句,這兩個語句都會導致該方法立即結束,所以系統并不會立即執行這兩個語句,而是去尋找該異常處理流程中的finally塊,如果沒有finally塊,程序立即執行return語句或者throw語句,方法終止。如果有 finally塊,系統立即開始執行finally塊,只有當finally塊執行完成后,系統才會再次跳回來執行try塊、catch塊里的 return或throw語句,如果finally塊里也使用了return或throw等導致方法終止的語句,則finally塊已經終止了方法,不用 再跳回去執行try塊、catch塊里的任何代碼了。
在以下4種特殊情況下,finally塊不會被執行:
1)在finally語句塊中發生了異常。
2)在前面的代碼中用了System.exit()退出程序。
3)程序所在的線程死亡。
4)關閉CPU。
使用 try 和 catch 關鍵字可以捕獲異常。try/catch 代碼塊放在異常可能發生的地方。
try/catch代碼塊中的代碼稱為保護代碼,使用 try/catch 的語法如下:
try
{
//程序代碼
}catch(ExceptionName e1)
{
//Catch 塊
}
Catch 語句包含要捕獲異常類型的聲明。當保護代碼塊中發生一個異常時,try 后面的 catch 塊就會被檢查。
如果發生的異常包含在 catch 塊中,異常會被傳遞到該 catch 塊,這和傳遞一個參數到方法是一樣。
一個 try 代碼塊后面跟隨多個catch 代碼塊的情況就叫多重捕獲。
多重捕獲塊的語法如下所示:
try{
//程序代碼
}catch(異常類型1 異常的變量名1){
// 程序代碼
}catch(異常類型2 異常的變量名2){
// 程序代碼
}catch(異常類型2 異常的變量名2){
// 程序代碼
}
上面的代碼段包含了 3 個 catch塊。
可以在 try 語句后面添加任意數量的catch 塊。
如果保護代碼中發生異常,異常被拋給第一個 catch 塊。
如果拋出異常的數據類型與 ExceptionType1 匹配,它在這里就會被捕獲。
如果不匹配,它會被傳遞給第二個 catch 塊。
如此,直到異常被捕獲或者通過所有的 catch 塊。
如果一個方法沒有捕獲一個檢查性異常,那么該方法必須使用 throws 關鍵字來聲明。throws 關鍵字放在方法簽名的尾部。
也可以使用 throw 關鍵字拋出一個異常,無論它是新實例化的還是剛捕獲到的。
下面方法的聲明拋出一個 RemoteException 異常:
import java.io.*;public class className{ public void deposit(double amount) throws RemoteException { // Method implementation throw new RemoteException(); } //Remainder of class definition}一個方法可以聲明拋出多個異常,多個異常之間用逗號隔開。
finally 關鍵字用來創建在try 代碼塊后面執行的代碼塊。
無論是否發生異常,finally 代碼塊中的代碼總會被執行。
在 finally 代碼塊中,可以運行清理類型等收尾善后性質的語句。
finally 代碼塊出現在catch 代碼塊最后,語法如下:
try{
// 程序代碼
}catch(異常類型1 異常的變量名1){
// 程序代碼
}catch(異常類型2 異常的變量名2){
// 程序代碼
}finally{
// 程序代碼
}
7.3拋出異常
1.什么是拋出異常?什么情況下需要拋出異常?拋出異常后如何處理?
拋出異常:當一個方法出現錯誤引發異常時,方法創建異常對象并交付運行時系統,異常對象中包含了異常類型和異常出現時的程序狀態等異常信息。運行時系統負責尋找處置異常的代碼并執行。
拋出異常:throw、 throws
7.4自定義異常
1.如何自定義異常?自定義的異常如何處理?
編寫自己的異常類時需要記住下面的幾點。
所有異常都必須是 Throwable 的子類。
如果希望寫一個檢查性異常類,則需要繼承 Exception 類。
如果你想寫一個運行時異常類,那么需要繼承 RuntimeException 類。
可以像下面這樣定義自己的異常類:
class MyException extends Exception{
}
只繼承Exception 類來創建的異常類是檢查性異常類。
一個異常類和其它任何類一樣,包含有變量和方法。
7.5集合概述
1.什么是集合? Java中常用的集合有哪幾類?集合中用來存放什么?集合與數組的區別?
集合類存放于java.util包中。
集合類存放的都是對象的引用,而非對象本身,出于表達上的便利,我們稱集合中的對象就是指集合中對象的引用(reference)。
集合類型主要有3種:set(集)、list(列表)和map(映射)。
通俗的說,集合就是一個放數據的容器,準確的說是放數據對象引用的容器。
一、數組聲明了它容納的元素的類型,而集合不聲明。
二、數組是靜態的,一個數組實例具有固定的大小,一旦創建了就無法改變容量了。而集合是可以動態擴展容量,可以根據需要動態改變大小,集合提供更多的成員方法,能滿足更多的需求。
三、數組不論是效率還是類型檢查都是最好的。
1.數組是大小固定的,一旦創建無法擴容;集合大小不固定,
2.數組的存放的類型只能是一種,集合存放的類型可以不是一種(不加泛型時添加的類型是Object);
3.數組是java語言中內置的數據類型,是線性排列的,執行效率或者類型檢查(不懂),都是最快的.
ArrayList就是基于數組創建的容器類.

2.各類集合中元素存與取的特點?如何定義一個集合?
List 有序,可重復。Set 無序,唯一
Map(雙列集合)
A:Map集合的數據結構僅僅針對鍵有效,與值無關。
B:存儲的是鍵值對形式的元素,鍵唯一,值可重復。
7.6集合類
1.List接口的實現方式?如何定義一個list集合?
6.List集合的特點?7.List集合中常用的方法有哪些?
List:、有順序以線性方式存儲,可以存放重復對象
ArrayList:
底層的數據結構是數組;所以它查詢快,增刪慢!
線程不安全,但是效率高!
Vector:
底層的數據結構是數組;所以它查詢快,增刪慢!
線程安全,但是效率低!
LinkList:
底層的數據結構是鏈表,所以它查詢慢,但是增刪快!
線程不安全,但是效率高!
7.7集合工具類
1.集合的工具類有哪些?
1. 類Collections 是集合框架的工具類,其中的方法都是靜態方法。 2. 調用某個方法直接利用類名調用即可,如Collections.sort(list1);。
8、用來排序的集合工具類是什么?如何使用其中的方法?
java.util.Arrays類
提供了各種對象的排序:char[],byte[],long[],int[]和Object[],注Arrays.sort方法排序返回的結果是升序Ascending的排列順序。你可以定制排序順序。這個排序和TreeSet的紅黑樹排序方式不同,Set不允許有重復數據存在,因此,當有重復數據時,可以使用這個工具類進行排序。Arrays提供的排序算法是歸并排序算法(當元素數量小于=7時采用的是插入排序),空間復雜度O(n)。
.java.util.Collections類
該工具類提供了大量方法對集合元素進行排序、查詢和修改等操作,還提供了將集合對象設置為不可變、對集合對象實現同步控制等方法。
|
新聞熱點
疑難解答