溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java開(kāi)發(fā)中常見(jiàn)錯(cuò)誤有哪些

發(fā)布時(shí)間:2021-11-04 15:26:25 來(lái)源:億速云 閱讀:180 作者:iii 欄目:web開(kāi)發(fā)

這篇文章主要講解了“Java開(kāi)發(fā)中常見(jiàn)錯(cuò)誤有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Java開(kāi)發(fā)中常見(jiàn)錯(cuò)誤有哪些”吧!

編譯器錯(cuò)誤

編譯器錯(cuò)誤消息在Java軟件代碼在編譯器執(zhí)行時(shí)產(chǎn)生。需要重點(diǎn)記住的是,一個(gè)編譯器可能為一個(gè)錯(cuò)誤拋出多個(gè)錯(cuò)誤消息。所以修復(fù)第一個(gè)錯(cuò)誤并重編譯,就能修復(fù)很多的問(wèn)題。

1.“…可預(yù)料的”

當(dāng)編碼出現(xiàn)遺漏時(shí),就會(huì)發(fā)生這類錯(cuò)誤??赡苁侨笔Я艘粋€(gè)括號(hào)或者分號(hào)。

Java開(kāi)發(fā)中常見(jiàn)錯(cuò)誤有哪些

這種錯(cuò)誤消息常常不會(huì)準(zhǔn)確的定位到錯(cuò)誤發(fā)生的位置。為了找到錯(cuò)誤,建議:

  • 確保所有的左括號(hào)有對(duì)應(yīng)匹配的右括號(hào)。

  • (使用IDE,譯者注)在代碼行前的提示中檢查。這種Java軟件錯(cuò)誤不要由編譯器來(lái)關(guān)注,應(yīng)該把更后面的工作交給它。

  • 有時(shí)候一個(gè)字符,比如一個(gè)左括號(hào)不應(yīng)該寫(xiě)在Java代碼的開(kāi)始處。這樣造成的結(jié)果是開(kāi)發(fā)者不會(huì)寫(xiě)右括號(hào)去湊成一對(duì)。

在這里小編建了一個(gè)前端學(xué)習(xí)交流扣扣群:132667127,我自己整理的最新的前端資料和高級(jí)開(kāi)發(fā)教程,如果有想需要的,可以加群一起學(xué)習(xí)交流

2.“未封閉的String表達(dá)式”

“未封閉的String表達(dá)式”錯(cuò)誤消息發(fā)生在Sting表達(dá)式結(jié)束時(shí)沒(méi)有引號(hào)標(biāo)記,錯(cuò)誤消息將在發(fā)生錯(cuò)誤的同一行提示出來(lái)。一個(gè)String表達(dá)式在源碼中是一個(gè)值。

Java開(kāi)發(fā)中常見(jiàn)錯(cuò)誤有哪些

通常情況下,錯(cuò)誤發(fā)生在:

  • String表達(dá)式結(jié)束時(shí)沒(méi)有使用引號(hào)標(biāo)記。這種錯(cuò)誤只要在String表達(dá)式結(jié)束是使用引號(hào)就能簡(jiǎn)單的改正

  • String表達(dá)式超過(guò)一行時(shí)。長(zhǎng)的String表達(dá)式可以被拆分成多個(gè)表達(dá)式,然后用"+"連接起來(lái)。

  • 引號(hào)是String表達(dá)式中的元素又沒(méi)有使用下劃線“\”進(jìn)行轉(zhuǎn)義。

3.“非法的表達(dá)式開(kāi)頭”

出現(xiàn)“非法表達(dá)式開(kāi)頭”錯(cuò)誤的原因有很多。但它最終歸類于一個(gè)不太有用的錯(cuò)誤消息之一。有些開(kāi)發(fā)者說(shuō)這是由糟糕的代碼造成的。

通常,創(chuàng)建表達(dá)式是用于生成新值或?yàn)樽兞抠x值。編譯器期望找到一個(gè)表達(dá)式,但找不到它,因?yàn)檎Z(yǔ)法不符合預(yù)期。在下面這些語(yǔ)句中可以找到此錯(cuò)誤。

Java開(kāi)發(fā)中常見(jiàn)錯(cuò)誤有哪些

4.“找不到符號(hào)”

這是一個(gè)非常常見(jiàn)的問(wèn)題,因?yàn)镴ava中的所有標(biāo)識(shí)符都需要在使用之前進(jìn)行聲明。當(dāng)編譯代碼時(shí),編譯器并不理解標(biāo)識(shí)符的含義。

