導航:首頁 > 編程語言 > java拋異常的函數

java拋異常的函數

發布時間:2023-03-08 05:44:49

『壹』 java中throw和throws有什麼區別

當然,你需要明白異常在Java中式以一個對象來看待。
並且所有系統定義的編譯和運行異常都可以由系統自動拋出,稱為標准異常,但是一般情況下Java 強烈地要求應用程序進行完整的異常處理,給用戶友好的提示,或者修正後使程序繼續執行。
直接進入正題哈:
1.用戶程序自定義的異常和應用程序特定的異常,必須藉助於 throws 和 throw 語句來定義拋出異常。

1.1 throw是語句拋出一個異常。
語法:throw (異常對象);
throw e;

1.2 throws是方法可能拋出異常的聲明。(用在聲明方法時,表示該方法可能要拋出異常)
語法:[(修飾符)](返回值類型)(方法名)([參數列表])[throws(異常類)]{......}
public void doA(int a) throws Exception1,Exception3{......}

舉例:

throws E1,E2,E3隻是告訴程序這個方法可能會拋出這些異常,方法的調用者可能要處理這些異常,而這些異常E1,E2,E3可能是該函數體產生的。
throw則是明確了這個地方要拋出這個異常。

如: void doA(int a) throws IOException,{
try{
......

}catch(Exception1 e){
throw e;
}catch(Exception2 e){
System.out.println("出錯了!");
}
if(a!=b)
throw new Exception3("自定義異常");
}

代碼塊中可能會產生3個異常,(Exception1,Exception2,Exception3)。
如果產生Exception1異常,則捕獲之後再拋出,由該方法的調用者去處理。

果產生Exception2異常,則該方法自己處理了(即System.out.println("出錯了!");)。所以該方法就不會再向外拋出
Exception2異常了,void doA() throws Exception1,Exception3
裡面的Exception2也就不用寫了。
而Exception3異常是該方法的某段邏輯出錯,程序員自己做了處理,在該段邏輯錯誤的情況下拋出異常Exception3,則該方法的調用者也要處理此異常。

throw語句用在方法體內,表示拋出異常,由方法體內的語句處理。
throws語句用在方法聲明後面,表示再拋出異常,由該方法的調用者來處理。

throws主要是聲明這個方法會拋出這種類型的異常,使它的調用者知道要捕獲這個異常。
throw是具體向外拋異常的動作,所以它是拋出一個異常實例。

throws說明你有那個可能,傾向。
throw的話,那就是你把那個傾向變成真實的了。

同時:
1、throws出現在方法函數頭;而throw出現在函數體。
2、throws表示出現異常的一種可能性,並不一定會發生這些異常;throw則是拋出了異常,執行throw則一定拋出了某種異常。
3、兩者都是消極處理異常的方式(這里的消極並不是說這種方式不好),只是拋出或者可能拋出異常,但是不會由函數去處理異常,真正的處理異常由函數的上層調用處理。

『貳』 java編程中,throws Exception{ }和try{……}catch(){……}

區別一:throw 是語句拋出一個異常;throws 是方法拋出一個異常;

throw語法:throw <異常對象>

在方法聲明中,添加throws子句表示該方法將拋出異常。如果一個方法會有異常,但你並不想處理這個異常,就在方法名後面用throws,這樣這個異常就會拋出,誰調用了這個方法誰就要處理這個異常,或者繼續拋出.

throws語法:[<修飾符>]<返回值類型><方法名>([<參數列表>])[throws<異常類>]

其中:異常類可以聲明多個,用逗號分割。

區別二:throw要麼和try-catch-finally語句配套使用,要麼與throws配套使用。但throws可以單獨使用,然後再由處理異常的方法捕獲。

聯系一:try .... catch 就是用catch 捕獲 try 中的異常,並處理;catch是捕獲異常。也就是說某一個操作有可能會拋出什麼異常。throw 就是不處理異常,直接拋出異常

調用一個會throws exception的方法(在方法定義的時候可以用throws實現)時,需要把這個方法放在try里,然後用catch破獲這個exception,做相應的處理。

throw new exception()是拋出一個exception,由別的method來破獲它。

也就是說try....catch是為破獲別人的exception用的,而throw是自己拋出exception讓別人去破獲的。

public void input() throws Exception

{ }

public void outputException()

{

try {

input();

}

catch(Exception e)

{

System.out.println("Exception");

}

}

簡單的說,如果一個方法中用了throws,那麼這個方法會向上拋出一個異常,那麼在調用這個方法的時候必須把這個調用放在try...catch塊里處理這個異常。

對於異常有兩種處理方法

1、要麼聲明異常,也就是在方法名後面加上throws exceptionname,..., 方法本身只是拋出異常,由函數調用者來捕獲異常。 若產生異常,異常會沿著調用棧下移,一直找到與之匹配的處理方法,若到達調用棧底仍未找到,程序終止。

2、要麼捕獲異常。通過try catch方法,catch子句中放置處理異常的語句。

聯系二:對於會覺得會有異常拋出的程序塊,用try{}包住,然後用catch來抓住這個異常,在catch中對異常做處理, 在try中如果有異常的話,程序會轉到catch而不會中斷,通常這兩個是配合使用的,如果你不想因為程序有錯,而拋出一大堆異常的話,你就把該程序try起來,try和catch只能獲取程序運行時引發的異常,而throw語句可以引發明確的異常,程序到了throw語句這後就立即停止,不會執行後面的程序,

