50个常见的 Java 错误及避免方法

澳门新葡亰娱乐官网 21

本文由码农网 –
小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划!

在开发Java软件时可能会遇到许多类型的错误,但大多数是可以避免的。为此我们罗列了50个最常见的Java编码错误,其中包含代码示例和教程,以帮助大家解决常见的编码问题。

澳门新葡亰娱乐官网 1

在开发Java软件时可能会遇到许多类型的错误,但大多数是可以避免的。为此我们罗列了50个最常见的Java编码错误,其中包含代码示例和教程,以帮助大家解决常见的编码问题。

想要朝这方面发展或者真心有兴趣的。可以找我要一些java的学习视频,Q号码:3300863615,这个是免费的,希望同学找我要的时候不要有理所应当的态度,毕竟都是我的心血,希望你是真的有一颗想要学好java的心,我也会尽所能的去帮助你成为一名优秀的程序员。

引用原文:50 Common Java Errors and How to Avoid Them (Part
1)作者:Angela
Stringfellow翻译:雁惊寒译者注:本文介绍了20个常见的Java编译器错误,每种错误都包含了代码片段、问题说明,并给出了相关的链接来帮助你快速地理解并解决这些问题。以下是译文。在开发Java软件的时候可能会遇到很多类型的错误,但大多数可以避免。我们精心挑选了20个最常见的Java软件错误,包含了代码示例和教程,以帮助你解决一些常见的编码问题。要获得更多编写Java程序的提示和技巧,你可以下载我们的“Comprehensive
Java Developer’s
Guide”这本书,它里面包含了所有你需要的东西,从各类工具到最佳网站和博客、YouTube频道、Twitter影响者、LinkedIn组、播客、must-attend
events等等。如果你正在使用.NET,你应该阅读我们的50个最常见的.NET软件错误指南,以避免出现这些错误。但是如果你当前遇到的挑战是与Java相关的,那么请阅读下面的文章以了解最常见的问题及其解决方法。编译器错误澳门新葡亰娱乐官网,在编译器运行Java代码的时候会创建编译器错误消息。有一点很重要,编译器可能会因为一个错误抛出多个错误消息。所以修复一个错误,然后重新编译,这样可以解决很多问题。1.
“…
Expected”
当代码中缺少某些东西时,会产生这个错误。通常这是因为缺少一个分号或右括号。

编译器错误

当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;}

1.“…Expected”

当代码中缺少某些东西时,会发生此错误。通常是因为缺少分号或右括号。

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;
}

通常,此错误消息不会精确确定问题的确切位置。为了找到错误:

  • 确保所有的左括号都有一个对应的右括号。
  • 在查看指示的Java代码行之前顺便看看行。此Java软件错误没有被编译器注意到,直到在代码中更深层次地查看。
  • 有时一个字符,如一个左括号,并不应该放在Java代码的原先位置。所以开发人员没有放置一个右括号来平衡括号。

点击查看关于错误的圆括号会如何导致错误(@StackOverflow)的示例。

当Java软件代码通过编译器运行时,会创建编译器错误消息。谨记编译器可能会针对一个错误抛出许多错误消息。所以得修复第一个错误并重新编译。这样做可以解决很多问题。

通常,这种错误消息不会指出产生问题的确切位置。要找出问题所在,需要:确保所有的左括号都有相应的右括号。查看错误所指示的那一行前面的代码。这个错误通常是在后面的代码中才会被编译器发现。有的时候,有些字符不应该位于Java代码的第一个。实例:一个丢失的圆括号引发的错误。2.
“Unclosed String Literal”
当字符串结尾缺少引号时,会产生“unclosed
string literal”错误消息,并且该消息就显示在出错的那一行上。

2.“Unclosed String Literal”

如果字符串文字结束时没有引号的话,会创建“Unclosed String
Literal”的错误消息,并且消息将显示在与错误相同的行上。(@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");
    }     
}

