1

java程序的执行从哪里开始?我听到人们说它来自主要方法。我认为执行从静态块开始。我对吗??

4

6 回答 6

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”)。

于 2013-04-07T14:38:44.140 回答
2

main 方法是程序的入口点。如果包含“main”方法的类有需要初始化的静态成员或静态代码块,这将在“main”方法之前执行。

看这个示例代码:

public class Test {

    private static Object obj = new Object();

    public static void main(String[] args) {

        System.out.println("test");
    }

}

如果您在对象初始化行中放置一个断点,您将看到它在 println 行之前运行。

于 2013-04-07T14:36:41.930 回答
0

初始化类时执行静态块。对于包含main方法的类,它将在调用此方法之前,因为必须在使用它的任何方法之前初始化类。对于其他类,如果不需要初始化该类,它可以稍后或永远不会。

于 2013-04-07T14:41:32.403 回答
0

Java 应用程序通常由 main 方法初始化:

public static void main(String... args){
    System.out.println("Executing my application...");
}

静态块将在 JVM 加载类时执行。如果没有 main 方法,您将无法启动应用程序,否则 JVM 将出现错误消息。
理论上可以使用静态块(示例)执行您的代码。但这是初始化应用程序的不好方法,因为该doSomethingElse方法可能被其他脚本调用,该脚本不想创建 gui(或您在初始化方法中执行的任何操作)。例如:

class Test2 extends Object{
    public static void doSomething(){
        System.out.println("Calling Test's doSomethingElse method.");
        Test.doSomethingElse();
    }
}

Test2 的 doSomething 方法只想调用doSomethingElse,但创建 GUI 的方法也被调用,因为该类Test是由 JVM 加载的。当 JVM 加载一个类时——并且该类有一个静态块——静态块将首先被调用。Test 的静态块现在调用该executingClass方法并且将创建 GUI(但 Test2 只想调用doSomethingElse.

最后,您不应该使用静态块来初始化您的应用程序:

  1. 静态块应该只用于创建该类需要的东西。
  2. main也需要方法。
  3. 它可能会产生不可预知的影响。
于 2013-04-07T15:05:10.750 回答
0

这是一个java程序的启动方法:

public static void main(String[] args){
    ...
}
于 2013-04-07T14:36:24.587 回答
0

如果一个类包含静态块和main方法() jvm会先执行静态块然后再执行main方法。但是如果你没有提到类中的静态块并且类只包含 main 方法,那么 jvm 只从 main 方法开始执行。

于 2019-05-28T13:14:24.133 回答