【发布时间】:2015-08-02 14:16:25
【问题描述】:
编辑:澄清:
创建一个包含静态 main 的新类。在 main 方法中实例化同一个类。当 JVM 在实例化时到达主方法代码行时会做什么?
(JVM如何知道在while循环期间“跳过”以下代码中的静态main()方法)
我问是因为我看不出将 static main 放入您打算实例化的类中有任何好处,将 static main 放入专门为此目的而构建的“启动器”类似乎要好得多启动应用程序..
对狗类感到困惑:
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++;
}
}
}
【问题讨论】:
-
您认为
main方法是什么?你为什么这么认为? -
我认为它是 JVM 寻找启动应用程序的内容 - 以及找到它后接下来要做什么。这就是为什么将 main 方法粘贴在具有其他功能的类中似乎是随机的,将主方法赋予它自己的“启动器”类会更清楚 OO,并将其他类保留为纯对象蓝图。
-
您似乎认为 JVM 只是执行它在一个类中找到的所有代码。 Java 不是这样工作的。
-
...它不会“迭代”它。
-
它加载符号表,然后调用表中方法指向的代码。如果您想了解底层细节,只需阅读 JVM 规范;没有比这更容易的了。
标签: java compiler-construction static jvm main