首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这些代码不能在Java中运行呢?反恐:<identifier>预期

为什么这些代码不能在Java中运行呢?反恐:<identifier>预期
EN

Stack Overflow用户
提问于 2021-07-06 06:28:44
回答 2查看 214关注 0票数 0

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

代码语言:javascript
复制
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");
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-06 06:38:35

那么为什么编译器要拒绝这些代码呢?

因为代码在语法上与Java一样无效,而Java编译器是拒绝无效代码所必需的。

Java语言规范指出,类中唯一可以立即嵌套的东西是成员声明或初始化器块。成员声明如下:

  • 字段声明
  • 嵌套类、接口、枚举等
  • 方法
  • 建设者

初始化程序块要么是static初始化程序块,要么是实例初始化程序块。

典型的语句(如您试图插入的语句)既不是成员声明,也不是块。

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

票数 7
EN

Stack Overflow用户

发布于 2021-07-06 06:35:50

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

要运行一段代码,必须将放在函数中,并且必须调用该函数!一个很好的例子是main()函数。您在其中写入的任何内容都将执行,因为该函数将在程序运行后立即调用。

但是,如果在函数的中间抛出一个错误,您还应该知道执行将被中断,命令直到结束才会执行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68265570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档