通常。这种情况发生在:

  • 字符串文字不以引号结尾。这很容易纠正,加上所需的引号,闭合字符串文字即可。
  • 字符串文字扩展超过一行。长字符串文字可以分解成字符串文字,并加上加号(“+”)。
  • 作为字符串文字一部分的引号不通过反斜杠(“”)进行转义。

点击阅读关于Java软件错误消息Unclosed String
Literal的讨论。(@Quora)

1.“…Expected”

 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"); } }

3.“Illegal Start of an Expression”

出现“Illegal Start of an
Expression”错误的原因有很多。因此名列不太有用的错误消息之一。有些开发者甚至认为这是由坏的代码造成的。

通常,创建表达式是为了生成新的值或为变量分配值。编译器期望找到表达式,但因为语法不符合预期而找不到表达式。(@StackOverflow)在这些语句中就可以发现此错误。

} // ADD IT HERE
       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.");
        }
        }
    } // REMOVE IT FROM HERE
    }

点击浏览关于如何排除“Illegal Start of an
Expression”错误的讨论。(@StackOverflow)

当代码中缺少某些东西时,会发生此错误。通常是因为缺少分号或右括号。

通常,这种错误在以下这些情况下会产生:字符串不是以引号结尾。这很容易修改,用指定的引号来结束字符串即可。字符串超出一行。长字符串可以分成多个短串,并用加号连接。作为字符串一部分的引号没有使用反斜杠来进行转义。请阅读这篇文章:未封闭的字符串错误消息。3.
“Illegal Start of an Expression”
出现“Illegal Start of an
Expression”错误的原因有很多。它已经成为不太有用的错误消息之一。一些开发者认为这是由坏的代码味道造成的。通常,创建一个表达式是为了生成一个新值或给其他变量赋值。编译器期望找到一个表达式,但是因为语法不符合预期而找不到表达式。在下面这些代码中可以找到这种错误。

4.“Cannot Find Symbol”

这是一个非常常见的问题,因为Java中的所有标识符都需要在被使用之前进行声明。
发生错误的原因在于编译代码时,编译器不明白标识符的含义。

澳门新葡亰娱乐官网 2

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

  • 标识符声明时的拼写可能与在代码中使用时的拼写不同。
  • 变量从未被声明。
  • 变量使用时与声明未在同一范围内。
  • 类没有导入。

点击阅读有关“Cannot Find
Symbol”错误的详细讨论以及产生此问题的代码示例。(@StackOverflow)

澳门新葡亰娱乐官网 3

} // 把它添加到这里 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."); } } } // 从这里删掉它 }

5.“Public Class XXX Should Be in File”

当XXX类和Java程序文件名不匹配时,会发生“Public Class XXX Should Be in
File”消息。只有当类和Java文件相同时,代码才会被编译。(@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);  
    }
  }

为解决这个问题:

  • 类和文件命名相同。
  • 确保两名称的情况一致。

点击查阅“Public Class XXX Should Be in
File”错误的示例。(@StackOverflow)

通常,此错误消息不会精确确定问题的确切位置。为了找到错误:

请阅读这篇文章:如何排除“illegal start of an expression”错误。4.
“Cannot Find
Symbol”
这是一个非常常见的问题,因为Java中的所有标识符都需要在使用之前进行声明。出现这个错误是因为,在编译代码时,编译器不明白该标识符的含义。有很多原因可能会产生“cannot
find
symbol”错误信息:标识符声明时的拼写可能与代码中使用时的拼写不一致。变量从未被声明。未在同一作用域内声明该变量。没有导入类。请阅读这篇文章:关于“cannot
find symbol”错误的讨论。5. “Public Class XXX Should Be in
File”
当XXX类和Java程序文件名不匹配时,就会产生“public class XXX should
be in file”错误消息。 只有当类名和Java文件名相同时,才能编译代码。

6.“Incompatible Types”