大家也許在編程的過程中,會意識到這里出錯,但不知道會拋出什麼異常,也是一件頭疼的事,現將這部分總結如下:

算術異常類:ArithmeticExecption

空指針異常類:NullPointerException

類型強制轉換異常:ClassCastException

數組負下標異常:NegativeArrayException

數組下標越界異常:

違背安全原則異常:SecturityException

文件已結束異常:EOFException

文件未找到異常:FileNotFoundException

字元串轉換為數字異常:NumberFormatException

操作資料庫異常:SQLException

輸入輸出異常:IOException

方法未找到異常:NoSuchMethodException

『叄』 JAVA 拋出異常throws怎麼用的

throw Exception用於拋出異常
比如在你的函數devide里 加以下代碼

if (num < 10 ){
throw new Exception("輸入的數字必須大於9!");
}

那調用devide的時候 只要num輸入10以下數字 就會拋出異常
try{
Throws.Devide();
} catch(Exception e) {

System.out.println("獲得一個錯誤:" + e.getMessage());
e.printStackTrace();
throw e; //不做進一步處理,將異常向外拋出
}

『肆』 JAVA的throw和throws怎麼用!

throw是語句拋出一個異常;語法:throw(異常對象);

(4)java拋異常的函數擴展閱讀:

throw與throws的區別

1、throw用在方法體內,上面代碼顯示了,是直接在main方法體內

throws用在方法聲明後面,表示再拋出異常,由該方法的調用者來處理。這個看上面的代碼就理解了。

2、throw是具體向外拋異常的,拋出的是一個異常實例。

throws聲明了是哪種類型的異常,使它的調用者可以捕獲這個異常。

3、throw,如果執行了,那麼一定是拋出了某種異常了,安生throws表示可能出現,但不一定。

4、同時出現的時候,throws出現在函數頭、throw出現在函數體,兩種不會由函數去處理,真正的處理由函數的上層調用處理。

『伍』 java Method invoke 拋出異常

InvocationTargetException異常由Method.invoke(obj, args...)方法拋出。當被調用的方法的內部拋出了異常而沒有被捕獲時,將由此異常接收。
示例:
package com.zzj.test.reflect;

public class Reflect {
public void run(int i) throws ZeroException {
B b = new B();
b.run(i);
}
}

class B {
public void run(int i) throws ZeroException {
if (i < 0) {
throw new ZeroException("參數不能小於零!");
}
System.out.println("參數:" + i);

}
}

class ZeroException extends Exception {
private static final long serialVersionUID = 1L;

private String detailMessage;

public ZeroException(String detailMessage) {
this.detailMessage = detailMessage;
}

public String getMessage() {
return detailMessage;
}
}
測試:
package com.zzj.test.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Test {
public static void main(String[] args) {
try {
Class<?> clazz = Class.forName("com.zzj.test.reflect.Reflect");
Method method = clazz.getMethod("run", int.class);
method.invoke(clazz.newInstance(), -1);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
System.out.println("此處接收被調用方法內部未被捕獲的異常");
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
}
}
輸出:
此處接收被調用方法內部未被捕獲的異常
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.zzj.test.reflect.Test.main(Test.java:11)
Caused by: com.zzj.test.reflect.ZeroException: 參數不能小於零!
at com.zzj.test.reflect.B.run(Reflect.java:13)
at com.zzj.test.reflect.Reflect.run(Reflect.java:6)
... 5 more
也可以直接列印目標異常:
package com.zzj.test.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Test {
public static void main(String[] args) {
try {
Class<?> clazz = Class.forName("com.zzj.test.reflect.Reflect");
Method method = clazz.getMethod("run", int.class);
method.invoke(clazz.newInstance(), -1);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
System.out.println("此處接收被調用方法內部未被捕獲的異常");
Throwable t = e.getTargetException();// 獲取目標異常
t.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
}
}
輸出:
此處接收被調用方法內部未被捕獲的異常
com.zzj.test.reflect.ZeroException: 參數不能小於零!
at com.zzj.test.reflect.B.run(Reflect.java:13)
at com.zzj.test.reflect.Reflect.run(Reflect.java:6)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.zzj.test.reflect.Test.main(Test.java:11)

『陸』 JAVA如何拋出異常

在方法中throw

閱讀全文

與java拋異常的函數相關的資料

熱點內容
python運維管理工具 瀏覽:453
功率分配演算法 瀏覽:489
錢豆豆app可以做什麼 瀏覽:194
騰訊雲伺服器還需要資料庫嗎 瀏覽:767
比較器編程 瀏覽:738
蘋果賞金賽和平精英是什麼app 瀏覽:986
idea查找項目所在文件夾 瀏覽:163
程序員的電腦硬碟清理 瀏覽:686
安卓手機照片太多內存不夠怎麼辦 瀏覽:958
施工命令號 瀏覽:59
javajpgtiff 瀏覽:871
忻奇醫用靜脈曲張壓縮襪 瀏覽:894
寧國壓縮泡沫板 瀏覽:957
速8屬於什麼app 瀏覽:606
小米8手機照片視頻文件夾 瀏覽:718
現代製造技術pdf 瀏覽:654
winftp命令大全 瀏覽:930
海南超市送貨有什麼app 瀏覽:576
迷你編程怎樣切換賬號 瀏覽:754
網路工程師ping命令 瀏覽:152