从哪里开始执行java程序?我听到有人用主法说出来。我认为执行从静态块开始。我是对的吗?
答案 0 :(得分:4)
该程序的输出:
public class XXX {
static YYY dependend = new YYY();
static {
System.out.println("3");
}
public static void main(String[] args) {
System.out.println("4");
}
}
class YYY {
static {
System.out.println("1");
}
YYY(){
System.out.println("2");
}
}
当然是
1
2
3
4
所以:你的程序的入口点是main
。但是之前有代码执行。并且不需要这个“在main之前执行”代码在同一个类中。并且此代码也不需要在静态初始化器中(参见“2”)。
答案 1 :(得分:2)
主要方法是程序的入口点。如果包含“main”方法的类具有需要初始化的静态成员或静态代码块,则将在“main”方法之前执行。
请看这个示例代码:
public class Test {
private static Object obj = new Object();
public static void main(String[] args) {
System.out.println("test");
}
}
如果在对象初始化行中放置一个断点,您将看到它在println行之前运行。
答案 2 :(得分:0)
这是java程序的start方法:
public static void main(String[] args){
...
}
答案 3 :(得分:0)
初始化类时执行静态块。对于包含main
方法的类,它将在调用此方法之前,因为必须在使用任何方法之前初始化类。对于其他类,如果不需要初始化类,则可以更晚或永远。
答案 4 :(得分:0)
Java应用程序通常由main方法初始化:
public static void main(String... args){
System.out.println("Executing my application...");
}
当JVM加载类时,将执行静态块。如果没有main方法,您将无法启动应用程序,否则JVM将显示错误消息
理论上可以使用静态块(example)执行代码。但这是初始化应用程序的一种不好的方法,因为doSomethingElse
方法可能被另一个脚本调用,该脚本不想创建gui(或者你在初始化方法中做的任何事情)。例如:
class Test2 extends Object{
public static void doSomething(){
System.out.println("Calling Test's doSomethingElse method.");
Test.doSomethingElse();
}
}
Test2的doSomething方法只想调用doSomethingElse
,但是也会调用创建GUI的方法,因为JVM加载了类Test
。当JVM加载一个类 - 并且该类有一个静态块 - 静态块将在第一次调用。 Test的静态块现在调用executingClass
方法并创建GUI(但Test2只想调用doSomethingElse
。
最后,您不应该使用静态块来初始化您的应用程序:
main
方法也是必需的。答案 5 :(得分:0)
如果一个类包含静态块和main方法(),则jvm将首先执行静态块,然后再执行main方法。 但是,如果您没有在类中提及静态块,并且该类仅包含main方法,那么jvm仅从main方法开始执行。