“Incompatible
Types”是指定语句尝试将变量与类型表达式配对时发生的逻辑错误。
通常会在代码尝试将文本字符串放入到整型中时出现,反之亦然。这并非Java语法错误。(@StackOverflow)

test.java:78: error: incompatible types
return stringBuilder.toString();
                             ^
required: int
found:    String
1 error

当编译器给出“Incompatible Types”消息时,就不是简单修复可以摆平的了:

  • 有可以转换类型的函数。
  • 开发人员可能需要更改代码预期的功能。

查看此例子,里面说明了如何试着将一个字符串分配给一个整数,出现“Incompatible
Types”消息。(@StackOverflow)

确保所有的左括号都有一个对应的右括号。

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); } }

7.“Invalid Method Declaration; Return Type Required”

此Java软件错误消息表示方法签名中未明确声明方法的返回类型。

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

有若干途径会触发“Invalid Method Declaration; Return Type Required”
错误:

  • 忘记声明类型
  • 如果方法没有返回值,那么需要将“void”声明为方法签名中的类型。
  • 构造函数名称不需要声明类型。
    但是,如果构造函数名称中存在错误,那么编译器将会把构造函数视为没有指定类型的方法。

查看此说明构造函数命名如何触发“Invalid Method Declaration; Return Type
Required”
问题的例子。(@StackOverflow)

在查看指示的Java代码行之前顺便看看行。此Java软件错误没有被编译器注意到,直到在代码中更深层次地查看。

要解决这个问题,可以:把类和文件命名为相同的名字。确保两个名称始终保持一致。请阅读这篇文章:“Public
class XXX should be in file”错误的示例。6. “Incompatible
Types”
“Incompatible
Types”是赋值语句尝试对变量与表达式进行类型匹配时发生的逻辑错误。通常,将字符串赋值给一个整数时会产生这个错误,反之亦然。这不是一个Java语法错误。

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

此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

调用的方法期待方法声明中定义的某些参数。检查方法声明并仔细调用,以确保它们是兼容的。

查看此讨论,里面说明了Java软件错误消息如何识别在方法声明和方法调用中由参数创建的不兼容性。(@StackOverflow)

有时一个字符,如一个左括号,并不应该放在Java代码的原先位置。所以开发人员没有放置一个右括号来平衡括号。

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

9.“Missing Return Statement”

当一个方法没有返回语句时,就会出现“Missing Return
Statement”的消息。每个返回值(非void类型)的方法都必须有一个字面上返回该值的语句,以便在方法之外调用它。

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”消息的原因有若干:

  • 返回语句由于错误被省略。
  • 该方法没有返回任何值,但类型void在方法签名中未声明。

查看如何修复“Missing Return
Statement”Java软件错误的示例。(@StackOverflow)

点击查看关于错误的圆括号会如何导致错误(@StackOverflow)的示例。

当编译器抛出“incompatible
types”消息时,确实不太容易解决这个问题:使用类型转换函数。开发人员可能需要修改代码原有的功能。看一下这个例子:将一个字符串赋值给整数会出现“incompatible
types”错误。7. “Invalid Method Declaration; Return Type
Required”
这个错误消息的意思是,在方法声明中未显示地声明方法的返回类型。

10.“Possible Loss of Precision”

当更多的信息被分配给一个变量而超过它的容量,就会发生“Possible Loss of
Precision”消息。如果出现这种情况,那么碎片就会被扔掉。
如果这样没有关系,那么代码需要将变量显式声明为新的类型。

澳门新葡亰娱乐官网 4

“Possible Loss of Precision”错误通常发生在:

  • 尝试为整数数据类型的变量分配一个实数。
  • 尝试为整数数据类型的变量分配一个double。

此Java中基本数据类型的解释表述了数据特征。(@Oracle)

2.“Unclosed String Literal”

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

11.“Reached End of File While Parsing”

