我们知道,如果要创建object
中的class
,我们需要做一些事情:
class MyClass{
// ...
}
要创建其object
,请执行以下操作:
MyClass MyObj = new MyClass();
现在,如果要使用Java创建程序,则需要在main
内有一个class
方法,并且class
应该与文件名相同。
例如:
// file MyFile.java
public class MyFile{
public static void main(String[] args){
// ...
}
}
现在的问题是,当程序运行时,MyFile
类的对象是否也将由java
在内部创建,以便通过调用{{1}开始执行Java文件}方法还是以如下方式静态调用main
方法:
main
如果我将MyFile.main(String[] args);
类中的类设为:
MyFile
或具有以下非静态属性和方法:
public class MyFile{
class HelloWorld{
// ...
}
public static void main(String[] args){
// ...
}
}
等等。
现在,将发生什么情况? public class MyFile{
int x = 10;
public void MyWorld(){
// ...
}
public static void main(String[] args){
// ...
}
int y = 10;
public void ByeWorld(){
// ...
}
}
会在内部创建java
类的对象吗? MyFile
在此类情况下将执行哪些操作,以便既可以借助java
方法来运行程序,又可以在{{1}之前和之后加载其他内容} 方法?在这种情况下,main
内部将执行哪些操作?
答案 0 :(得分:8)
启动JVM时不会自动创建该类的实例。 main
方法只是静态调用的-这就是为什么它必须首先是静态的原因。
该类已被初始化,因此,如果您有静态初始化程序,则那个将在main
方法之前执行,但该类的任何实例都不会被建造。不需要这样做,这会带来不必要的复杂性。 (例如,如果仅在构造函数中包含参数,您会期望发生什么?)
有关JVM启动的更多详细信息,请参见chapter 12 of the Java Language Specification。
答案 1 :(得分:1)
除了Jon Skeet's answer之外,我们还可以使用一个代码示例来证明在调用 该程序的输出很简单: 如果创建了实例,您也会看到main
方法时未创建封闭类的实例:>
public class Test {
public Test() {
System.out.println("Test2");
}
public static void main(String[] args) {
System.out.println("Test");
}
}
Test
Test2
也打印到控制台。