为什么此代码 运行 不在 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
要调用内部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