当程序缺少关闭大括号(“}”)时,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
   });
}

上述代码将导致以下错误:

java:11: reached end of file while parsing }

编写utilities程序和适当的代码缩进可以更容易地找到这类遗漏的大括号。

此示例表述了缺少了大括号会如何创建“Reached
End of File While Parsing”的错误消息。(@StackOverflow)

如果字符串文字结束时没有引号的话,会创建“Unclosed String
Literal”的错误消息,并且消息将显示在与错误相同的行上。(@DreamInCode)Literal是值的源代码。

有这几种情况会触发“invalid method declaration; return type
required”错误:忘记声明类型。如果方法没有返回值,那么需要在方法声明中指定“void”作为返回类型。构造函数不需要声明类型。但是,如果构造函数名称中存在错误,那么编译器会把构造函数看成是没有指定类型的方法。看一个这个例子:构造函数的命名问题触发“invalid
method declaration; return type required“问题。8. “Method in Class
Cannot Be Applied to Given
Types”
这个错误消息比较有用,它的意思是某个方法调用了错误的参数。

12.“Unreachable Statement”

当一个语句写在一个阻止它执行的地方时,就会发生“Unreachable
statement”错误。通常它出现在中断或返回语句之后。

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

通常简单地移动返回语句将修复错误。阅读关于如何修复Unreachable Statement
Java软件错误的讨论。
(@StackOverflow)

澳门新葡亰娱乐官网 5

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

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

当方法中声明的局部变量未初始化时,就会发生这种错误。它也会出现在没有初始值的变量是if语句组成部分的情况下。

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

阅读此关于如何避免触发“Variable <X> Might Not Have Been
Initialized”错误的讨论。(@reddit)

通常。这种情况发生在:

在调用方法时,应传入在其声明时定义的那些参数。请检查方法声明和方法的调用,以确保它们是匹配的。这个讨论说明了方法声明和方法调用中参数的不兼容性所导致的Java错误。9.
“Missing Return Statement”
当一个方法缺少return语句时,会触发“Missing
Return
Statement”错误消息。有返回值的方法必须要有一条返回某个值的语句,以便在方法之外调用该值。

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

当操作符用于非定义中的类型时,就会出现此问题。

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

当Java代码尝试在计算中使用类型字符串时,通常会发生这种情况。
要修复的话,就需要将字符串转换为整型或浮点型。

阅读此说明非数字类型如何导致Java软件错误从而警报操作符无法应用于类型的例子。
(@StackOverflow)

字符串文字不以引号结尾。这很容易纠正,加上所需的引号,闭合字符串文字即可。

public String[] OpenFile() throws IOException { MapString, 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!"); }}

15.“Inconvertible Types”

当Java代码尝试执行非法转换时,就会发生“Inconvertible Types”错误。

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

例如,布尔值不能转换为整型。

阅读此关于如何在Java软件中转换不可转换的类型的讨论。(@StackOverflow)

字符串文字扩展超过一行。长字符串文字可以分解成字符串文字,并加上加号(“+”)。

编译器抛出“missing return
statement”消息有这几个原因:返回语句被错误地省略了。该方法没有返回任何值,但是在方法声明中未声明类型为void。请查看如何解决“missing
return statement”错误这个例子。10. “Possible Loss of
Precision”
当赋值给变量的信息超过了该变量可以承载的上限时,就会触发“Possible
Loss of
Precision”错误。一旦发生这种情况,部分信息将被丢弃。如果这样做没问题的话,那么在代码上应该将变量显式地声明为新的类型。以下情况通常会发生“possible
loss of
precision”错误:尝试将一个实数赋值给整型类型的变量。尝试将一个double数据赋值给整型类型的变量。Java中的基本数据类型解释了不同数据类型的特点。11.
“Reached End of File While
Parsing”
这个错误消息通常在程序缺少右大括号时触发。有时,在代码的末尾增加右大括号可以快速地修复此错误。

16.“Missing Return Value”

当return语句包含不正确的类型时,你将收到“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;
    }
}

返回以下错误:

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

通常,有一个返回语句不返回任何东西。

阅读此关于如何避免“Missing Return
Value”Java软件错误消息的讨论。(@coderanch)

第一部分完,敬请关注第二部分的内容。

作为字符串文字一部分的引号不通过反斜杠(“”)进行转义。

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 });}

点击阅读关于Java软件错误消息Unclosed String
Literal的讨论。(@Quora)

上述代码会产生以下这个错误:

3.“Illegal Start of an Expression”

java:11: reached end of file while parsing }

出现“Illegal Start of an
Expression”错误的原因有很多。因此名列不太有用的错误消息之一。有些开发者甚至认为这是由坏的代码造成的。

编码工具和适当的代码缩进可以更容易地找到这些不匹配的大括号。请阅读这篇文章:缺少的大括号会触发“reached
end of file while parsing”错误消息。12. “Unreachable
Statement”
当一条语句出现在一个它不可能被执行的地方时,会触发“Unreachable
statement”错误。通常,是在一个break或return语句之后。

通常,创建表达式是为了生成新的值或为变量分配值。编译器期望找到表达式,但因为语法不符合预期而找不到表达式。(@StackOverflow)在这些语句中就可以发现此错误。

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

澳门新葡亰娱乐官网 6

通常,简单地移动return语句即可修复此错误。请阅读这篇文章:如何修复“Unreachable
Statement”错误。13. “Variable Might Not Have Been
Initialized”
在方法中声明的局部变量如果没有初始化,就会发生这种错误。如果在if语句中包含没有初始值的变量时,就会发生这种错误。

点击浏览关于如何排除“Illegal Start of an
Expression”错误的讨论。(@StackOverflow)

int x;if (condition) { x = 5;}System.out.println(x); // x可能尚未初始化

4.“Cannot Find Symbol”

请阅读这篇文章:如何避免触发“Variable Might Not Have Been
Initialized”错误。14. “Operator … Cannot be Applied to
当操作符作用于未在其定义范围内的类型时,会出现此问题。

这是一个非常常见的问题,因为Java中的所有标识符都需要在被使用之前进行声明。
发生错误的原因在于编译代码时,编译器不明白标识符的含义。

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

澳门新葡亰娱乐官网 7

当Java代码尝试在计算中使用字符串类型时,经常会触发这种错误。要修复这个问题,需要将字符串转换为整数或浮点数。请阅读这篇文章:非数字类型为什么会导致Java软件错误。15.
“Inconvertible
Types”
当Java代码尝试执行非法转换时,会发生“Inconvertible Types”错误。

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

TypeInvocationConversionTest.java:12: inconvertible typesfound : java.util.ArrayListjava.lang.Class? extends TypeInvocationConversionTest.Interface1required: java.util.ArrayListjava.lang.Class? lessRestrictiveClassList = (ArrayListClass?) classList;

标识符声明时的拼写可能与在代码中使用时的拼写不同。

^例如,布尔类型不能转换为整形。请阅读这篇文章:如何在Java软件中转换不可转换的类型。16.
“Missing Return Value”
当返回语句包含不正确的类型时,你会收到“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; }}

变量使用时与声明未在同一范围内。

返回以下错误:

类没有导入。

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

点击阅读有关“Cannot Find
Symbol”错误的详细讨论以及产生此问题的代码示例。(@StackOverflow)

通常,这个错误的出现是因为有某个返回语句没有返回任何东西。请阅读这篇文章:如何避免“Missing
Return Value”错误。17. “Cannot Return a Value From Method Whose Result
Type Is
Void”
当一个void方法尝试返回任何值时,会发生此Java错误,例如在以下代码中:

5.“Public Class XXX Should Be in File”

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; }

