Java 为什么编译时常量可以在非静态内部类中设置为静态?
假设我们有如下代码Java 为什么编译时常量可以在非静态内部类中设置为静态?,java,static,inner-classes,Java,Static,Inner Classes,假设我们有如下代码 public class Outer{ class Inner{ public static final String s = "abc"; } static class Nested{ public static final SomeOtherClass instance = new SomeOtherClass(); } } 我知道要实例化非静态内部类的对象,需要外部类的对象静态表示与类相关,访问它不需要
public class Outer{
class Inner{
public static final String s = "abc";
}
static class Nested{
public static final SomeOtherClass instance = new SomeOtherClass();
}
}
我知道要实例化非静态内部类的对象,需要外部类的对象<代码>静态表示与类相关,访问它不需要实例化对象。非静态内部类只能在外部类的对象实例化后使用。在其中包含任何静态引用可能没有意义
我的问题是:
编辑:为什么不能将非编译时常量设置为静态,我知道它是根据JLS设置的,但我只想知道会出什么问题,制定此规则的意图是什么。问题1-在没有外部类的任何显式对象的情况下是否可以加载非静态内部类 是的,您可以通过这种方式加载非静态内部类,请参见下面的示例:
class MyObject {
class InnerObject {
static final String prop = "SOME INNER VALUE";
}
static void doLoad() {
System.out.println(InnerObject.prop);
}
}
问题是这样做的原因不多,因为非静态内部类不允许有任何静态块、方法、字段(如果这些不是最终的,如下面的问题所示)
问题2-为什么编译时常量(字符串文本,因为它们在字符串池和基元类型中以特殊方式处理)可以在非静态内部类中设置为静态
Java
的设计目的是让您可以在非静态内部类中使用static
,final
字段
我认为你在第一季度回答了错误的问题。OP询问的是非静态内部类,而不是静态内部类。相关:感谢Andy的回答,我已经编辑了我的问题:为什么不能将非常量设置为静态,我知道这是根据JLS,但我只想知道会出现什么问题,制定此规则的意图是什么。@nits.kk-对于你的第三个问题,我没有一个明确的答案。以前在这个网站和其他地方都有人问过这个问题。我所看到的只是猜测或误解。例如,请参阅。您在sentense中所说的“加载”是什么意思“但在创建任何实例之前都可以加载这两个类。”。它与“创造”不同吗?根据=,我们只能从外部类实例创建内部类实例:
OuterClass.InnerClass innerObject=outerObject.new InnerClass()代码>@anir-在使用类之前,必须先将其删除。加载后,可以创建多个实例。