如何在自己的类中初始化对象?

时间:2012-04-20 22:25:19

标签: java

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

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

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

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

提前致谢。

4 个答案:

答案 0 :(得分:2)

一个类本身就是一个对象,它实现了一些方法 - 比如newInstance(),它可以获得类型为class的对象。我知道这不是最清晰的定义,但是它的工作方式如下:

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

Class<?> MyClassObject

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

MyClass object = MyClassObject.newInstance()

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

答案 1 :(得分:1)

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

你可以在main中初始化CLUBS,但是

  1. CLUBS只能在主要方法
  2. 中显示
  3. 如果你在没有主方法的情况下运行java(例如网页上没有CLUBS)

答案 2 :(得分:0)

没有任何问题,因为在实例化的那一刻,有关类结构的完整信息是可用的,并且它可以被实例化(无论是在静态还是非静态字段中)。

这类似于递归定义 - 完全合法:

   Node:
      Node parent;
      Node left;
      Node right;

答案 3 :(得分:0)

这是类型安全枚举(pre-Java 1.5)或单例类的经典场景。在声明网站初始化的好处是,这是该字段{@ 1}}的唯一方式,这本身就是一个非常重要的特征。