【问题标题】:does creating instance of the same class in the main mathod creates two instances?在主要方法中创建同一类的实例会创建两个实例吗?
【发布时间】:2016-02-01 23:18:26
【问题描述】:

标题可能太长,但我会解释自己。

通常,当我创建一个主要方法时,我会将它放在我开始使用的类中。 最近我看到其他人的代码,看到他们把主要的方法放在一个新的类中。

我想了想,想到了这个问题。

当我启动程序时,是否会创建包含主要方法的类的实例? 因此,当我在 main 方法中创建同一类的新实例时,它会创建 2 个实例还是 main 与类本身无关并且该类首先没有实例,例如静态不能使用非静态变量?

【问题讨论】:

  • 没有创建实例,因为主要方法是静态的(它们属于类,而不是特定实例)。

标签: java oop static


【解决方案1】:

当我启动程序时,包含 主要方法创建了吗?

没有。 main() 方法是 publicstatic 是有原因的。您不必创建定义它的类的实例。因此,当您执行程序时,包含main() 的类将被加载、初始化,然后main() 将在不创建封闭类的实例的情况下执行。这就是为什么你不能从main()访问this

【讨论】:

  • 好的,谢谢。那么为什么人们创建一个新类只是为了从中启动程序,然后创建您想要实际启动的类的实例呢?
  • @amirag - 没必要。你可以只有一个带有 main 方法的类。
  • @amirag - 不一定。在复杂的程序中,我们将有多个类和这些类的多个实例。一切都与设计有关。
【解决方案2】:

当我启动程序时,是否创建了包含main 方法的类的实例?

没有。因为main 方法是static。不会自动创建封闭类的实例。 JLS-12.1 Java Virtual Machine Startup 说(部分)

Java 虚拟机通过调用某个指定类的方法main 开始执行,并传递给它一个参数,它是一个字符串数组。

【讨论】:

  • 感谢您的评论。那么你能解释一下为什么人们创建一个新类来启动程序,而不是在你想直接开始的类中使用主要方法吗?
【解决方案3】:

主要方法签名:public static void(String args[])

静态: 由于 main 方法是静态的,Java 虚拟机可以在不创建任何包含 main 方法的类实例的情况下调用它。如果 main 方法没有声明为静态,那么 JVM 必须创建 main 类的实例,并且由于构造函数可以被重载并且可以有参数,那么 JVM 在 Java 中查找 main 方法将没有任何确定且一致的方式。

公开: Java 中的 public 可以从该类外部访问。由于 main 方法在 Java 中是公共的,JVM 可以很容易地访问和执行它。

void:它变成了 void,这仅仅意味着 main 没有返回任何东西。

  • Java 中的 Main 方法必须声明为 public、static 和 void 否则 JVM 将无法运行 Java 程序
  • 如果在提供给 Java 命令的类中找不到预定义签名的 main 方法,JVM 会抛出 NoSuchMethodException:main
  • Main 方法是任何Core Java 程序的入口点。执行 从 main 方法开始。

这里有个窍门: 在 Java 6 之前(包括 Java 6),可以使用静态初始化块来执行此操作,正如问题在控制台上打印消息而不使用 main() 方法中所指出的那样。例如使用以下代码:

class A3{  
  static{  
  System.out.println("static block is invoked");  
  System.exit(0);  
  }  
}

System.exit(0)让程序在JVM寻找main方法之前退出,否则会抛出如下错误:

线程“main”中的异常 java.lang.NoSuchMethodError: main

然而,在Java 7中,这不再起作用了,即使它编译了,当你尝试执行它时也会出现以下错误:

程序编译成功,但没有找到主类。主要的 类应包含方法:public static void main (String[] args)。

thisthis

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-02
    • 2020-05-19
    • 2018-08-11
    • 1970-01-01
    • 2011-02-05
    • 2021-03-23
    • 1970-01-01
    • 2015-01-01
    相关资源
    最近更新 更多