java只有一个类,main和static 变量谁先运行?请各位指点。谢谢!

import static net.mindview.util.Print.*;

class Go {
    static String s1 = "run";
    static String s2, s3;
    static {
        s2 = "drive car";
        s3 = "fly plane";
        print("s2 & s3 initialized");
    }
    static void how() {
       print(s1 + " or " + s2 + " or " + s3);
    }
   Go() { print("Go()"); }  
}

public class ExplicitStaticEx {
public static void main(String[] args) //main函数先运行还是static Go g1 = new Go();和static Go g2 = new Go();先运行?
{                                                       
    print("Inside main()");
    Go.how();
    print("Go.s1: " + Go.s1);       
}
static Go g1 = new Go();
static Go g2 = new Go();
 }

全局对象的创建优先于入口函数的执行。

你这个不是一个类,这个不是两个类吗?

因为在类ExplicitStaticEx 中拥有成员变量g1和g2;
那么当类加载器在装载ExplicitStaticEx类的时候,会装载refer到的Go类;
而类Go具有静态代码块,所以会优先执行静态代码块;
如果没有成员变量g1和g2,那么将在执行到Go.how()时才装载类Go,这时候才会执行静态代码块。

如果有帮助,希望结帖。

static Go g1 = new Go();和static Go g2 = new Go();先运行吧;static是加载类的时候就加载运行的,而main只是类执行的一个入口。

s2 & s3 initialized
Go()
Go()
Inside main()
run or drive car or fly plane
Go.s1: run

对于ExplicitStaticEx 类来说,g1和g2是静态成员变量,
使用一个类之前需要先对这个类进行加载,
类加载时会执行静态成员变量的赋值和静态代码块里的内容(执行的先后顺序与代码顺序有关)
所以会先执行static Go g1 = new Go();和static Go g2 = new Go();
而使用Go这个类也是需要先加载的,
因此会先执行Go类里的
static String s1 = "run";
static String s2, s3;
static {
s2 = "drive car";
s3 = "fly plane";
print("s2 & s3 initialized");
}
然后再执行new Go() 两次,即 g1 = new Go()和 g2 = new Go()
最后执行ExplicitStaticEx里的main方法,(在eclipse里run ExplicitStaticEx这个类就是调用它的main方法)

静态变量先加载,然后执行main

静态变量先加载,然后执行main

你这个问题是错误的,执行和加载是两个概念,加载进来的意思是把方法或变量已经放到内存里了,处于可以调用的状态,但如果没有对象或类名去调用的话,这些加载进来的静态方法是不会自己执行的,执行的意思是系统从上到下开始一行一行的把代码跑起来,加载仅仅是把他们放入内存中,只有加载并调用才能让程序跑起来