要调用内部类的函数,我所需要的只是内部类的一个对象。但是如果我已经创建了对象,为什么我不能在我想要的任何地方调用内部类的方法?试图暗示什么是错误?
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");
}
}发布于 2021-07-06 06:38:35
那么为什么编译器要拒绝这些代码呢?
因为代码在语法上与Java一样无效,而Java编译器是拒绝无效代码所必需的。
Java语言规范指出,类中唯一可以立即嵌套的东西是成员声明或初始化器块。成员声明如下:
初始化程序块要么是static初始化程序块,要么是实例初始化程序块。
典型的语句(如您试图插入的语句)既不是成员声明,也不是块。
Java语言规范的相关部分是JLS 8.1.6。
发布于 2021-07-06 06:35:50
您正在尝试直接在类体中运行一段代码。类的主体必须仅用于初始化和函数创建。Java所做的就是遍历类中创建的所有成员,并像使用Inner i = new Inner()一样初始化它们。
要运行一段代码,必须将放在函数中,并且必须调用该函数!一个很好的例子是main()函数。您在其中写入的任何内容都将执行,因为该函数将在程序运行后立即调用。
但是,如果在函数的中间抛出一个错误,您还应该知道执行将被中断,命令直到结束才会执行。
https://stackoverflow.com/questions/68265570
复制相似问题