java 是否在内部创建了持有 main 方法的 class 的对象?
Does java internally creates the object of the class which is holding the main method?
我们知道,如果我们想创建 class
的 object
,我们需要做一些事情:
class MyClass{
// ...
}
为了创建它的 object
我们这样做:
MyClass MyObj = new MyClass();
现在如果我们想在 java 中创建一个程序,我们需要在 class
中有一个 main
方法并且 class
应该与文件名。
例如:
// file MyFile.java
public class MyFile{
public static void main(String[] args){
// ...
}
}
现在的问题是,MyFile
class 的对象是否也会在这个程序 运行 开始执行时由 java
在内部创建java 文件通过调用 main
方法还是静态调用 main
方法作为:
MyFile.main(String[] args);
如果我在 MyFile
class 中有 class(es) 会怎样:
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
class 的对象吗?为了在 main
方法的帮助下 运行 程序以及在 java
方法之前和之后加载其他东西,java
将在这些类型的情况下执行什么操作main
方法?在这些情况下,java
内部会执行什么操作?
JVM 启动时不会自动创建 class 实例。 main
方法只是静态调用 - 这就是为什么它首先必须是静态的。
class被初始化,所以如果你有静态初始化器,that会在[=]之前执行10=] 方法,但不会构造 class 的实例。没有必要这样做,而且会引入不必要的并发症。 (例如,如果只包含带参数的构造函数,您期望发生什么?)
有关 JVM 启动的更多详细信息,请参阅 chapter 12 of the Java Language Specification。
除了之外,我们可以用一个代码示例来证明封闭class的一个实例是不是创建的,当main
方法被调用:
public class Test {
public Test() {
System.out.println("Test2");
}
public static void main(String[] args) {
System.out.println("Test");
}
}
这个程序的输出很简单:
Test
如果创建了一个实例,您也会看到 Test2
打印到控制台。
我们知道,如果我们想创建 class
的 object
,我们需要做一些事情:
class MyClass{
// ...
}
为了创建它的 object
我们这样做:
MyClass MyObj = new MyClass();
现在如果我们想在 java 中创建一个程序,我们需要在 class
中有一个 main
方法并且 class
应该与文件名。
例如:
// file MyFile.java
public class MyFile{
public static void main(String[] args){
// ...
}
}
现在的问题是,MyFile
class 的对象是否也会在这个程序 运行 开始执行时由 java
在内部创建java 文件通过调用 main
方法还是静态调用 main
方法作为:
MyFile.main(String[] args);
如果我在 MyFile
class 中有 class(es) 会怎样:
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
class 的对象吗?为了在 main
方法的帮助下 运行 程序以及在 java
方法之前和之后加载其他东西,java
将在这些类型的情况下执行什么操作main
方法?在这些情况下,java
内部会执行什么操作?
JVM 启动时不会自动创建 class 实例。 main
方法只是静态调用 - 这就是为什么它首先必须是静态的。
class被初始化,所以如果你有静态初始化器,that会在[=]之前执行10=] 方法,但不会构造 class 的实例。没有必要这样做,而且会引入不必要的并发症。 (例如,如果只包含带参数的构造函数,您期望发生什么?)
有关 JVM 启动的更多详细信息,请参阅 chapter 12 of the Java Language Specification。
除了main
方法被调用:
public class Test {
public Test() {
System.out.println("Test2");
}
public static void main(String[] args) {
System.out.println("Test");
}
}
这个程序的输出很简单:
Test
如果创建了一个实例,您也会看到 Test2
打印到控制台。