java異常和throw和throws的區別


之前在編程中編譯完成后,運行時,會遇見一些常見的錯誤,如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應用程序拋出和處理的非重要錯誤,如數組下標越界、類型轉換等。它的不同的子類分別對應不用類型的異樣


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM