我的印象是,如果有一个现有的类,可以创建一个新对象。
public final class Suit implements Comparable {
private String name;
private String symbol;
public final static Suit CLUBS = new Suit( "Clubs", "c" );
这是如何工作的?在其自己的类中初始化而不是在主要类中进行初始化有什么好处?
提前致谢。
答案 0 :(得分:2)
一个类本身就是一个对象,它实现了一些方法 - 比如newInstance(),它可以获得类型为class的对象。我知道这不是最清晰的定义,但是它的工作方式如下:
每当你创建一个MyClass类型的新Object时,类加载器首先检索并创建一个代表你的类的对象:
Class<?> MyClassObject
执行所有“静态”变量的静默构造。然后程序向MyClassObject询问MyClass的实例:
MyClass object = MyClassObject.newInstance()
静态变量和方法属于MyClassObject,而实例变量属于MyClass
答案 1 :(得分:1)
注意CLUBS是静态的。它不属于任何对象,但属于整个类。
你可以在main中初始化CLUBS,但是
答案 2 :(得分:0)
没有任何问题,因为在实例化的那一刻,有关类结构的完整信息是可用的,并且它可以被实例化(无论是在静态还是非静态字段中)。
这类似于递归定义 - 完全合法:
Node:
Node parent;
Node left;
Node right;
答案 3 :(得分:0)
这是类型安全枚举(pre-Java 1.5)或单例类的经典场景。在声明网站初始化的好处是,这是该字段{@ 1}}的唯一方式,这本身就是一个非常重要的特征。