文章目錄
1.java將如何處理異常?
1.Java通過面向對象的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的接口。
2.在Java中,每個異常都是一個對象,它是Throwable類或其它子類的實例。
當一個方法出現異常後便拋出一個異常對象,該對象中包含有異常信息,調用這個對象的方法可以捕獲到這個異常並進行處理。
3.ava的異常處理是通過5個關鍵詞來實現的:try、catch、throw、throws和finally。
1.1Java中的異常處理機制的簡單原理和應用。
- 當JAVA程序違反了JAVA的語義規則時,JAVA虛擬機就會將發生的錯誤表示爲一個異常。違反語義規則包括2種情況。
- 一種是JAVA類庫內置的語義檢查。例如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發NullPointerException。
另一種情況就是JAVA允許程序員擴展這種語義檢查,程序員可以創建自己的異常,並自由選擇在何時用throw關鍵字引發異常。
所有的異常都是java.lang.Thowable的子類。
-
Java通過面向對象的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的接口。
在Java中,每個異常都是一個對象,它是Throwable類或其它子類的實例。
當一個方法出現異常後便拋出一個異常對象,該對象中包含有異常信息,調用這個對象的方法可以捕獲到這個異常並進行處理。
Java的異常處理是通過5個關鍵詞來實現的:try、catch、throw、throws和finally。 -
一般情況下是用try來執行一段程序,如果出現異常,
系統會拋出(throws)一個異常,這時候你可以通過它的類型來捕捉(catch)它,或最後(finally)由缺省處理器來處理。
用try來指定一塊預防所有“異常”的程序。緊跟在try程序後面,應包含一個catch子句來指定你想要捕捉的“異常”的類型。
throw語句用來明確地拋出一個“異常”。throws用來標明一個成員函數可能拋出的各種“異常”。 -
Finally爲確保一段代碼不管發生什麼“異常”都被執行一段代碼。
可以在一個成員函數調用的外面寫一個try語句,在這個成員函數內部寫另一個try語句保護其他代碼。每當遇到一個try語句,
“異常”的框架就放到堆棧上面,直到所有的try語句都完成。
如果下一級的try語句沒有對某種“異常”進行處理,堆棧就會展開,直到遇到有處理這種“異常”的try語句。
1.1 可以用以下代碼實現:
下面展示一些 Test 測試 代碼片
。
public class Test {
public static void main(String[] args) throws InterruptedException {
System.out.println("hello");
int a = 10;
int b = a/0; // 運行時異常。 除數不能爲零。
int[] arrs = new int[10];
arrs[11] = 10; // 運行時異常。 數組下標越界異常。
System.out.println("正在登陸中");
for(int i=0;i<100;i++){
Thread.sleep(1000); // 請看main方法上的throws 刪除它,你就會看見非運行時異常。需要強制處理的異常。
System.out.println("*");
if(i==10){
break;
}
}
System.out.println("登錄成功");
}
}
2.如何處理異常
2.1 try , catch
- try 用來定義可能出現異常的代碼塊。
- catch 用來捕捉異常, 處理異常。
下面展示一些 Test 測試 代碼片
。
public class Test2 {
public static void main(String[] args) {
System.out.println("hello1");
System.out.println("hello2");
System.out.println("hello3");
System.out.println("hello4");
System.out.println("hello5");
try{
int a = 10;
int b = a/0;
}catch(ArithmeticException e){
System.out.println("保險公司報銷");
}
System.out.println("hello6");
try{
System.out.println("hello7");
System.out.println("hello8");
System.out.println("hello9");
String string = null;
System.out.println(string.charAt(2));
}catch(NullPointerException e){
System.out.println("第二個異常被處理掉");
}
System.out.println("hello10");
}
}
2.2 finally
- finally 無論是否出現異常,都必須執行的代碼塊。一般用來關閉連接,釋放流。
下面展示一些 Test 測試 代碼片
。
public class Test3 {
public static void main(String[] args) {
System.out.println("hello1");
System.out.println("hello2");
System.out.println("hello3");
System.out.println("hello4");
System.out.println("hello5");
try{
int a = 10;
int b = a/0;
}catch(ArithmeticException e){
System.out.println("保險公司報銷");
}finally{
System.out.println("我繼續喝咖啡");
}
System.out.println("hello6");
try{
System.out.println("hello7");
System.out.println("hello8");
System.out.println("hello9");
String string = null;
// System.out.println(string.charAt(2));
}catch(NullPointerException e){
System.out.println("第二個異常被處理掉了");
}finally{
System.out.println("我繼續喝咖啡");
}
System.out.println("hello10");
}
}
2.3 語法結構
下面展示一些 Test 測試 代碼片
。
public class Test4 {
public static void main(String[] args) {
try{
// 可能出現異常的代碼塊。
}catch(Exception e){
// Exception 或子類,處理異類。
}finally{
// 無論是否出現異常,都必須執行代碼塊。 finally不是不想存在的。
}
}
}
3.面試題
3.1 面試題 一
下面展示一些 面試題一 測試 代碼片
。
public class Test5 {
public static void main(String[] args) {
// 一個catch只處理一個異常。
// 一個try後面可以有多個catch嗎? 可以。
// 要求: 異常的父類必須寫在子類之後。
try {
int a = 10/1;
String str = null;
System.out.println(str.charAt(0));
System.out.println("77777777");
int[] ars = new int[3];
ars[3] = 0;
}catch (ArithmeticException e){
System.out.println("除法異常處理");
}catch (NullPointerException e){
System.out.println("空指針異常處理");
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("數組異常處理");
}catch (Exception e){
System.out.println("父類異常");
}
System.out.println("88888888888888888888");
}
}
3.2 面試題 二
- try 能否獨立存在。 不能
- catch 能夠獨立存在。 不能
- finaly 能夠獨立存在。 不能
- try 後面能夠直接寫 finally > 可以。
- finally 可以不存在嗎: 可以
- try 中可以繼續try嗎? 可以
- catch 中可以繼續try嗎? 可以
- finally 中可以繼續try嗎? 可以
下面展示一些 面試題二 測試 代碼片
。
public class Test6 {
public static void main(String[] args) {
try{
try{
}catch(Exception e){
}
}catch(Exception e){
try{
}catch (Exception r){
}
} finally{
try{
}catch(Exception r){
}
}
}
}
3.3 面試題 三 (終極)
下面展示一些 面試題三 測試 代碼片
。
public class Test7 {
public static void main(String[] args) {
int a = show("",null,"a");
int b = show(null,"","a");
int c = show("a",null,"");
System.out.println(a+" "+b+" "+c );
}
public static int show(String a,String b,String c){
try{
a.length();
b.length();
c.length();
return 1;
}catch (Exception e){
return 2;
}finally{
return 3;
}
}
}
4.拋出異常
-
throw 拋出異常。
-
throws 當前位置不處理,交給調用位置處理異常。
下面展示一些 Tast 代碼片
。
public class Test8 {
public static void main(String[] args) throws Exception {
try{
System.out.println("hello1");
System.out.println("hello1");
System.out.println("hello1");
System.out.println("hello1");
int a = 10/0;
}catch(Exception e){
throw e;// 拋出異常。
}
// 調用位置。
method();
}
// throws 表示當前位置不處理異常,交給調用位置處理。
public static void method()throws Exception{
int a = 10/0;
}
}
5.自定義異常
- 繼承自: Exception。
- 使用throw 拋出自定義異常子類。
下面展示一些 Test 代碼片
。
public class Test9 {
public static void main(String[] args) throws Exception {
String name = "張三6";
if(!name.equals("張三")){
throw new Exception("姓名信息錯誤");
}
}
}
6.DeBug bug 臭蟲
Bug : 臭蟲。 計算機中的異常,錯誤。
*
- DeBug 單步調試:
- F6:單步執行。
- F5:進入方法。
- F7:跳出方法。
- F8:結束調試。
下面展示一些 Demo 代碼片
。
public class DeBugDemo {
public void show(){
System.out.println("hello1");
System.out.println("hello2");
System.out.println("hello3");
System.out.println("hello4");
System.out.println("hello5");
System.out.println("hello6");
System.out.println("hello7");
System.out.println("hello8");
}
}
下面展示一些 DeBug 代碼片
。
public class Test10 {
public static void main(String[] args) {
System.out.println("hello1");
System.out.println("hello2");
System.out.println("hello3");
System.out.println("hello4");
int a = 10;
int b = 20;
System.out.println("hello5");
System.out.println("hello6");
DeBugDemo deb = new DeBugDemo();
deb.show();
System.out.println("hello7");
System.out.println("hello8");
System.out.println("hello9");
System.out.println("hello10");
System.out.println("hello11");
System.out.println("hello12");
}
}
7. Throwable
- 所有異常和錯誤的父類。
- throwable 有兩個子類。
鏈接: link.
——————————————————————
————————————————————
- Error錯誤 Error表示系統級的錯誤和程序無法通過修改程序處理的異常,內存泄露。
Exception 異常 Exception表示需要捕捉或者需要程序進行處理的異常,如果程序正常執行,將不會出現異常。
Exception: 運行時異常,非運行時異常(檢查異常)
運行時異常: 程序運行時出現的異常,由虛擬機捕捉,並拋出到控制檯的異常。
非運行時異常:java編譯器要求方法必須處理或拋出可能發生的非運行時異常。
——————————————————……0.0……