出于什么目的,人们想要在同一个类的主要内部创建一个类的实例?

时间:2016-07-25 15:03:55

标签: java initialization

我遇到过这样的例子,很难理解它的实际目的:

class YieldDemo extends Thread
{
   static boolean finished = false;
   static int sum = 0;
   public static void main (String [] args)
   {
      new YieldDemo ().start ();
      for (int i = 1; i <= 50000; i++)
      {
           sum++;
           if (args.length == 0)
              Thread.yield ();
      }
      finished = true;
   }
   public void run ()
   {
      while (!finished)
         System.out.println ("sum = " + sum);
   }
}

我从未见过这种实现 - 为什么在同一个类对象中启动新类 而不是类中?有什么特别的原因吗?

1 个答案:

答案 0 :(得分:1)

实际上你是类对象本身的outsidemain method是一个静态方法,因此它不依赖于任何对象实例。

您也可以将main method移至任何其他java file。一般来说它也会起作用。但是,您需要将static方法放在某个文件中。由于每个java file都需要是一个类,因此您可以将该方法放在它适用的类中。例如,java中的类Math是纯实用程序类,它没有non-static方法。

但是,如果你创建这样的东西:

public final class Value {
    private final int mValue;

    public Value(int value) {
        mValue = value;
    }

    public int getValue() {
        return mValue;
    }

    public Value increase() {
        return new Value(mValue + 1);
    }
}

如果您希望Value不可变(而不是更改其内部值),那么它实际上是有意义的。因此,调用increase()不会增加值本身,而是创建此对象的新实例,并增加值。