Java程序从哪一行开始执行?这是主要方法吗?



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

程序输出:

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

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

看这个示例代码:

public class Test {
    private static Object obj = new Object();
    public static void main(String[] args) {
        System.out.println("test");
    }
}

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

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

public static void main(String[] args){
    ...
}

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

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. 还需要main方法。
  2. 它可能有不可预测的影响。

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

相关内容

  • 没有找到相关文章

最新更新