在你遇到“找不到符號(hào)”消息時(shí)可能有很多種原因:

  • 標(biāo)識(shí)符聲明時(shí)的拼寫(xiě)可能與代碼中使用時(shí)的拼寫(xiě)不同。

  • 該變量從未被聲明。

  • 該變量使用的位置與其聲明的作用域不同。

  • 類并未被導(dǎo)入。

5.“公共類XXX應(yīng)該在文件中出現(xiàn)”

“公共類XXX應(yīng)該在文件中出現(xiàn)”這個(gè)消息出現(xiàn)在類XXX和Java程序文件名不一致時(shí)。源代碼只有在類名和Java文件名一樣時(shí)才會(huì)被編譯。

Java開(kāi)發(fā)中常見(jiàn)錯(cuò)誤有哪些

要修復(fù)這種情況:

  • 類名和文件名一樣。

  • 確保這兩個(gè)名字的大小寫(xiě)一致。

6.“不兼容類型”

“不兼容的類型”是在賦值語(yǔ)句中嘗試將變量與類型表達(dá)式匹配時(shí)觸發(fā)的邏輯錯(cuò)誤。通常是在代碼嘗試將文本字符寫(xiě)入到整數(shù)中時(shí)出現(xiàn),反之亦然。這不是Java語(yǔ)法錯(cuò)誤。

當(dāng)編譯器給出“不兼容的類型”消息時(shí),確實(shí)沒(méi)有一個(gè)簡(jiǎn)單的修復(fù)方案:

  • 有可以轉(zhuǎn)換類型的函數(shù)。

  • 開(kāi)發(fā)人員可能需要按照代碼的預(yù)期修改之。

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

此錯(cuò)誤表示方法簽名中沒(méi)有明確說(shuō)明方法的返回類型。

有幾種方式會(huì)觸發(fā)“無(wú)效的方法聲明;需求返回類型“錯(cuò)誤:

  • 忘記說(shuō)明返回類型

  • 如果方法沒(méi)有返回值,那么需要用“void”表示方法簽名中的返回類型。

  • 構(gòu)造函數(shù)名稱不需要說(shuō)明返回類型。但是,如果構(gòu)造函數(shù)名稱中出現(xiàn)錯(cuò)誤,那么編譯器會(huì)將構(gòu)造函數(shù)視為沒(méi)有指定類型的方法。

8.“類Y中的方法X不能應(yīng)用于給定類型”

此錯(cuò)誤消息是Java中最有用的錯(cuò)誤消息之一。它解釋了方法簽名是如何調(diào)用錯(cuò)誤參數(shù)的。

Java開(kāi)發(fā)中常見(jiàn)錯(cuò)誤有哪些

方法在被調(diào)用時(shí)期望獲取在方法聲明中定義的某些參數(shù)。檢查方法聲明、謹(jǐn)慎調(diào)用方法,以確保聲明和調(diào)用的參數(shù)是兼容的。

9.“缺少返回語(yǔ)句”

當(dāng)一個(gè)方法缺少返回語(yǔ)句時(shí),會(huì)發(fā)生“缺少返回語(yǔ)句”錯(cuò)誤。每一個(gè)有返回值的方法(非void類型)必須有一句字面上的語(yǔ)句用以返回返回值,以便在方法外調(diào)用該值。

Java開(kāi)發(fā)中常見(jiàn)錯(cuò)誤有哪些

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

  • 返回語(yǔ)句被錯(cuò)誤地省略了

  • 一個(gè)方法沒(méi)有返回任何值,但是在方法簽名中沒(méi)有聲明為void類型

10.“精度可能丟失”

當(dāng)將超過(guò)一個(gè)變量可以保存的信息分配給該變量時(shí),會(huì)發(fā)生“精度可能丟失”問(wèn)題。如果發(fā)生這種情況,超出的信息將會(huì)被扔掉。如果這樣做沒(méi)問(wèn)題,那么代碼需要將變量顯式地聲明為新類型。

下面情況會(huì)發(fā)生“精度可能丟失”錯(cuò)誤:

  • 將一個(gè)實(shí)數(shù)賦值給一個(gè)整型變量。

  • 將一個(gè)雙精度浮點(diǎn)數(shù)賦值給一個(gè)整型變量。

