關鍵詞 | 作用 | 備注 |
---|---|---|
try | 異常發現區間 | 執行代碼邏輯,在執行期間發掘是否有異常 |
catch | 捕獲異常后處理區間 | 若try區間有異常,捕獲異常在此區間處理 |
finally | 總是執行 | 不論是否有異常 此區間代碼總是執行 釋放占用資源 如:IO流 |
throw | 拋出方法中異常 | 異常扔到方法定義上(甩鍋給上級) |
throws | 拋出方法定義上異常 | 異常扔到調用方法的地方(甩鍋給上級) |
package com.exception;
// 異常處理五個關鍵詞
// try 異常發現區間
// catch 異常處理區間 若try區間有異常,捕獲異常在此區間處理
// finally 不論是否有異常 此區間代碼總是執行 釋放占用資源 如:IO流
// throw 拋出異常 方法中 異常扔到方法定義上(甩鍋給上級)
// throws 拋出異常 在方法定義上 異常扔到調用方法的地方(甩鍋給上級)
public class Test01 {public static void main(String[] args) {// finally會阻止try catch 的return
// System.out.println(new Test01().e2()); // 2
System.out.println(new Test01().e3()); // 2
}
public void exceptions (int a,int b) throws ArithmeticException{// 此處異常 傳遞給方法調用第28行 new Test01().exceptions(1,0);
if(b==0){throw new ArithmeticException();// 此處異常 傳遞給方法定義第18行 public void exceptions (int a,int b) throws ArithmeticException
}else {System.out.println("666");
}
}
public void e1(){try {// 異常發現區間
new Test01().exceptions(1,0);
} catch (ArithmeticException e) {// 捕獲異常后處理區間
e.printStackTrace();
System.out.println("catch");
}finally {// 總是執行
System.out.println("始終執行");
}
}
// 測試finally會阻止try catch 的return
public int e2(){try {new Test01().exceptions(1,0);
return 0;
} catch (ArithmeticException e) {e.printStackTrace();
System.out.println("catch");
return 1;
}finally {System.out.println("始終執行");
return 2;
}
}
// 測試finally會阻止try catch 的return
public int e3(){try {new Test01().exceptions(1,1);
return 0;
} catch (ArithmeticException e) {e.printStackTrace();
System.out.println("catch");
return 1;
}finally {System.out.println("始終執行");
return 2;
}
}
}
2.自定義異常處理MyException類為自定義的異常處理類,Test02類調用異常類
自定義異常類必須繼承Exception類
MyException類
package com.exception;
// 自定義異常類必須繼承Exception類
public class MyException extends Exception{private int num;
// MyException構造方法
public MyException(int num) {// 初始化num賦值
this.num = num;
}
// 最終異常是什么
@Override
public String toString() {return "MyException"+this.num;
}
}
Test02 類
package com.exception;
public class Test02 {static void e1(int a) throws MyException{// 此處異常 傳遞給方法調用第18行 e1(10);
System.out.println("傳入參數:"+a);
if(a<10){System.out.println("正常執行");
}else {throw new MyException(a); //此處異常 傳遞給方法定義第4行 static void e1(int a) throws MyException{}
System.out.println("結束方法");
}
public static void main(String[] args) {try {e1(10);
} catch (MyException e) {System.out.println("可以添加邏輯處理");
System.out.println(e); // 打印為MyException類中toString()方法
}
// 執行后打印
// 傳入參數:10
// 可以添加邏輯處理
// MyException10
}
}
3.擴展之staticstatic為靜態修飾符,與類一起加載。使用static修飾的方法或者屬性,無需實例化, 可以使用類名直接調用。
探索父類 子類 初始化時 靜態函數塊 、 匿名函數 、 構造器的運行順序
Person父類
package com.oop.demo06;
public class Person {private String name;
static {System.out.println("父類靜態函數塊");
}
{System.out.println("父類匿名函數塊");
}
public Person(){System.out.println("父類無參構造函數");
}
public Person(String name){this.name = name;
}
}
Student類為子類
package com.oop.demo06;
// 靜態導入類
import static java.lang.Math.random;
public class Student extends Person {// 程序運行時只執行一次
static {System.out.println("子類靜態函數塊");
}
{System.out.println("子類匿名函數塊");
}
public Student(){System.out.println("子類無參構造函數");
}
public static void main(String[] args) {Student student = new Student();
// 靜態導入類
System.out.println(random());
}
}
// 父類靜態函數塊
// 子類靜態函數塊
// 父類匿名函數塊
// 父類無參構造函數
// 子類匿名函數塊
// 子類無參構造函數
總目錄,請點擊此處,Java學習
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
網站標題:Java之異常處理-創新互聯
網站地址:http://vcdvsql.cn/article20/dcooco.html
成都網站建設公司_創新互聯,為您提供定制網站、定制開發、建站公司、網站設計、品牌網站建設、全網營銷推廣
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