为什么此代码 运行 不在 Java 中?错误:<identifier> 预期

Why wouldn't this code run in Java? Eror : <identifier> expected

要调用内部class的函数,我只需要一个内部class的对象。但是如果我已经创建了对象,为什么我不能在我想要的任何地方调用 inner class 的方法?试图暗示的错误是什么?

class Outer 
{
    int x;
    
    class Inner // creating an Inner class
    {
        public void display()
        {
            System.out.println("Hello from Inner class"+x);
        }
    }
    
    Inner i = new Inner();
    i.display(); // This is where the error comes. Why do I have to create a method to call
                 // methods of my inner class. Why Can't I call it anywhere I want?
}


public class Main
{
    public static void main(String[] args) 
    {
        System.out.println("Hello World");
    }
}

您正在尝试 运行 直接在 class 主体中的一段代码。 class 的主体必须仅用于初始化和函数创建。 Java 所做的是遍历 class 的所有已创建成员并初始化它们,就像您对 Inner i = new Inner() 所做的那样。

到运行一段代码,必须在一个函数里面,而且这个函数必须被调用!一个很好的例子是 main() 函数。您在其中写入的任何内容都将被执行,因为此函数将在程序 运行.

之后立即调用

但是如果在函数中间抛出错误,你也应该知道执行会被中断,命令不会执行到最后。

So why is the compiler rejecting this code?

因为代码在语法上是无效的 Java,并且 Java 编译器 需要拒绝无效代码。

Java 语言规范指出,唯一可以立即嵌套在 class 中的是成员声明或初始化程序块。成员声明是:

  • 字段声明
  • 嵌套classes、接口、枚举等等
  • 方法
  • 构造函数

初始化块是 static 个初始化块或实例初始化块。

一个典型的语句(就像你试图插入的那个)既不是成员声明也不是块。


Java 语言规范的相关部分是 JLS 8.1.6