前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >10个常见的 Java 错误及避免方法之第一集(后续持续发布)

10个常见的 Java 错误及避免方法之第一集(后续持续发布)

作者头像
用户1289394
发布2018-10-25 10:28:19
2.8K0
发布2018-10-25 10:28:19
举报
文章被收录于专栏:Java学习网Java学习网

编译器错误

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

1.“…Expected”

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

代码语言:javascript
复制
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)的示例。

2.“Unclosed String Literal”

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

代码语言:javascript
复制
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)

3.“Illegal Start of an Expression”

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

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

代码语言:javascript
复制
} // 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)

4.“Cannot Find Symbol”

这是一个非常常见的问题,因为Java中的所有标识符都需要在被使用之前进行声明。 发生错误的原因在于编译代码时,编译器不明白标识符的含义。可能收到“Cannot Find Symbol”信息的原因有很多:

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

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

5.“Public Class XXX Should Be in File”

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

代码语言:javascript
复制
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)

6.“Incompatible Types”

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

代码语言:javascript
复制
test.java:78: error: incompatible typesreturn stringBuilder.toString();
                             ^required: int
found:    String1 error

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

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

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

7.“Invalid Method Declaration; Return Type Required”

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

代码语言:javascript
复制
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)

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

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

代码语言:javascript
复制
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)

9.“Missing Return Statement”

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

代码语言:javascript
复制
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在方法签名中未声明。

(@StackOverflow)

10.“Possible Loss of Precision”

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

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

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

(@Oracle)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 编译器错误
    • 1.“…Expected”
      • 2.“Unclosed String Literal”
        • 3.“Illegal Start of an Expression”
          • 4.“Cannot Find Symbol”
            • 5.“Public Class XXX Should Be in File”
              • 6.“Incompatible Types”
                • 7.“Invalid Method Declaration; Return Type Required”
                  • 8.“Method <X> in Class <Y> Cannot Be Applied to Given Types”
                    • 9.“Missing Return Statement”
                      • 10.“Possible Loss of Precision”
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档