11.“解析時(shí)到達(dá)文件末尾”

這個(gè)錯(cuò)誤信息經(jīng)常發(fā)生在Java程序缺少“}”符號(hào)時(shí)。通常在代碼末加上“}”符號(hào)能很快解決這個(gè)問(wèn)題。

Java開(kāi)發(fā)中常見(jiàn)錯(cuò)誤有哪些

上述代碼的運(yùn)行結(jié)果是下列錯(cuò)誤:

  • 代碼編寫(xiě)工具和適當(dāng)?shù)拇a縮進(jìn)可以更容易地找到這些不對(duì)的大括號(hào)。

  • 這個(gè)示例展示了缺少的大括號(hào)如何造成“解析時(shí)到達(dá)文件結(jié)尾”的錯(cuò)誤消息。

12.“語(yǔ)句不可達(dá)”

“語(yǔ)句不可達(dá)”發(fā)生在當(dāng)語(yǔ)句被放在一個(gè)不會(huì)被執(zhí)行的位置時(shí)候。通常是在break語(yǔ)句或return語(yǔ)句后面。

通常簡(jiǎn)單地移動(dòng)return語(yǔ)句就能解決這個(gè)錯(cuò)誤。

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

這個(gè)問(wèn)題發(fā)生在當(dāng)方法內(nèi)局部變量在聲明時(shí)沒(méi)有被初始化的時(shí)候。當(dāng)一個(gè)變量未被初始化但是出現(xiàn)在if語(yǔ)句中的時(shí)候會(huì)發(fā)生該錯(cuò)誤。

14.“操作符...不能應(yīng)用于x”

這個(gè)情況發(fā)生于當(dāng)操作符應(yīng)用于沒(méi)有定義其使用方法的類型上。

當(dāng)Java代碼嘗試使用string類型進(jìn)行數(shù)學(xué)計(jì)算時(shí)會(huì)經(jīng)常出現(xiàn)這個(gè)問(wèn)題。為了解決它,string需要被轉(zhuǎn)化為integer或float。

15.“不能轉(zhuǎn)換的類型”

“不能轉(zhuǎn)換的類型”錯(cuò)誤發(fā)生在Java代碼嘗試進(jìn)行非法轉(zhuǎn)換的時(shí)候。

例如,boolean不能轉(zhuǎn)換為int。

16.“缺少返回值”

當(dāng)返回語(yǔ)句返回一個(gè)錯(cuò)誤的類型時(shí),你就會(huì)收到“缺少返回值”消息。例如下列代碼:

返回下列錯(cuò)誤信息:

通常,那些返回語(yǔ)句沒(méi)有返回任何東西。

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

當(dāng)一個(gè)返回類型為void的方法嘗試返回任何值的時(shí)候就會(huì)發(fā)生這個(gè)Java錯(cuò)誤,例如下面的例子:

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

18.“非靜態(tài)變量...不能在靜態(tài)上下文中被引用”

當(dāng)編譯器嘗試在一個(gè)靜態(tài)方法中訪問(wèn)一個(gè)非靜態(tài)變量時(shí)會(huì)發(fā)生該錯(cuò)誤。

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

  • 在簽名中將變量聲明為靜態(tài)變量。

  • 在靜態(tài)方法中創(chuàng)建一個(gè)非靜態(tài)對(duì)象的示例

19.“非靜態(tài)方法...不能在靜態(tài)上下文中被引用”

這個(gè)情況發(fā)生在Java代碼嘗試在非靜態(tài)類中調(diào)用非靜態(tài)方法的時(shí)候。例如下述代碼:

將會(huì)返回下述錯(cuò)誤:

為了在靜態(tài)方法中調(diào)用非靜態(tài)方法,可以聲明一個(gè)類的實(shí)例來(lái)調(diào)用這個(gè)非靜態(tài)方法。

20.“(array)<X>NotInitialized”(數(shù)組未初始化)

當(dāng)數(shù)組已聲明但未初始化時(shí),你將得到“(array)<X>未初始化”的消息。數(shù)組的長(zhǎng)度是固定的,因此每個(gè)數(shù)組都需要按照實(shí)際長(zhǎng)度進(jìn)行初始化。

感謝各位的閱讀,以上就是“Java開(kāi)發(fā)中常見(jiàn)錯(cuò)誤有哪些”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Java開(kāi)發(fā)中常見(jiàn)錯(cuò)誤有哪些這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI