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