当XXX类和Java程序文件名不匹配时,会发生“Public Class XXX Should Be in
File”消息。只有当类和Java文件相同时,代码才会被编译。(@coderanch):

通常,更改方法的返回类型与返回语句中的类型一致,可以解决这个问题。例如,下面的void可以改为int:

澳门新葡亰娱乐官网 8

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;}

为解决这个问题:

请阅读这篇文章:如何修复“Cannot Return a Value From Method Whose Result
Type Is Void”错误。18. “Non-Static Variable … Cannot Be Referenced
From a Static
Context”
当编译器尝试在静态方法中访问非静态变量时,会发生此错误:

类和文件命名相同。

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”这个错误,可以做两件事情:可以将变量声明为静态。可以在静态方法中创建非静态对象的实例。请阅读这个教程:静态和非静态变量之间的区别。19.
“Non-Static Method … Cannot Be Referenced From a Static
Context”
当Java代码尝试在静态类中调用非静态方法时,会发生此问题。例如,以下代码:

点击查阅“Public Class XXX Should Be in
File”错误的示例。(@StackOverflow)

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()); }}

6.“Incompatible Types”

会触发这个错误:

“Incompatible
Types”是指定语句尝试将变量与类型表达式配对时发生的逻辑错误。
通常会在代码尝试将文本字符串放入到整型中时出现,反之亦然。这并非Java语法错误。(@StackOverflow)

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

澳门新葡亰娱乐官网 9

要在静态方法中调用非静态方法,需要是声明一个要调用的非静态方法的类的实例。请阅读这篇文章:非静态方法和静态方法之间的区别。20.
“(array) Not Initialized”
当数组已经声明但未初始化时,你会得到“(array)
Not
Initialized”这样的错误消息。数组的长度是固定的,因此每个数组都需要以所需的长度进行初始化。以下代码是正确的:

当编译器给出“Incompatible Types”消息时,就不是简单修复可以摆平的了:

AClass[] array = {object1, object2}

有可以转换类型的函数。

这样也可以:

开发人员可能需要更改代码预期的功能。

AClass[] array = new AClass[2];...array[0] = object1;array[1] = object2;

查看此例子,里面说明了如何试着将一个字符串分配给一个整数,出现“Incompatible
Types”消息。(@StackOverflow)

但这样是不正确的:

7.“Invalid Method Declaration; Return Type Required”

AClass[] array;...array = {object1, object2};

此Java软件错误消息表示方法签名中未明确声明方法的返回类型。

请阅读这篇文章:关于如何在Java中初始化数组。未完待续今天我们讨论了编译器的错误,下次我们将深入讨论各种可能会出现的运行时异常。像本文的结构一样,下次也会包含代码片段、解释,以及相关的链接来帮助你尽快修复代码。

澳门新葡亰娱乐官网 10

有若干途径会触发“Invalid Method Declaration; Return Type Required”
错误:

忘记声明类型

如果方法没有返回值,那么需要将“void”声明为方法签名中的类型。

构造函数名称不需要声明类型。
但是,如果构造函数名称中存在错误,那么编译器将会把构造函数视为没有指定类型的方法。

查看此说明构造函数命名如何触发“Invalid Method Declaration; Return Type
Required”
问题的例子。(@StackOverflow)

8.“Method in Class Cannot Be Applied to Given Types”

此Java软件错误消息是比较有用的错误消息之一。
它解阐明了方法签名正在调用错误的参数。

澳门新葡亰娱乐官网 11

调用的方法期待方法声明中定义的某些参数。检查方法声明并仔细调用,以确保它们是兼容的。

查看此讨论,里面说明了Java软件错误消息如何识别在方法声明和方法调用中由参数创建的不兼容性。(@StackOverflow)

9.“Missing Return Statement”

当一个方法没有返回语句时,就会出现“Missing Return
Statement”的消息。每个返回值(非void类型)的方法都必须有一个字面上返回该值的语句,以便在方法之外调用它。

