java - 出于什么目的,人们想要在同一类的 main 中创建一个类的实例?

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

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

最佳答案

事实上,您位于类对象本身的外部main方法是一个静态方法,因此它不依赖于任何对象实例。

您还可以将main 方法移动到任何其他java 文件。一般来说,它也会起作用。但是,您需要将静态方法放入某个文件中。由于每个 java 文件 都需要是一个类,因此您可以将方法放在它所适用的类中。例如,java中的类Math是一个纯粹的实用类,它没有非静态方法。

但是,如果您创建这样的内容:

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() 不会增加值本身,而是创建该对象的一个​​新实例,并增加值。

关于java - 出于什么目的,人们想要在同一类的 main 中创建一个类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38571268/

相关文章:

c - VLA 和通过 malloc 进行动态内存分配有什么区别?

c++ - 构造函数 Parent 在构造函数 Child 的初始化列表中被调用

c++ - 变量初始化和构造函数

objective-c - 可以跳过继承类中的 init 方法吗?

c++ - 我们可以在哪里使用列表初始化?

java - 添加指向 REST 响应的链接

java - 使用 Gson 反序列化 Map<String, Object> 字段

java - 在java中调试测试用例

java - hidden.edu.emory.mathcs.backport*

java - 用于可滚动 Pane 的纯 Java HTML 查看器/渲染器