日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java出现errors是什么错误_java中错误(error)和异常(exception)有什么主要区别?

發布時間:2024/10/6 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java出现errors是什么错误_java中错误(error)和异常(exception)有什么主要区别? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

jdk8中文發翻譯Throwable類的描述:Throwable類是Java語言中所有錯誤和異常的Throwable類。 只有作為此類(或其一個子類)的實例的對象由Java虛擬機拋出,或者可以由Java throw語句拋出。 類似地,只有這個類或其子類可以是catch子句中的參數類型。

2.Exception 和 Error 體現了 Java 平臺設計者對不同異常情況的分類。Exception 是程序正常運行中,可以預料的意外情況,可能并且應該被捕獲,進行相應處理。

3.Error 是指在正常情況下,不大可能出現的情況,絕大部分的 Error 都會導致程序(比如 JVM 自身)處于非正常的、不可恢復狀態。既然是非正常情況,所以不便于也不需要捕獲,常見的比如 OutOfMemoryError 之類,都是 Error 的子類。

4.Exception 又分為可檢查(checked)異常和不檢查(unchecked)異常,可檢查異常在源代碼里必須顯式地進行捕獲處理,這是編譯期檢查的一部分。前面我介紹的不可查的 Error,是 Throwable 不是 Exception。

如何處理這些異常?

在現實編程中我們一般使用 try-with-resources 和 multiple catch來進行一些異常處理(便利的特性),在編譯時期,會自動生成相應的處理邏輯,比如,自動按照約定俗成 close 那些擴展了 AutoCloseable 或者 Closeable 的對象。

try-with-resources 是一種處理Closeable實現類關閉資源的一種寫法,簡單寫了一個例子可以發現其實這就是一中語法,這種語法可以自動編譯幫忙編譯最后關閉流的操作:

public static void main(String[] args) {

try (BufferedReader br = new BufferedReader(new FileReader("a"));

BufferedWriter writer = new BufferedWriter(new FileWriter("a"))) {

// Try-with-resources

} catch (IOException e) {// Multiple catch

// Handle it

}

}

編譯后class

public static void main(String[] args) { ? ? ? ?try {

BufferedReader br = new BufferedReader(new FileReader("a"));

Throwable var2 = null; ? ? ? ? ? ?try {

BufferedWriter writer = new BufferedWriter(new FileWriter("a"));

Object var4 = null; ? ? ? ? ? ? ? ?if (writer != null) { ? ? ? ? ? ? ? ? ? ?if (var4 != null) { ? ? ? ? ? ? ? ? ? ? ? ?try {

writer.close();

} catch (Throwable var15) {

((Throwable)var4).addSuppressed(var15);

}

} else {

writer.close();

}

}

} catch (Throwable var16) {

var2 = var16; ? ? ? ? ? ? ? ?throw var16;

} finally { ? ? ? ? ? ? ? ?if (br != null) { ? ? ? ? ? ? ? ? ? ?if (var2 != null) { ? ? ? ? ? ? ? ? ? ? ? ?try {

br.close();

} catch (Throwable var14) {

var2.addSuppressed(var14);

}

} else {

br.close();

}

}

}

} catch (IOException var18) {

;

}

}

異常處理的兩個基本原則

盡量不要捕獲類似 Exception 這樣的通用異常,而是應該捕獲特定異常

這是因為在日常的開發和合作中,我們讀代碼的機會往往超過寫代碼,軟件工程是門協作的藝術,所以我們有義務讓自己的代碼能夠直觀地體現出盡量多的信息,而泛泛的 Exception 之類,恰恰隱藏了我們的目的。另外,我們也要保證程序不會捕獲到我們不希望捕獲的異常。比如,你可能更希望 RuntimeException 被擴散出來,而不是被捕獲。

不要生吞(swallow)異常。這是異常處理中要特別注意的事情,因為很可能會導致非常難以診斷的詭異情況。

如果我們不把異常拋出來,或者也沒有輸出到日志(Logger)之類,程序可能在后續代碼以不可控的方式結束。沒人能夠輕易判斷究竟是哪里拋出了異常,以及是什么原因產生了異常。

在寫程序時可以通過Objects類(jdk提供),或者斷言等提前判斷問題,如空指針異常的一些值的處理Objects. requireNonNull(filename);而不是使用之后有問題再系統拋出異常,這可能就會不直觀的找到問題所在。即:Throw early, catch late 原則

希望對您有所幫助!~

總結

以上是生活随笔為你收集整理的java出现errors是什么错误_java中错误(error)和异常(exception)有什么主要区别?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。