首页 > 解决方案 > 为什么这段代码不能在 Java 中运行?错误:预期的

问题描述

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

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

标签: javaclassoopinner-classes

解决方案


那么为什么编译器会拒绝这段代码呢?

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

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

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

初始化程序块是static初始化程序块或实例初始化程序块。

一个典型的声明(比如你试图插入的那个)既不是成员声明也不是块。


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


推荐阅读