之前在編程中編譯完成后,運行時,會遇見一些常見的錯誤,如NullPointerException,ArrayIndexOutOfBoundsException等等
在今天重新回顧學習了java異常,總結了一些異常的學習,和大家一起分享一下!!!
java中異常處理是通過:try、catch、finally、throw和throws這5個關鍵詞來實現的
簡單介紹一下:try、catch、finally 3個關鍵詞,java處理異常中,把可能出現的異常代碼放入到try塊中,由catch來進行捕獲異常,而將必須輸出的信息,放到的final語句中,因為是否發生異常final中的語句都會輸出,除非在catch中使用System.exit(1)。 注:執行System.exit(1),將推出jvm虛擬機
好的,介紹了一下try、catch、finally 3個關鍵詞,接下來說一下throw和throws!!
聲明異常——throws
java中通過關鍵詞throws聲明某個方法可能拋出的各種異常類,可以同時聲明多個異常類,但需用逗號隔開。
有兩種方式進行處理throws:
1.使用try-catch捕獲異常
2.使用throws繼續聲明,如果調用者不打算處理此異常,可以繼續通過throws聲明異常,讓上一級調用者處理異常。main()方法聲明的異常將由Java虛擬機來處理
下面通過兩個小Demo給大家看一下:
處理方式throws1:
import java.util.Scanner;
public class DemoOneTest {
/**
* 通過try—catch捕獲並處理異常
* @param args
*/
public static void main(String[] args){
try {
divide();
} catch (Exception e) {
System.err.println("error:被除數和除數不能為零!!!");;
e.printStackTrace();
}
}
/**
* throws進行異常的聲名
* @throws Exception
*/
public static void divide() throws Exception{
Scanner input = new Scanner(System.in);
System.out.print("請輸入被除數:");
int num1 = input.nextInt();
System.out.println("請輸入除數:");
int num2 = input.nextInt();
System.out.println(num1/num2);
}
}
輸出結果:錯誤
輸出結果:正確
處理方式throws2:
import java.util.Scanner;
public class DemoOneTest {
/**
* 通過throws繼續聲明異常
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
divide();
}
/**
* throws進行異常的聲名
* @throws Exception
*/
public static void divide() throws Exception{
Scanner input = new Scanner(System.in);
System.out.print("請輸入被除數:");
int num1 = input.nextInt();
System.out.println("請輸入除數:");
int num2 = input.nextInt();
System.out.println(num1/num2);
}
}
輸出結果:正確
輸出結果:錯誤
拋出異常——throw
java中也可以使用throw關鍵詞,來進行自行拋出異常,來處理系統無法自動發現並解決的問題,將它由調用者來進行決解
Demo
Me.class
/**
* 使用throw在方法內拋出異常
*/
public class Me {
private int age = 0;
/**
* 設置年齡
* @param age
*/
public void setAge(int age) throws Exception {
if (age >= 0 && age <= 100) {
this.age = age;
}else{
throw new Exception("年齡必須在1到100之間");
}
}
public int getAge(){
this.age = age;
return age;
}
/**
* 信息
*/
public void print(){
System.out.println("年齡為:"+this.age);
}
}
DemoTwoTest.class
/**
* 捕獲throw拋出的異常
*/
public class DemoTwoTest {
public static void main(String[] args) {
Me me = new Me();
try {
me.setAge(99);
} catch (Exception e) {
e.printStackTrace();
}
me.print();
}
}
輸出結果:正確
me.setAge(99);
輸入結果:錯誤
me.setAge(101);
以上是throw和throws的使用和示例代碼,接下來說一下throw和throws的區別:
1.作用不同:throw用於在程序中拋出異常
throws用於聲明在該方法內拋出了異常
2.使用位置不同:throw位於方法體內部,用於單獨語句使用
throws需要跟在方法參數列表后面,不能單獨使用
3.內容不同:throw拋出一個異常對象,且只能有一個
throws后面跟異常類,且可以跟多個異常類
異常的分類:
Throwable類:所有異常類型都是Throwable類的子類,它有兩個派生類,分別是Error和Exception
Error類:表示僅靠程序本身無法恢復的嚴重錯誤,如內存溢出、虛擬機錯誤。應用程序不應該拋出這種類型的對象(一般由虛擬機拋出)
Exception類:由java應用程序拋出和處理的非重要錯誤,如數組下標越界、類型轉換等。它的不同的子類分別對應不用類型的異樣