[英]Difference between try-catch and throw in java
try-catch 和 throw 子句有什么區別。 什么時候使用這些?
請告訴我。
try
塊將執行可能引發異常的敏感代碼catch
塊finally
塊。 即使未捕獲到異常或者您之前的塊中斷了執行流程。throw
關鍵字將允許您拋出異常(這將中斷執行流程並可以在catch
塊中catch
)。throws
關鍵字用於指定您的方法可能會拋出指定類型的異常。 當您檢查了不想在當前方法中捕獲的異常(您必須處理的異常)時,它很有用。資源:
另一方面,你真的應該接受一些答案。 如果有人遇到與您相同的問題並找到您的問題,他/她將很樂意直接看到問題的正確答案。
如果您執行以下示例,您就會知道 Throw 和 Catch 塊之間的區別。
一般而言:
catch塊將處理異常
throws會將錯誤傳遞給他的調用者。
在以下示例中,在throwsMethod()發生了錯誤,但它是在catchMethod(處理)。
public class CatchThrow {
private static void throwsMethod() throws NumberFormatException {
String intNumber = "5A";
Integer.parseInt(intNumber);
}
private static void catchMethod() {
try {
throwsMethod();
} catch (NumberFormatException e) {
System.out.println("Convertion Error");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
catchMethod();
}
}
Try/catch 和 throw 子句用於不同的目的。 所以它們不是相互替代的,而是互補的。
如果您在代碼中拋出了一些已檢查的異常,它應該在調用層次結構的代碼中的一些 try/catch 內。
相反,僅當代碼(您的代碼或 API 調用)中有一些 throw 子句會引發已檢查異常時,才需要 try/catch 塊。
有時,您可能希望在發生特定情況時拋出異常,您希望在調用代碼塊中處理這些情況,並且在某些情況下處理某些異常捕獲塊並再次拋出相同或不同的異常以在調用塊中處理。
所有這些關鍵字 try、catch 和 throw 都與 java 中的異常處理概念有關。 異常是在程序執行期間發生的事件。 異常會破壞應用程序的正常流程。 異常處理是一種用於處理異常以維持應用程序正常流程的機制。 Try-catch 塊用於處理異常。 在 try 塊中,我們編寫可能引發異常的代碼,而在 catch 塊中,我們編寫代碼來處理該異常。 Throw 關鍵字用於顯式拋出異常。 通常,throw 關鍵字用於拋出用戶定義的異常。
有關更多詳細信息,請訪問面向初學者的 Java 教程。
其他人已經給出了詳盡的答案,但如果您正在尋找更多信息,Oracle Java 教程始終是一個很好的資源。 這是異常的 Java 教程,它非常詳細地涵蓋了您的所有問題; https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html
在我對以下細節的有限經驗中。throws 是聲明可能發生但不一定發生的多個異常的聲明,throw 是只能拋出一個異常的操作,通常是非運行時異常,try catch 是一個塊捕獲方法中發生異常時可以處理的異常,可以拋出這個異常。 希望我的回答能幫到你
try
塊包含一組可能發生異常的語句。
catch
塊將用於處理try
塊中發生的異常。 try
塊后面總是跟一個catch
塊,我們可以有多個 catch 塊。
finally
塊在 catch 塊之后執行。 當有多個catch塊時,我們基本上用它來放置一些通用代碼。 即使有異常或沒有最終塊被執行。
throw
關鍵字將允許您拋出異常,它用於將控制從 try 塊轉移到 catch 塊。
throws
關鍵字用於沒有 try & catch 塊的異常處理。 它指定方法可以向調用者拋出並且不處理自身的異常。
// 演示 throws、throw、try、catch 和 finally 工作的 Java 程序。
public class MyExample {
static void myMethod() throws IllegalAccessException
{
System.out.println("Inside myMethod().");
throw new IllegalAccessException("demo");
}
// This is a caller function
public static void main(String args[])
{
try {
myMethod();
}
catch (IllegalAccessException e) {
System.out.println("exception caught in main method.");
}
finally(){
System.out.println("I am in final block.");
}
}
}
輸出:
Inside myMethod().
exception caught in main method.
I am in final block.
try - 添加敏感代碼 catch - 最后處理異常 - 無論異常是否被捕獲,總是執行。 與 try -catch 相關聯。 用於關閉我們在 try 塊 throw 中打開的資源 - 手動將我們創建的異常移交給 JVM。 用於拋出自定義異常拋出 - 將異常處理的責任委托給調用方方法或主方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.