在主mathod中创建同一个类的实例会创建两个实例吗?

时间:2015-11-02 05:44:57

标签: java oop static

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

通常,当我创建一个主要的mathod时,我把它放在我开始的类中。 最近我见过其他人的代码,看到他们把主程序放在一个新的类中。

我想到了,这个问题出现在我的脑海里。

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

3 个答案:

答案 0 :(得分:4)

  

当我启动程序时,是否包含该类的实例   主要的mathod是创建的吗?

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

访问main()的原因

答案 1 :(得分:3)

  

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

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

  

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

答案 2 :(得分:1)

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

<强>静态: 由于main方法是静态的,因此Java虚拟机可以调用它而无需创建包含main方法的任何类实例。如果main方法没有声明为静态,那么JVM必须创建主类的实例,并且因为构造函数可以重载并且可以有参数,所以JVM在Java中找不到主方法也没有任何确定和一致的方法。

公开: Java中的public可以从该类外部访问。由于main方法在Java中是公共的,因此JVM可以轻松访问和执行它。

void:它的虚空意味着main不会返回任何内容。

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

这里有一个技巧:直到并包括Java 6,可以使用静态初始化块执行此操作,如在控制台上打印消息而不使用main()中指出的那样方法。例如,使用以下代码:

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

System.exit(0)允许程序在JVM查找main方法之前退出,否则将引发以下错误:

  

线程中的异常&#34; main&#34; java.lang.NoSuchMethodError:main

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

  

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

请参阅thisthis