1

我的印象是,如果有一个现有的类可以创建一个新对象。

public final class Suit implements Comparable {
  private String name;
  private String symbol; 

  public final static Suit CLUBS = new Suit( "Clubs", "c" );

这是如何运作的?在自己的类中初始化而不是在主类中进行初始化有什么好处?

提前致谢。

4

4 回答 4

2

一个类本身就是一个对象,它实现了方法——例如 newInstance() ,它为你提供了一个类类型的对象。我知道这不是最清晰的定义,但它是这样工作的:

每当您创建一个 MyClass 类型的新对象时,类加载器首先检索并创建一个代表您的类的对象:

Class<?> MyClassObject

它执行所有“静态”变量的静默构造。然后程序向 MyClassObject 询问 MyClass 的一个实例:

MyClass object = MyClassObject.newInstance()

静态变量和方法属于 MyClassObject,而实例变量属于 MyClass

于 2012-04-20T22:34:15.120 回答
1

注意 CLUBS 是静态的。它不是任何对象的一部分,而是属于整个类。

您可以在 main 中初始化 CLUBS,但随后

  1. CLUBS 只能在 main 方法中可见
  2. 如果您在没有 main 方法的情况下运行 java(例如网页,则不会有 CLUBS)
于 2012-04-20T22:28:32.303 回答
0

没有任何问题,因为在实例化的时刻,关于类结构的全部信息都是可用的,并且可以实例化(无论是在静态字段还是非静态字段中)。

这有点像递归定义 - 这是完全合法的:

   Node:
      Node parent;
      Node left;
      Node right;
于 2012-04-20T22:31:58.293 回答
0

这是类型安全枚举(Java 1.5 之前)或单例类的经典场景。在声明点进行初始化的好处是,这是该字段的唯一方式final,这本身就是一个非常重要的特性。

于 2012-04-20T22:32:30.553 回答