为什么该代码不能在java中运行?eror:< identifier>应为

brqmpdu1  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(338)

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

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

zc0qhyus1#

那么为什么编译器会拒绝这段代码呢?
因为代码在语法上与java一样无效,java编译器需要拒绝无效的代码。
java语言规范指出,唯一可以立即嵌套在类中的是成员声明或初始值设定项块。成员声明如下:
字段声明
嵌套类、接口、枚举等
方法
建设者
初始值设定项块是 static 初始值设定项块或示例初始值设定项块。
一个典型的语句(如您试图插入的语句)既不是成员声明也不是块。
java语言规范的相关部分是jls 8.1.6

pw136qt2

pw136qt22#

您正试图直接在类主体中运行一段代码。类的主体只能用于初始化和函数创建。什么 Java 是否,是遍历类的所有已创建成员并初始化它们,就像您对 Inner i = new Inner() .
要运行一段代码,它必须位于函数内部,并且必须调用此函数!一个很好的例子是 main() 功能。您在其中写入的任何内容都将被执行,因为该函数将在程序运行后立即调用。
但是,如果在函数的中间抛出一个错误,您还应该知道执行将被中断,并且直到结束时才执行命令。

相关问题