真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

NoClassDefFoundError和ClassNotFoundException的區(qū)別是什么

今天就跟大家聊聊有關(guān)NoClassDefFoundError 和 ClassNotFoundException 的區(qū)別是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、呼和浩特網(wǎng)絡(luò)推廣、重慶小程序開發(fā)、呼和浩特網(wǎng)絡(luò)營銷、呼和浩特企業(yè)策劃、呼和浩特品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供呼和浩特建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com

NoClassDefFoundError 和 ClassNotFoundException 區(qū)別的常見回答

NoClassDefFoundError 是一種 Error,Error 在大多數(shù)情況下代表無法從程序中恢復(fù)的致命錯誤,產(chǎn)生的原因在于 JVM 或者 ClassLoader 在運行時類加載器在 classpath 下找不到需要的類定義(編譯期是可以正常找到的,所以和 ClassNotFoundException 不同的是這是一個運行期的 Error),這個時候虛擬機(jī)就會拋出 NoClassDefFoundError,通常造成該 ERROR 的原因是打包過程中漏掉了部分類,或者 jar 包出現(xiàn)損壞或篡改,對應(yīng)的 Class 在 classpath 中不可用等等原因

ClassNotFoundException 是屬于 Exception 的運行時異常,大多是可以從代碼中恢復(fù)的異常類型,導(dǎo)致該異常的原因大多是因為使用 Class.forName() 方法動態(tài)的加載類信息,但是這個類在類路徑中并沒有被找到,那么就會在運行時拋出 ClassNotFoundException

以上是大致的 NoClassDefFoundError 和 ClassNotFoundException 的區(qū)別,那么延伸一下可以探討 Java 類型體系中的 Error 和 Exception


Error 和 Exception 的區(qū)別

Error 和 Exception 都是繼承 Throwable 類,它們體現(xiàn) Java 設(shè)計者在對異常的不同情況所進(jìn)行的分類處理,在 Java 中只有 Throwable 類的實例才能被 try/catch 捕獲或者聲明拋出。

Error 在大多數(shù)情況下代表程序出現(xiàn)了致命并且不可恢復(fù)的錯誤,它們大多都是不可預(yù)測的錯誤,不需要也不能捕獲和拋出,例如常見的 OutOfMemeryError,StackOverFlowError,還有本文提到的 NoClassDefFoundError,他們都是 Error 的子類

Exception 屬于程序錯誤,大多是人為編碼所導(dǎo)致的,它們大多都可以預(yù)測,也可以通過程序處理讓程序正常流程,所以是需要進(jìn)行捕獲(try/catch)或者聲明拋出(throw)的,Exception 還分兩種情況,可檢查異常 checked exception(編譯期異常),非檢查異常 unchecked exception(運行期異常)

可檢查異常是編譯期必須要顯示處理的異常,編譯器會強(qiáng)制要求處理這種的異常,不然編譯就不會通過,非檢查異常是程序在運行時出現(xiàn)的異常,大多是程序員處理不到導(dǎo)致的程序問題,例如常見的 NullPointerException,ArrayIndexOutOfBoundsException,本文標(biāo)題的 ClassNotFoundException 就是屬于編譯期異常,在使用 Class.forName 需要強(qiáng)制處理

一圖勝千言,為了方便大家直觀感受,我大概畫了一個簡單的異常體系結(jié)構(gòu)圖,僅供參考:

NoClassDefFoundError 和 ClassNotFoundException 的區(qū)別是什么


使用異常的注意事項

平時在操作異常的時候有什么需要注意的嗎?我們先看一段簡單的代碼示例

try {
		// 業(yè)務(wù)代碼
		// something happened
		Thread.sleep(100);
} catch (Exception e) {
	
}

// 業(yè)務(wù)代碼

以上代碼犯了哪幾個明顯的錯誤?我簡單列舉一下:

  1. 捕獲異常應(yīng)該使用特定的類型的 Exception

  2. 沒有對異常進(jìn)行任何處理

為什么要捕獲特定類型的異常 ?主要有以下幾點 因為你的代碼會被團(tuán)隊很多人閱讀,寬泛的使用 Exception 對所有異常進(jìn)行處理會讓別人不好理解你代碼的異常,程序的主要目的也是要體現(xiàn)它的語義,例如 Thread.sleep 是明確拋出 InterruptedException,Class.forName 明確拋出 ClassNotFoundException,那么應(yīng)該針對 InterruptedException,ClassNotFoundException 這種明確的異常進(jìn)行明確的處理,而不是泛泛的使用 Exception 包住所有的異常

沒有對異常進(jìn)行任何處理 這個問題其實比上面更嚴(yán)重,這種行為本質(zhì)上是在掩蓋問題,不僅會導(dǎo)致出現(xiàn)各種詭異的問題,而且完全沒有線索可以跟蹤,沒有人可以猜測到程序是在哪里出了問題,導(dǎo)致定位問題非常低效,所以如果沒有拋出異常,最起碼也要把對應(yīng)的的錯誤信息 到日志內(nèi),而不是“生吞”異常,人為的為診斷設(shè)置障礙


總結(jié)

我們通過一個簡單的 NoClassDefFoundError 和 ClassNotFoundException 區(qū)別 的問題和一個簡單的異常處理程序 demo 牽引出 Java 的異常體系和不同的分類和平時對異常處理的注意事項

另外推薦大家在實踐中盡量使用統(tǒng)一異常處理的機(jī)制,例如 Spring 提供了幾種的全局異常處理機(jī)制:

  • 實現(xiàn) HandlerExceptionResolver 接口

  • 在Controller內(nèi)部,用 @ExceptionHandler 注解處理異常

  • 全局 Controller 異常處理注解 @ControllerAdvice ,可以根據(jù)類型處理特定異常

看完上述內(nèi)容,你們對NoClassDefFoundError 和 ClassNotFoundException 的區(qū)別是什么有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


本文題目:NoClassDefFoundError和ClassNotFoundException的區(qū)別是什么
文章起源:http://weahome.cn/article/pcghdo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部