为了什么目的,我们想要在同一个类的主类中创建一个类的实例?

问题描述:

我碰到这样一个例子,并有困难,了解它的实际工作用途:为了什么目的,我们想要在同一个类的主类中创建一个类的实例?

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); 
    } 
} 

我从来没有见过这种实现的 - 为什么启动内部同一类对象,而不是一个新的类外面班?有什么特别的原因吗?

+0

不要认为有任何特定的原因,只是少一个例子的代码。 – Divers

+0

我有这么多的代码问题......(实际上,只有3个主要的问题:对可变共享变量的非同步访问;扩展'Thread'而不是实现'Runnable';一个非常繁忙的循环)。 –

+0

@AndyTurner - 它不是我的:) – Nimrod

其实你是类对象本身的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()不会增加值本身,但创建此对象的新实例,并增加值。