1. 程式人生 > >java 課後作業知識點整理

java 課後作業知識點整理

一、執行時出現的錯誤:Java中出現的ExceptionInInitializerError異常的原因

 摘錄自 ITeye-部落格

原文   http://deepinmind.iteye.com/blog/2078286 主題  JVM        當在靜態初始化塊中出現了異常的時候,JVM會丟擲 java.lang.ExceptionInInitializerError異常。如果你瞭解Java中的靜態變數,你會知道它們是在類載入的時候進行初始化的。如果在這個靜態變數初始化的過程中出現了異常,那麼就會丟擲 java.lang.ExceptionInInitializerError異常。任何異常都可能會引發這種情況,比如說,java.lang.ArrayIndexOutOfBound或者java.lang.NullPointerException。Java開發人員通常會被這個錯誤弄暈, 他覺得自己並沒有定義任何的靜態初始化塊,為什麼還會丟擲ExceptionInInitializerError異常;事實上,Java預設會將靜態變數的初始化放在一個預設的靜態初始化塊中,然後按它們在原始檔中宣告的順序來進行初始化。比如
說變數ABC宣告在第一行,在第二行中使用到了,而在第三行的時候才初始化,那麼第二行的程式碼會丟擲一個NullPointerException異常,這個異常會被封裝到一個ExceptionInInitializerError異常中,如果這段程式碼在主執行緒中執行了,你會看到控制檯或者日誌檔案中出現這樣的錯誤資訊: "Exception in thread "main" java.lang.ExceptionInInitializerError"。在一個擁有大量日誌檔案的大型系統中,這樣的錯誤很容易被忽略,而程式設計師會得到一個java.lang.NoClassDefFoundError異常。不幸的是只有當別人使用到了這個類的時候才會出現這個錯誤,因為ExceptionInInitializerError導致了這個類無法載入。由於類載入失敗了,因此JVM會丟擲NoClassDefFoundError。有的時候這會誤導Java開發人員,他們會檢查類路徑,PATH,以及java.library.path看是不是缺少了這個類,卻又發現不了任何問題,這讓他們很困惑。如果你在分析NoClassDefFoundError的原因,你最好看下你的日誌檔案中有沒有ExceptionInInitializerError,然後再考慮要不要檢查classpath。、   小結:1、此類錯誤主要是一些變數初始化的順序有問題導致的問題,例如當自定義類中的資料域中有引用型別(自定義類或者java包中的類時),如若需要使用到該資料域時,往往需要在該類的構造方法以及其他方法中先初始化(即new一個),例如date類等           2、ArrayList的使用:匯入、初始化(順便定義元素的性質); 原問題是ObjectDemo的問題,關鍵在於設定Salary類(包括其中的求tax),Employee類,以及從檔案讀入資料;