我遇到过这样的例子,很难理解它的实际目的:
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 :(得分:1)
实际上你是类对象本身的outside
。 main 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()
不会增加值本身,而是创建此对象的新实例,并增加值。