澳门新葡亰娱乐官网 12

编译器抛出“Missing Return Statement”消息的原因有若干:

返回语句由于错误被省略。

该方法没有返回任何值,但类型void在方法签名中未声明。

查看如何修复“Missing Return
Statement”Java软件错误的示例。(@StackOverflow)

10.“Possible Loss of Precision”

当更多的信息被分配给一个变量而超过它的容量,就会发生“Possible Loss of
Precision”消息。如果出现这种情况,那么碎片就会被扔掉。
如果这样没有关系,那么代码需要将变量显式声明为新的类型。

澳门新葡亰娱乐官网 13

Possible Loss of Precision”错误通常发生在:

尝试为整数数据类型的变量分配一个实数。

尝试为整数数据类型的变量分配一个double。

此Java中基本数据类型的解释表述了数据特征。(@Oracle)

11.“Reached End of File While Parsing”

当程序缺少关闭大括号(“}”)时,Java代码中就会发生此错误消息。
有时我们可以通过在代码的末尾放置大括号来快速修复错误。

澳门新葡亰娱乐官网 14

上述代码将导致以下错误:

澳门新葡亰娱乐官网 15

编写utilities程序和适当的代码缩进可以更容易地找到这类遗漏的大括号。

此示例表述了缺少了大括号会如何创建“Reached
End of File While Parsing”的错误消息。(@StackOverflow)

12.“Unreachable Statement”

当一个语句写在一个阻止它执行的地方时,就会发生“Unreachable
statement”错误。通常它出现在中断或返回语句之后

澳门新葡亰娱乐官网 16

通常简单地移动返回语句将修复错误。阅读关于如何修复Unreachable Statement
Java软件错误的讨论。
(@StackOverflow)

13.“Variable Might Not Have Been Initialized”

当方法中声明的局部变量未初始化时,就会发生这种错误。它也会出现在没有初始值的变量是if语句组成部分的情况下。

澳门新葡亰娱乐官网 17

阅读此关于如何避免触发“Variable Might Not Have Been
Initialized”错误的讨论。(@reddit)

14.“Operator … Cannot be Applied to ”

当操作符用于非定义中的类型时,就会出现此问题。

澳门新葡亰娱乐官网 18

当Java代码尝试在计算中使用类型字符串时,通常会发生这种情况。
要修复的话,就需要将字符串转换为整型或浮点型。

阅读此说明非数字类型如何导致Java软件错误从而警报操作符无法应用于类型的例子。
(@StackOverflow)

15.“Inconvertible Types”

当Java代码尝试执行非法转换时,就会发生“Inconvertible Types”错误。

澳门新葡亰娱乐官网 19

例如,布尔值不能转换为整型。

阅读此关于如何在Java软件中转换不可转换的类型的讨论。(@StackOverflow)

16.“Missing Return Value”

当return语句包含不正确的类型时,你将收到“Missing Return
Value”的消息。例如,以下代码:

澳门新葡亰娱乐官网 20

返回以下错误:

澳门新葡亰娱乐官网 21

通常,有一个返回语句不返回任何东西。

阅读此关于如何避免“Missing Return
Value”Java软件错误消息的讨论。(@coderanch)

第一部分完,敬请关注第二部分的内容。

想要朝这方面发展或者真心有兴趣的。可以找我要一些java的学习视频,Q号码:3300863615,这个是免费的,希望同学找我要的时候不要有理所应当的态度,毕竟都是我的心血,希望你是真的有一颗想要学好java的心,我也会尽所能的去帮助你成为一名优秀的程序员。

加我Q有以下几个要求:

1、面对目前流行的技术不知从何下手,需要突破技术瓶颈的。

2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的。

3、如果没有工作经验,在校大学生,基础不行扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的。

4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的。

  1. 群号:java互撩学习交流群 备注好信息!

6.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面学习

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图