java - 为什么这段代码不能在 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");
}
}
解决方案
那么为什么编译器会拒绝这段代码呢?
因为代码在语法上作为 Java 是无效的,并且 Java 编译器需要拒绝无效的代码。
Java 语言规范说,唯一可以立即嵌套在类中的是成员声明或初始化块。成员声明是:
- 字段声明
- 嵌套类、接口、枚举等
- 方法
- 构造函数
初始化程序块是static
初始化程序块或实例初始化程序块。
一个典型的声明(比如你试图插入的那个)既不是成员声明也不是块。
Java 语言规范的相关部分是JLS 8.1.6
推荐阅读
- sql - 在 postgres 中创建具有差异列的视图
- kubernetes - prometheus 查询以按标签拉取 kubernetes 节点并仅列出某些字段
- c++ - C++20 的 std::vector 如何分配 constexpr?
- excel - 获取图表 Y 轴的中点
- c++ - 如何让“cin”读取原始模式终端
- javascript - 将 html 值放入 onClick()
- python - 如何将海岸线添加到 xarray.plot.facetgrid.FacetGrid?
- power-automate - Power Automate - 无法导航到文件夹或获取文件夹 ID
- angular - 检测何时在外部单击子组件
- python - 如何清理此脚本的响应以使其更具可读性?