更新時(shí)間:2019-09-17 15:42:51 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽7775次
今天動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編為大家介紹“16個(gè)java常見錯(cuò)誤以及避免方法”,希望通過(guò)此文能夠幫助到各位java程序員,下面就隨小編一起來(lái)了解一下16個(gè)java常見錯(cuò)誤以及避免方法。

1、“… Expected”
當(dāng)代碼中缺少某些東西時(shí),會(huì)產(chǎn)生這個(gè)錯(cuò)誤。通常這是因?yàn)槿鄙僖粋€(gè)分號(hào)或右括號(hào)。
Java代碼:
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ì)指出產(chǎn)生問(wèn)題的確切位置。要找出問(wèn)題所在,需要:
?。?)確保所有的左括號(hào)都有相應(yīng)的右括號(hào)。
?。?)查看錯(cuò)誤所指示的那一行前面的代碼。這個(gè)錯(cuò)誤通常是在后面的代碼中才會(huì)被編譯器發(fā)現(xiàn)。
?。?)有的時(shí)候,有些字符(例如左括號(hào))不應(yīng)該位于Java代碼的第一個(gè)。
2、“Unclosed String Literal”
當(dāng)字符串結(jié)尾缺少引號(hào)時(shí),會(huì)產(chǎn)生“unclosed string literal”錯(cuò)誤消息,并且該消息就顯示在出錯(cuò)的那一行上。
Java代碼:
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");
}
通常,這種錯(cuò)誤在以下這些情況下會(huì)產(chǎn)生:
(1)字符串不是以引號(hào)結(jié)尾。這很容易修改,用指定的引號(hào)來(lái)結(jié)束字符串即可。
(2)字符串超出一行。長(zhǎng)字符串可以分成多個(gè)短串,并用加號(hào)(“+”)連接。
?。?)作為字符串一部分的引號(hào)沒有使用反斜杠(“\”)來(lái)進(jìn)行轉(zhuǎn)義。
3、“Public Class XXX Should Be in File”
當(dāng)XXX類和Java程序文件名不匹配時(shí),就會(huì)產(chǎn)生“public class XXX should be in file”錯(cuò)誤消息。 只有當(dāng)類名和Java文件名相同時(shí),才能編譯代碼。
Java代碼:
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è)問(wèn)題,可以:
(1)把類和文件命名為相同的名字。
?。?)確保兩個(gè)名稱始終保持一致。
4、“Incompatible Types”
“Incompatible Types”是賦值語(yǔ)句嘗試對(duì)變量與表達(dá)式進(jìn)行類型匹配時(shí)發(fā)生的邏輯錯(cuò)誤。通常,將字符串賦值給一個(gè)整數(shù)時(shí)會(huì)產(chǎn)生這個(gè)錯(cuò)誤,反之亦然。這不是一個(gè)Java語(yǔ)法錯(cuò)誤。
Java代碼:
test.java:78: error: incompatible types
return stringBuilder.toString();
^
required: int
found: String
1 error
當(dāng)編譯器拋出“incompatible types”消息時(shí),確實(shí)不太容易解決這個(gè)問(wèn)題:
?。?)使用類型轉(zhuǎn)換函數(shù)。
(2)開發(fā)人員可能需要修改代碼原有的功能。
5. “Invalid Method Declaration; Return Type Required”
這個(gè)錯(cuò)誤消息的意思是,在方法聲明中未顯示地聲明方法的返回類型。
Java代碼:
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ò)誤:
(1)忘記聲明類型。
?。?)如果方法沒有返回值,那么需要在方法聲明中指定“void”作為返回類型。
?。?)構(gòu)造函數(shù)不需要聲明類型。但是,如果構(gòu)造函數(shù)名稱中存在錯(cuò)誤,那么編譯器會(huì)把構(gòu)造函數(shù)看成是沒有指定類型的方法。
6、“Method in Class Cannot Be Applied to Given Types”
這個(gè)錯(cuò)誤消息比較有用,它的意思是某個(gè)方法調(diào)用了錯(cuò)誤的參數(shù)。
Java代碼:
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í),應(yīng)傳入在其聲明時(shí)定義的那些參數(shù)。請(qǐng)檢查方法聲明和方法的調(diào)用,以確保它們是匹配的。
7、“Missing Return Statement”
當(dāng)一個(gè)方法缺少return語(yǔ)句時(shí),會(huì)觸發(fā)“Missing Return Statement”錯(cuò)誤消息。有返回值(非void類型)的方法必須要有一條返回某個(gè)值的語(yǔ)句,以便在方法之外調(diào)用該值。
Java代碼:
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”消息有這幾個(gè)原因:
(1)返回語(yǔ)句被錯(cuò)誤地省略了。
?。?)該方法沒有返回任何值,但是在方法聲明中未聲明類型為void。
8、“Reached End of File While Parsing”
這個(gè)錯(cuò)誤消息通常在程序缺少右大括號(hào)(“}”)時(shí)觸發(fā)。有時(shí),在代碼的末尾增加右大括號(hào)可以快速地修復(fù)此錯(cuò)誤。
Java代碼:
public class mod_MyMod extends BaseMod
public String Version()
{
return "1.2_02";
}
public void AddRecipes(CraftingManager recipes)
{
recipes.addRecipe(new ItemStack(Item.diamond), new Object[] {
"#", Character.valueOf('#'), Block.dirt
});
}
上述代碼會(huì)產(chǎn)生以下這個(gè)錯(cuò)誤:
(1)Java代碼
java:11: reached end of file while parsing }
編碼工具和適當(dāng)?shù)拇a縮進(jìn)可以更容易地找到這些不匹配的大括號(hào)。
9、“Unreachable Statement”
當(dāng)一條語(yǔ)句出現(xiàn)在一個(gè)它不可能被執(zhí)行的地方時(shí),會(huì)觸發(fā)“Unreachable statement”錯(cuò)誤。通常,是在一個(gè)break或return語(yǔ)句之后。
Java代碼:
for(;;){
break;
... // unreachable statement
}
int i=1;
if(i==1)
...
else
... // dead code
通常,簡(jiǎn)單地移動(dòng)return語(yǔ)句即可修復(fù)此錯(cuò)誤。
10、“Illegal Start of an Expression”
出現(xiàn)“Illegal Start of an Expression”錯(cuò)誤的原因有很多。它已經(jīng)成為不太有用的錯(cuò)誤消息之一。一些開發(fā)者認(rèn)為這是由壞的代碼味道造成的。
通常,創(chuàng)建一個(gè)表達(dá)式是為了生成一個(gè)新值或給其他變量賦值。編譯器期望找到一個(gè)表達(dá)式,但是因?yàn)檎Z(yǔ)法不符合預(yù)期而找不到表達(dá)式。在下面這些代碼中可以找到這種錯(cuò)誤。
Java代碼 :
} // 把它添加到這里
public 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.");
}
}
} // 從這里刪掉它
}
11、“Variable Might Not Have Been Initialized”
在方法中聲明的局部變量如果沒有初始化,就會(huì)發(fā)生這種錯(cuò)誤。如果在if語(yǔ)句中包含沒有初始值的變量時(shí),就會(huì)發(fā)生這種錯(cuò)誤。
Java代碼:
int x;
if (condition) {
x = 5;
}
System.out.println(x); // x可能尚未初始化
12. “Operator … Cannot be Applied to ”
當(dāng)操作符作用于未在其定義范圍內(nèi)的類型時(shí),會(huì)出現(xiàn)此問(wèn)題。
Java代碼:
operator < cannot be applied to java.lang.Object,java.lang.Object
當(dāng)Java代碼嘗試在計(jì)算(減法、乘法、大小比較等)中使用字符串類型時(shí),經(jīng)常會(huì)觸發(fā)這種錯(cuò)誤。要修復(fù)這個(gè)問(wèn)題,需要將字符串轉(zhuǎn)換為整數(shù)或浮點(diǎn)數(shù)。
13、“Missing Return Value”
當(dāng)返回語(yǔ)句包含不正確的類型時(shí),你會(huì)收到“Missing Return Value”消息。例如,查看以下代碼:
Java代碼:
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ò)誤:
Java代碼:
SavingsAcc2.java:29: missing return value
return;
^
SavingsAcc2.java:35: missing return value
return;
^
SavingsAcc2.java:41: missing return value
return;
^
3 errors
通常,這個(gè)錯(cuò)誤的出現(xiàn)是因?yàn)橛心硞€(gè)返回語(yǔ)句沒有返回任何東西。
14、 “Cannot Return a Value From Method Whose Result Type Is Void”
當(dāng)一個(gè)void方法嘗試返回任何值時(shí),會(huì)發(fā)生此Java錯(cuò)誤,例如在以下代碼中:
Java代碼:
public static void move()
{
System.out.println("What do you want to do?");
Scanner scan = new Scanner(System.in);
int userMove = scan.nextInt();
return userMove;
}
public static void usersMove(String playerName, int gesture)
{
int userMove = move();
if (userMove == -1)
{
break;
}
通常,更改方法的返回類型與返回語(yǔ)句中的類型一致,可以解決這個(gè)問(wèn)題。例如,下面的void可以改為int:
Java代碼:
public static int move()
{
System.out.println("What do you want to do?");
Scanner scan = new Scanner(System.in);
int userMove = scan.nextInt();
return userMove;
}
15、 “Non-Static Variable … Cannot Be Referenced From a Static Context”
當(dāng)編譯器嘗試在靜態(tài)方法中訪問(wèn)非靜態(tài)變量時(shí),會(huì)發(fā)生此錯(cuò)誤:
Java代碼:
public class StaticTest {
private int count=0;
public static void main(String args[]) throws IOException {
count++; //compiler error: non-static variable count cannot be referenced from a static context
}
}
要解決“Non-Static Variable … Cannot Be Referenced From a Static Context”這個(gè)錯(cuò)誤,可以做兩件事情:
(1)可以將變量聲明為靜態(tài)。
(2)可以在靜態(tài)方法中創(chuàng)建非靜態(tài)對(duì)象的實(shí)例。
16、 “Non-Static Method … Cannot Be Referenced From a Static Context”
當(dāng)Java代碼嘗試在靜態(tài)類中調(diào)用非靜態(tài)方法時(shí),會(huì)發(fā)生此問(wèn)題。例如,以下代碼:
Java代碼:
class Sample
{
private int age;
public void setAge(int a)
{
age=a;
}
public int getAge()
{
return age;
}
public static void main(String args[])
{
System.out.println("Age is:"+ getAge());
}
}
會(huì)觸發(fā)這個(gè)錯(cuò)誤:
Java代碼:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Cannot make a static reference to the non-static method getAge() from the type Sample
要在靜態(tài)方法中調(diào)用非靜態(tài)方法,需要是聲明一個(gè)要調(diào)用的非靜態(tài)方法的類的實(shí)例。
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編介紹的“16個(gè)java常見錯(cuò)誤以及避免方法”的內(nèi)容,希望對(duì)大家有幫助,更多java最新資訊請(qǐng)繼續(xù)關(guān)注動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)官網(wǎng),每天會(huì)有精彩內(nèi)容分享與你。
相關(guān)免費(fèi)視頻教程推薦
java初學(xué)者視頻教程下載——常見錯(cuò)誤:http://www.soulsinkind.com/xiazai/2607.html
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)