Java開發中常見錯誤及規避技巧

在開發Java軟件時可能會遇到許多類型的錯誤,但大多數可以避免。我們列舉了50個最常見的Java軟件錯誤,其中包含代碼示例和教程,以幫助您解決常見的編碼問題。


編譯器錯誤


編譯器錯誤消息在Java軟件代碼在編譯器執行時產生。需要重點記住的是,一個編譯器可能為一個錯誤拋出多個錯誤消息。所以修復第一個錯誤並重編譯,就能修復很多的問題。


1.“…可預料的”


當編碼出現遺漏時,就會發生這類錯誤。可能是缺失了一個括號或者分號。


Java開發中常見錯誤及規避技巧


這種錯誤消息常常不會準確的定位到錯誤發生的位置。為了找到錯誤,建議:


  • 確保所有的左括號有對應匹配的右括號。
  • (使用IDE,譯者注)在代碼行前的提示中檢查。這種Java軟件錯誤不要由編譯器來關注,應該把更後面的工作交給它。
  • 有時候一個字符,比如一個左括號不應該寫在Java代碼的開始處。這樣造成的結果是開發者不會寫右括號去湊成一對。


2.“未封閉的String表達式”


“未封閉的String表達式”錯誤消息發生在Sting表達式結束時沒有引號標記,錯誤消息將在發生錯誤的同一行提示出來。一個String表達式在源碼中是一個值。


Java開發中常見錯誤及規避技巧


通常情況下,錯誤發生在:


  • String表達式結束時沒有使用引號標記。這種錯誤只要在String表達式結束時使用引號就能簡單的改正
  • String表達式超過一行時。長的String表達式可以被拆分成多個表達式,然後用"+"連接起來。
  • 引號是String表達式中的元素又沒有使用下劃線“\\”進行轉義。


3.“非法的表達式開頭”


出現“非法表達式開頭”錯誤的原因有很多。但它最終歸類於一個不太有用的錯誤消息之一。有些開發者說這是由糟糕的代碼造成的。


通常,創建表達式是用於生成新值或為變量賦值。編譯器期望找到一個表達式,但找不到它,因為語法不符合預期。在下面這些語句中可以找到此錯誤。


Java開發中常見錯誤及規避技巧


4.“找不到符號”


這是一個非常常見的問題,因為Java中的所有標識符都需要在使用之前進行聲明。當編譯代碼時,編譯器並不理解標識符的含義。


在你遇到“找不到符號”消息時可能有很多種原因:


  • 標識符聲明時的拼寫可能與代碼中使用時的拼寫不同。
  • 該變量從未被聲明。
  • 該變量使用的位置與其聲明的作用域不同。
  • 類並未被導入。


5.“公共類XXX應該在文件中出現”


“公共類XXX應該在文件中出現”這個消息出現在類XXX和Java程序文件名不一致時。源代碼只有在類名和Java文件名一樣時才會被編譯。


要修復這種情況:


  • 類名和文件名一樣。
  • 確保這兩個名字的大小寫一致。


6.“不兼容類型”


“不兼容的類型”是在賦值語句中嘗試將變量與類型表達式匹配時觸發的邏輯錯誤。通常是在代碼嘗試將文本字符寫入到整數中時出現,反之亦然。這不是Java語法錯誤。


當編譯器給出“不兼容的類型”消息時,確實沒有一個簡單的修復方案:


  • 有可以轉換類型的函數。
  • 開發人員可能需要按照代碼的預期修改之。


7.“無效的方法聲明;需求返回類型”


此錯誤表示方法簽名中沒有明確說明方法的返回類型。


有幾種方式會觸發“無效的方法聲明;需求返回類型“錯誤:


  • 忘記說明返回類型
  • 如果方法沒有返回值,那麼需要用“void”表示方法簽名中的返回類型。
  • 構造函數名稱不需要說明返回類型。但是,如果構造函數名稱中出現錯誤,那麼編譯器會將構造函數視為沒有指定類型的方法。


8.“類Y中的方法X不能應用於給定類型”


此錯誤消息是Java中最有用的錯誤消息之一。它解釋了方法簽名是如何調用錯誤參數的。


Java開發中常見錯誤及規避技巧


