编辑:澄清:
创建一个包含静态main的新类。在main方法中实例化同一个类。当JVM实例化它时,JVM在到达主方法代码行时会做什么?
(JVM如何知道"在while循环期间跳过"以下代码中的静态main()方法)
我问,因为我看不到将静态main放入你打算实例化的类中的任何好处,似乎只有将静态main放入"启动器&#似乎好多了? 34; class,仅为启动应用程序而构建..
对狗类感到困惑:
public class Dog {
private int height;
public static void main (String[] args) { // <---- What does the JVM do when it reaches here during the object instantiation?
int i = 0;
Dog [] dogArray = new Dog[20];
while (i < 20){
dogArray[i] = new Dog(); // Instantiate knew class
dogArray[i].height = i*10; //whatever
i++;
}
}
}
当然,创建两个类总是更好,在这种情况下:
public class Dog {
private int height;
getHeight{//etc...}
setHeight{//etc...}
}
public class launchApplication{
public static void main (String[] args) {
int i = 0;
Dog [] dogArray = new Dog[20];
while (i < 20){
dogArray[i] = new Dog(); // Instantiate knew class
dogArray[i].setHeight = i*10; //whatever
i++;
}
}
}
答案 0 :(得分:2)
public class Test {
/**
* The constructor
*/
public Test() {
System.out.println("The is the constrcutor");
}
/**
* The main method
*
* @param args
*/
public static void main(String[] args) {
System.out.println("This is main");
new Test();
new Test();
new Test();
}
/**
* A static method
*/
public static void count() {
System.out.println("This is a static method");
}
/**
* A static block
*/
static {
System.out.println("This is the static block");
}
}
输出
这是静态块
这是主要的
是施工人员
是施工人员
是施工人员
运行上面的代码,你会对此有更好的了解。
运行程序时,jvm会调用main
方法。为什么在实例化Test
类时应该调用它。
实例化类时,首先执行静态块。它将用于第一次实例化,而不是所有的实例化。 (看看输出)。
然后调用构造函数。
如果查看输出,则不会调用静态方法。静态方法只有在调用它们时才会被调用。这就是count()
在这种情况下不执行的原因。 JVM一次调用main
方法来启动程序,但是之后它仍然是类的常规静态方法,它不会超出它所调用的函数。
答案 1 :(得分:0)
事实证明我正在寻找的答案(以及我试图提出的问题)实际上是JVM如何进行自举和调用main。首先启动JVM的本机代码和使用STATIC调用main方法,以避免必须先以某种方式(外部)创建对象,然后从该对象调用main方法。
我对主要方法被忽略的原因感到困惑&#34;误解了主要方法是如何被调用的 - 它在JVM 的启动过程中被显式调用,这就是JAVA约定--JVM是这样构建和设计的,这是一种专门的方法。
所以在我的例子中,main是一个方法,在main所属的类的每次实例化期间都没有被调用(因为在实例化过程中没有隐式调用方法),我的印象是每次都会以某种方式自动调用main。一个类是通过它是&#34; java主要方法&#34;来实例化的。 - 好像它有一个要被调用的钩子。关键在于掌握STATIC以及JVM如何加载Main方法而不首先实例化它的封闭类。这基本上是从JVM(包括本机)引导程序过程转换为更纯粹的#34;运行JAVA应用程序的面向对象功能。
希望这是有道理的,希望它可以帮助某人澄清一些事情。