gpt4 book ai didi

Java 嵌套类——幕后?

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:22 28 4
gpt4 key购买 nike

我有几个关于 Java 中的嵌套类的问题。

  • 关于内存分配,嵌套类是如何“隐藏”的?

  • 您不能在嵌套类中声明静态变量(我认为确切的错误是静态属性只能在顶级类中声明)。为什么会这样?嵌套类还有哪些其他限制?

如果可能,请说明您的答案是特定于 Java 的,还是 C++ 也遵循相同的规则?

最佳答案

就内存和编译而言,内部类与常规类完全相同。 (也许它们在内存中的管理方式有些不同,但对于一般的 Java 开发人员来说是不可见的)实际上,当你编译一个有内部类的类时,你可以看到编译后的 .class 文件为 OuterClass$InnerClass.class。据我所知,JVM 对它们一视同仁。

就静态变量而言,我不确定是什么问题。例如,这为我运行:

public class Tester {
public static void main(String[] args) {
System.out.println(InnerTester.MY_STRING);
}

public class InnerTester {
public static final String MY_STRING = "MY_STRING";
}
}

编辑

正如 Jeffery 所指出的,这不会编译:

public class Tester {
public static void main(String[] args) {
System.out.println(InnerTester.MY_STRING);
}

public class InnerTester {
public static String MY_STRING = "MY_STRING";
}
}

区别在于,我将第一个静态变量列为最终变量。

经过一段时间的思考,我同意@Eugene 的观点。它们允许内部类上的静态字段为 final,因为这样初始化就没有问题了。值不能改变,你只需将它初始化为它的值。但是,如果静态字段不是 final,则需要创建外部类的实例 以初始化该字段,并且静态成员不能绑定(bind)到特定实例。

我找到了 this对此也进行了讨论。

关于Java 嵌套类——幕后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10051239/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com