它让我疯狂,当我运行这个简单的Java程序时会产生24个错误.

ton*_*bra -3 java

public class Planet {
    double x;
    double y;
    double xV;
    double yV;
    double mass;
    double imgName;
    public Planet (double x; double y; double xV; double y; double mass; double imgName;) {
        this.x = x;
        this.y = y;
        this.xV = xV;
        this.yV = yV;
        this.mass = mass;
        this.imgName = imgName;
    }
    public static void main(String[] args) {
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

Planet.java:8:')'预计

Planet.java:8:非法启动类型

Planet.java:8:';' 预期

Planet.java:9:非法启动类型

Planet.java:9:预料到

Planet.java:9:';' 预期

Planet.java:9:非法启动类型

...

Planet.java:16:类,接口或枚举期望public static void main(String [] args)

Planet.java:18:class,interface或enum expected}

我看到不同类型的错误!任何人都可以一个一个地向我解释,因为它太烦人了.

ζ--*_*ζ-- 7

您没有正确声明您的参数.使用:

public Planet (double x, double y, double xV, double y, double mass, double imgName)
Run Code Online (Sandbox Code Playgroud)

此外,main不应返回0.如果要返回系统退出代码,请使用System.exit(0).简单地从主方法返回(使用return;或到达它的末尾)将类似于return 0;C等主要语言.

出现这么多错误的原因是由于Java解析器/编译器的工作方式.第一个错误已经是一个不正确的状态,因此以下错误只是编译器被"混淆"的工件.

编译/语法错误的实用经验法则是专注于修复给定的第一个错误,因为文件其余部分的解析可能会受到影响.

虽然我不是100%肯定,但我认为发生了以下情况:

  1. 分号导致解析器发出错过关闭的错误),并结束语句(事实上,然后结束构造函数).
  2. 在最后一个分号之后,)是非法类型,并且还需要分号.
  3. 虽然几乎任何人都会认为它this.x = x是构造函数的一部分,但前一行混淆了解析器,所以它认为它在类范围内工作(而不是在方法中).它无法解析,this.x = x因为this.x它不是有效类型,并且此"字段"没有名称.在这一点上,很明显以前的错误已经搞砸了解析器状态足以开始恐慌它现在认为不合适的有效语句.
  4. 当它到达结束时,}它结束了类范围.以下主要方法和最终结束}同样是不可解析的,并导致发出错误(因为此时这些元素不在类中)