Java 为什么公共静态void main方法不能在实例化的类中自动运行?
我理解在我的起始类中,Java 为什么公共静态void main方法不能在实例化的类中自动运行?,java,main,Java,Main,我理解在我的起始类中,publicstaticvoidmain的意义——在程序运行时执行代码 我在网上读到的一些文章指出,任何类都可以有一个主类。我创建了从第一个类调用的第二个类,并创建了它的一个实例,但是第二个类主方法中的代码没有运行。我是不是误解了这个方法在一个非初级类的类中是如何工作的 public class Main { public static void main(String[] args) { aClass newClass = new aClass(
publicstaticvoidmain
的意义——在程序运行时执行代码
我在网上读到的一些文章指出,任何类都可以有一个主类。我创建了从第一个类调用的第二个类,并创建了它的一个实例,但是第二个类主方法中的代码没有运行。我是不是误解了这个方法在一个非初级类的类中是如何工作的
public class Main {
public static void main(String[] args) {
aClass newClass = new aClass();
}
}
JVM在一个类上调用
main
方法(当然,除非您显式地调用它)
如果希望在实例化aClass
时调用代码,则需要将代码移动到构造函数:
公共类aClass{
公共aClass(){
System.out.println(“你好”);
}
}
当然,也可以显式调用aClass.main
:
公共类主{
公共静态void main(字符串[]args){
aClass.main(args);
}
}
JVM在一个类上调用main
方法(当然,除非您显式地调用它)
如果希望在实例化aClass
时调用代码,则需要将代码移动到构造函数:
公共类aClass{
公共aClass(){
System.out.println(“你好”);
}
}
当然,也可以显式调用aClass.main
:
公共类主{
公共静态void main(字符串[]args){
aClass.main(args);
}
}
的确,“任何类都可以有一个主类”。但是不管有多少类有一个方法,只运行一个main
方法
运行哪个main
方法取决于应用程序的指定入口点,即通过java name.of.class
运行代码时显式指示的入口点,或者JAR清单指示的入口点
相反,可以为类提供静态初始化块。第一次加载类时,此块将运行一次:
public class Main {
public static void main(String[] args) {
new aClass();
new aClass();
}
}
public class aClass{
static {
// Run only once!
System.out.println("hello");
}
}
即使您没有实例化您的类,但是(比如)调用它的静态方法,此代码也将运行。但是,如果代码中没有任何内容引用aClass
,那么它的静态初始化器将不会运行。确实,“任何类都可以有一个主类”。但是不管有多少类有一个方法,只运行一个main
方法
运行哪个main
方法取决于应用程序的指定入口点,即通过java name.of.class
运行代码时显式指示的入口点,或者JAR清单指示的入口点
相反,可以为类提供静态初始化块。第一次加载类时,此块将运行一次:
public class Main {
public static void main(String[] args) {
new aClass();
new aClass();
}
}
public class aClass{
static {
// Run only once!
System.out.println("hello");
}
}
即使您没有实例化您的类,但是(比如)调用它的静态方法,此代码也将运行。但是,如果代码中没有任何内容引用aClass
,那么它的静态初始化器将不会运行。它就是不会运行。main
方法可以在显式调用它时运行(例如aClass.main(新字符串[0]);
),也可以在告诉JVM启动并运行它时运行。不过,在创建该类的新实例时,将运行构造函数。对此我有把握,但不能有超过2个主方法。。必须是一个@Andy Turner,但是我们不是必须有一个条目吗?如果我们启动一个java程序,我们可以通过显式运行.class
-文件来启动它。此类必须包括main
-方法,否则程序启动将失败。启动程序的是这个类,而且只有这个类的main
-方法。如果我们运行一个jar
-文件,我们要么显式地声明条目类(即包含main
-方法的类),要么在jar的元信息中定义条目类。@HannahLee这根本不是真的。您可以有任意多个类。@HannahLee这就是为什么您必须明确地告诉JVM要运行哪个类:它不知道您希望它从哪个类开始,所以您可以指定它。在给定类中只能定义一个main
方法,但可以在任何可以定义静态方法的类中放置main
。您为JVM提供了类的名称,它调用该类中的main
方法,但事实并非如此。main
方法可以在显式调用它时运行(例如aClass.main(新字符串[0]);
),也可以在告诉JVM启动并运行它时运行。不过,在创建该类的新实例时,将运行构造函数。对此我有把握,但不能有超过2个主方法。。必须是一个@Andy Turner,但是我们不是必须有一个条目吗?如果我们启动一个java程序,我们可以通过显式运行.class
-文件来启动它。此类必须包括main
-方法,否则程序启动将失败。启动程序的是这个类,而且只有这个类的main
-方法。如果我们运行一个jar
-文件,我们要么显式地声明条目类(即包含main
-方法的类),要么在jar的元信息中定义条目类。@HannahLee这根本不是真的。您可以有任意多个类。@HannahLee这就是为什么您必须明确地告诉JVM要运行哪个类:它不知道您希望它从哪个类开始,所以您可以指定它。在给定类中只能定义一个main
方法,但可以在任何可以定义静态方法的类中放置main
。为JVM提供类的名称,它调用该类中的main
方法。