方法在被調用時期望獲取在方法聲明中定義的某些參數。檢查方法聲明、謹慎調用方法,以確保聲明和調用的參數是兼容的。


9.“缺少返回語句”


當一個方法缺少返回語句時,會發生“缺少返回語句”錯誤。每一個有返回值的方法(非void類型)必須有一句字面上的語句用以返回返回值,以便在方法外調用該值。


Java開發中常見錯誤及規避技巧


下面列舉了一些編譯器拋出“缺少返回語句”的消息的原因:


  • 返回語句被錯誤地省略了
  • 一個方法沒有返回任何值,但是在方法簽名中沒有聲明為void類型


10.“精度可能丟失”


當將超過一個變量可以保存的信息分配給該變量時,會發生“精度可能丟失”問題。如果發生這種情況,超出的信息將會被扔掉。如果這樣做沒問題,那麼代碼需要將變量顯式地聲明為新類型。


下面情況會發生“精度可能丟失”錯誤:


  • 將一個實數賦值給一個整型變量。
  • 將一個雙精度浮點數賦值給一個整型變量。


11.“解析時到達文件末尾”


這個錯誤信息經常發生在Java程序缺少“}”符號時。通常在代碼末加上“}”符號能很快解決這個問題。


Java開發中常見錯誤及規避技巧


上述代碼的運行結果是下列錯誤:


  • 代碼編寫工具和適當的代碼縮進可以更容易地找到這些不對的大括號。
  • 這個示例展示了缺少的大括號如何造成“解析時到達文件結尾”的錯誤消息。


12.“語句不可達”


“語句不可達”發生在當語句被放在一個不會被執行的位置時候。通常是在break語句或return語句後面。


通常簡單地移動return語句就能解決這個錯誤。


13.“變量x可能未被初始化”


這個問題發生在當方法內局部變量在聲明時沒有被初始化的時候。當一個變量未被初始化但是出現在if語句中的時候會發生該錯誤。


14.“操作符...不能應用於x”


這個情況發生於當操作符應用於沒有定義其使用方法的類型上。


當Java代碼嘗試使用string類型進行數學計算時會經常出現這個問題。為了解決它,string需要被轉化為integer或float。


15.“不能轉換的類型”


“不能轉換的類型”錯誤發生在Java代碼嘗試進行非法轉換的時候。


例如,boolean不能轉換為int。


16.“缺少返回值”


當返回語句返回一個錯誤的類型時,你就會收到“缺少返回值”消息。例如下列代碼:


返回下列錯誤信息:


通常,那些返回語句沒有返回任何東西。


17.“返回類型為void的方法不能返回一個值”


當一個返回類型為void的方法嘗試返回任何值的時候就會發生這個Java錯誤,例如下面的例子:


通常改變方法簽名,使之和返回語句的返回類型相配就能解決這個問題。在上述例子中,void可以改為int:


18.“非靜態變量...不能在靜態上下文中被引用”


當編譯器嘗試在一個靜態方法中訪問一個非靜態變量時會發生該錯誤。


為了解決“非靜態變量...不能在靜態上下文中被引用”的錯誤,有下述兩種方法:


  • 在簽名中將變量聲明為靜態變量。
  • 在靜態方法中創建一個非靜態對象的示例


19.“非靜態方法...不能在靜態上下文中被引用”


這個情況發生在Java代碼嘗試在非靜態類中調用非靜態方法的時候。例如下述代碼:


將會返回下述錯誤:


為了在靜態方法中調用非靜態方法,可以聲明一個類的實例來調用這個非靜態方法。


20.“(array)NotInitialized”(數組未初始化)


當數組已聲明但未初始化時,你將得到“(array)

未初始化”的消息。數組的長度是固定的,因此每個數組都需要按照實際長度進行初始化。


以下代碼是可以接受的:


下面也是可以的:


但是這個不行:


接下來的內容


現在我們已經討論了編譯器錯誤,下次我們將深入討論各種可能出現的運行時異常,這些異常會浪費你一整天時間。就像本部分,它們將包含代碼塊、解釋和相關鏈接,以幫助您儘快修復代碼

java視頻教程獲取方式:請大家轉發本文+關注並私信小編 “ 資料 ”,即可獲取。

Java開發中常見錯誤及規避技巧

Java開發中常見錯誤及規避技巧


分享到:


相關文章: