最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

Java 常見的49個(gè)錯(cuò)誤及避免方法!

2023-08-10 15:32 作者:程序員霖子  | 我要投稿

學(xué)習(xí)java的同學(xué),在開發(fā)Java軟件時(shí)可能會(huì)遇到許多類型的錯(cuò)誤,但大多數(shù)是可以避免的。為此我們羅列了49個(gè)最常見的Java編碼錯(cuò)誤,其中包含代碼示例和教程,以幫助大家解決常見的編碼問題。

編譯器錯(cuò)誤

當(dāng)Java軟件代碼通過編譯器運(yùn)行時(shí),會(huì)創(chuàng)建編譯器錯(cuò)誤消息。謹(jǐn)記編譯器可能會(huì)針對一個(gè)錯(cuò)誤拋出許多錯(cuò)誤消息。所以得修復(fù)第一個(gè)錯(cuò)誤并重新編譯。這樣做可以解決很多問題。

1.“…Expected”

當(dāng)代碼中缺少某些東西時(shí),會(huì)發(fā)生此錯(cuò)誤。通常是因?yàn)槿鄙俜痔柣蛴依ㄌ枴?/p>

private static double volume(String solidom, double alturam, double areaBasem, double raiom) {double vol; if (solidom.equalsIgnoreCase("esfera"){vol=(4.0/3)*Math.pi*Math.pow(raiom,3);} else { if (solidom.equalsIgnoreCase("cilindro") {vol=Math.pi*Math.pow(raiom,2)*alturam;} else {vol=(1.0/3)*Math.pi*Math.pow(raiom,2)*alturam;}} return vol;}

通常,此錯(cuò)誤消息不會(huì)精確確定問題的確切位置。為了找到錯(cuò)誤:

  • 確保所有的左括號都有一個(gè)對應(yīng)的右括號。

  • 在查看指示的Java代碼行之前順便看看行。此Java軟件錯(cuò)誤沒有被編譯器注意到,直到在代碼中更深層次地查看。

  • 有時(shí)一個(gè)字符,如一個(gè)左括號,并不應(yīng)該放在Java代碼的原先位置。所以開發(fā)人員沒有放置一個(gè)右括號來平衡括號。

點(diǎn)擊查看關(guān)于錯(cuò)誤的圓括號會(huì)如何導(dǎo)致錯(cuò)誤(@StackOverflow)的示例。

2.“Unclosed String Literal”

如果字符串文字結(jié)束時(shí)沒有引號的話,會(huì)創(chuàng)建“Unclosed String Literal”的錯(cuò)誤消息,并且消息將顯示在與錯(cuò)誤相同的行上。(@DreamInCode)Literal是值的源代碼。

public abstract class NFLPlayersReference { private static Runningback[] nflplayersreference; private static Quarterback[] players; private static WideReceiver[] nflplayers; public static void main(String args[]){Runningback r = new Runningback("Thomlinsion");Quarterback q = new Quarterback("Tom Brady");WideReceiver w = new WideReceiver("Steve Smith");NFLPlayersReference[] NFLPlayersReference;Run();// {NFLPlayersReference = new NFLPlayersReference [3];nflplayersreference[0] = r;players[1] = q;nflplayers[2] = w; for ( int i = 0; i < nflplayersreference.length; i++ ) {System.out.println("My name is " + " nflplayersreference[i].getName()); nflplayersreference[i].run(); nflplayersreference[i].run(); nflplayersreference[i].run(); System.out.println("NFL offensive threats have great running abilities!"); } } private static void Run() { System.out.println("Not yet implemented"); } }

通常。這種情況發(fā)生在:

  • 字符串文字不以引號結(jié)尾。這很容易糾正,加上所需的引號,閉合字符串文字即可。

  • 字符串文字?jǐn)U展超過一行。長字符串文字可以分解成字符串文字,并加上加號(“+”)。

  • 作為字符串文字一部分的引號不通過反斜杠(“”)進(jìn)行轉(zhuǎn)義。

點(diǎn)擊閱讀關(guān)于Java軟件錯(cuò)誤消息Unclosed String Literal的討論。(@Quora)

3.“Illegal Start of an Expression”

出現(xiàn)“Illegal Start of an Expression”錯(cuò)誤的原因有很多。因此名列不太有用的錯(cuò)誤消息之一。有些開發(fā)者甚至認(rèn)為這是由壞的代碼造成的。

通常,創(chuàng)建表達(dá)式是為了生成新的值或?yàn)樽兞糠峙渲?。編譯器期望找到表達(dá)式,但因?yàn)檎Z法不符合預(yù)期而找不到表達(dá)式。(@StackOverflow)在這些語句中就可以發(fā)現(xiàn)此錯(cuò)誤。

} // ADD IT HEREpublic void newShape(String shape) { switch (shape) { case "Line":Shape line = new Line(startX, startY, endX, endY);shapes.add(line); break; case "Oval":Shape oval = new Oval(startX, startY, endX, endY);shapes.add(oval); break; case "Rectangle":Shape rectangle = new Rectangle(startX, startY, endX, endY);shapes.add(rectangle); break; default:System.out.println("ERROR. Check logic.");}}} // REMOVE IT FROM HERE}

點(diǎn)擊瀏覽關(guān)于如何排除“Illegal Start of an Expression”錯(cuò)誤的討論。(@StackOverflow)

4.“Cannot Find Symbol”

這是一個(gè)非常常見的問題,因?yàn)镴ava中的所有標(biāo)識符都需要在被使用之前進(jìn)行聲明。 發(fā)生錯(cuò)誤的原因在于編譯代碼時(shí),編譯器不明白標(biāo)識符的含義。

Java 常見的49個(gè)錯(cuò)誤及避免方法!翻譯作業(yè):碼農(nóng)網(wǎng)-小峰

可能收到“Cannot Find Symbol”信息的原因有很多:

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

  • 變量從未被聲明。

  • 變量使用時(shí)與聲明未在同一范圍內(nèi)。

  • 類沒有導(dǎo)入。

點(diǎn)擊閱讀有關(guān)“Cannot Find Symbol”錯(cuò)誤的詳細(xì)討論以及產(chǎn)生此問題的代碼示例。(@StackOverflow)

5.“Public Class XXX Should Be in File”

當(dāng)XXX類和Java程序文件名不匹配時(shí),會(huì)發(fā)生“Public Class XXX Should Be in File”消息。只有當(dāng)類和Java文件相同時(shí),代碼才會(huì)被編譯。(@coderanch):

package javaapplication3;public class Robot { int xlocation; int ylocation; String name; static int ccount = 0; public Robot(int xxlocation, int yylocation, String nname) { xlocation = xxlocation; ylocation = yylocation; name = nname; ccount++; }} public class JavaApplication1 {public static void main(String[] args) { robot firstRobot = new Robot(34,51,"yossi"); System.out.println("numebr of robots is now " + Robot.ccount); }}

為解決這個(gè)問題:

  • 類和文件命名相同。

  • 確保兩名稱的情況一致。

點(diǎn)擊查閱“Public Class XXX Should Be in File”錯(cuò)誤的示例。(@StackOverflow)

6.“Incompatible Types”

“Incompatible Types”是指定語句嘗試將變量與類型表達(dá)式配對時(shí)發(fā)生的邏輯錯(cuò)誤。 通常會(huì)在代碼嘗試將文本字符串放入到整型中時(shí)出現(xiàn),反之亦然。這并非Java語法錯(cuò)誤。(@StackOverflow)

test.java:78: error: incompatible typesreturn stringBuilder.toString();^required: intfound: String1 error

當(dāng)編譯器給出“Incompatible Types”消息時(shí),就不是簡單修復(fù)可以擺平的了:

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

  • 開發(fā)人員可能需要更改代碼預(yù)期的功能。

查看此例子,里面說明了如何試著將一個(gè)字符串分配給一個(gè)整數(shù),出現(xiàn)“Incompatible Types”消息。(@StackOverflow)

7.“Invalid Method Declaration; Return Type Required”

此Java軟件錯(cuò)誤消息表示方法簽名中未明確聲明方法的返回類型。

public class Circle{ private double radius; public CircleR(double r) {radius = r;} public diameter() { double d = radius * 2; return d;}}

有若干途徑會(huì)觸發(fā)“Invalid Method Declaration; Return Type Required” 錯(cuò)誤:

  • 忘記聲明類型

  • 如果方法沒有返回值,那么需要將“void”聲明為方法簽名中的類型。

  • 構(gòu)造函數(shù)名稱不需要聲明類型。 但是,如果構(gòu)造函數(shù)名稱中存在錯(cuò)誤,那么編譯器將會(huì)把構(gòu)造函數(shù)視為沒有指定類型的方法。

查看此說明構(gòu)造函數(shù)命名如何觸發(fā)“Invalid Method Declaration; Return Type Required” 問題的例子。(@StackOverflow)

8.“Method <X> in Class <Y> Cannot Be Applied to Given Types”

此Java軟件錯(cuò)誤消息是比較有用的錯(cuò)誤消息之一。 它解闡明了方法簽名正在調(diào)用錯(cuò)誤的參數(shù)。

RandomNumbers.java:9: error: method generateNumbers in class RandomNumbers cannot be applied to given types;generateNumbers();required: int[]found:generateNumbers();reason: actual and formal argument lists differ in length

調(diào)用的方法期待方法聲明中定義的某些參數(shù)。檢查方法聲明并仔細(xì)調(diào)用,以確保它們是兼容的。

查看此討論,里面說明了Java軟件錯(cuò)誤消息如何識別在方法聲明和方法調(diào)用中由參數(shù)創(chuàng)建的不兼容性。(@StackOverflow)

9.“Missing Return Statement”

當(dāng)一個(gè)方法沒有返回語句時(shí),就會(huì)出現(xiàn)“Missing Return Statement”的消息。每個(gè)返回值(非void類型)的方法都必須有一個(gè)字面上返回該值的語句,以便在方法之外調(diào)用它。

public String[] OpenFile() throws IOException { Map<String, Double> map = new HashMap();FileReader fr = new FileReader("money.txt");BufferedReader br = new BufferedReader(fr); try{ while (br.ready()){ String str = br.readLine(); String[] list = str.split(" ");System.out.println(list); }} catch (IOException e){System.err.println("Error - IOException!");}}

編譯器拋出“Missing Return Statement”消息的原因有若干:

  • 返回語句由于錯(cuò)誤被省略。

  • 該方法沒有返回任何值,但類型void在方法簽名中未聲明。

查看如何修復(fù)“Missing Return Statement”Java軟件錯(cuò)誤的示例。(@StackOverflow)

10.“Possible Loss of Precision”

當(dāng)更多的信息被分配給一個(gè)變量而超過它的容量,就會(huì)發(fā)生“Possible Loss of Precision”消息。如果出現(xiàn)這種情況,那么碎片就會(huì)被扔掉。 如果這樣沒有關(guān)系,那么代碼需要將變量顯式聲明為新的類型。

Java 常見的49個(gè)錯(cuò)誤及避免方法!翻譯作業(yè):碼農(nóng)網(wǎng)-小峰

“Possible Loss of Precision”錯(cuò)誤通常發(fā)生在:

  • 嘗試為整數(shù)數(shù)據(jù)類型的變量分配一個(gè)實(shí)數(shù)。

  • 嘗試為整數(shù)數(shù)據(jù)類型的變量分配一個(gè)double。

此Java中基本數(shù)據(jù)類型的解釋表述了數(shù)據(jù)特征。(@Oracle)

11.“Reached End of File While Parsing”

當(dāng)程序缺少關(guān)閉大括號(“}”)時(shí),Java代碼中就會(huì)發(fā)生此錯(cuò)誤消息。 有時(shí)我們可以通過在代碼的末尾放置大括號來快速修復(fù)錯(cuò)誤。

public class mod_MyMod extends BaseModpublic String Version(){ return "1.2_02";}public void AddRecipes(CraftingManager recipes){recipes.addRecipe(new ItemStack(Item.diamond), new Object[] { "#", Character.valueOf('#'), Block.dirt});}

上述代碼將導(dǎo)致以下錯(cuò)誤:

java:11: reached end of file while parsing }

編寫utilities程序和適當(dāng)?shù)拇a縮進(jìn)可以更容易地找到這類遺漏的大括號。

此示例表述了缺少了大括號會(huì)如何創(chuàng)建“Reached End of File While Parsing”的錯(cuò)誤消息。(@StackOverflow)

12.“Unreachable Statement”

當(dāng)一個(gè)語句寫在一個(gè)阻止它執(zhí)行的地方時(shí),就會(huì)發(fā)生“Unreachable statement”錯(cuò)誤。通常它出現(xiàn)在中斷或返回語句之后。

for(;;){ break;... // unreachable statement}int i=1;if(i==1)...else... // dead code

通常簡單地移動(dòng)返回語句將修復(fù)錯(cuò)誤。閱讀關(guān)于如何修復(fù)Unreachable Statement Java軟件錯(cuò)誤的討論。 (@StackOverflow)

13.“Variable <X> Might Not Have Been Initialized”

當(dāng)方法中聲明的局部變量未初始化時(shí),就會(huì)發(fā)生這種錯(cuò)誤。它也會(huì)出現(xiàn)在沒有初始值的變量是if語句組成部分的情況下。

int x;if (condition) {x = 5;}System.out.println(x); // x may not have been initialized

閱讀此關(guān)于如何避免觸發(fā)“Variable <X> Might Not Have Been Initialized”錯(cuò)誤的討論。(@reddit)

14.“Operator … Cannot be Applied to <X>”

當(dāng)操作符用于非定義中的類型時(shí),就會(huì)出現(xiàn)此問題。

operator < cannot be applied to java.lang.Object,java.lang.Object

當(dāng)Java代碼嘗試在計(jì)算中使用類型字符串時(shí),通常會(huì)發(fā)生這種情況。 要修復(fù)的話,就需要將字符串轉(zhuǎn)換為整型或浮點(diǎn)型。

閱讀此說明非數(shù)字類型如何導(dǎo)致Java軟件錯(cuò)誤從而警報(bào)操作符無法應(yīng)用于類型的例子。 (@StackOverflow)

15.“Inconvertible Types”

當(dāng)Java代碼嘗試執(zhí)行非法轉(zhuǎn)換時(shí),就會(huì)發(fā)生“Inconvertible Types”錯(cuò)誤。

TypeInvocationConversionTest.java:12: inconvertible typesfound : java.util.ArrayList<java.lang.Class<? extends TypeInvocationConversionTest.Interface1>>required: java.util.ArrayList<java.lang.Class<?>>lessRestrictiveClassList = (ArrayList<Class<?>>) classList;

例如,布爾值不能轉(zhuǎn)換為整型。

閱讀此關(guān)于如何在Java軟件中轉(zhuǎn)換不可轉(zhuǎn)換的類型的討論。(@StackOverflow)

16.“Missing Return Value”

當(dāng)return語句包含不正確的類型時(shí),你將收到“Missing Return Value”的消息。例如,以下代碼:

public class SavingsAcc2 { private double balance; private double interest; public SavingsAcc2() {balance = 0.0;interest = 6.17;} public SavingsAcc2(double initBalance, double interested) {balance = initBalance;interest = interested;} public SavingsAcc2 deposit(double amount) {balance = balance + amount; return;} public SavingsAcc2 withdraw(double amount) {balance = balance - amount; return;} public SavingsAcc2 addInterest(double interest) {balance = balance * (interest / 100) + balance; return;} public double getBalance() { return balance;}}

返回以下錯(cuò)誤:

SavingsAcc2.java:29: missing return value return;^SavingsAcc2.java:35: missing return value return;^SavingsAcc2.java:41: missing return value return;^3 errors


UP整理文檔不易!


有需要資料的小伙伴,點(diǎn)贊三聯(lián)!


評論:求分享!


即可拿取!up會(huì)第一時(shí)間分享給你!




Java 常見的49個(gè)錯(cuò)誤及避免方法!的評論 (共 條)

分享到微博請遵守國家法律
奉节县| 洞头县| 西华县| 喀什市| 皋兰县| 甘南县| 阿城市| 建湖县| 榕江县| 平凉市| 尤溪县| 合江县| 江陵县| 夏津县| 阿克陶县| 长治县| 万山特区| 双柏县| 永春县| 武宣县| 陕西省| 杭锦后旗| 固始县| 双桥区| 扎囊县| 龙海市| 乌兰浩特市| 宁阳县| 涡阳县| 北安市| 永川市| 哈密市| 革吉县| 和顺县| 桃园县| 通辽市| 海林市| 勃利县| 东台市| 香河县| 大厂|