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是静态成员变量,
使用一个类之前需要先对这个类进行加载,
类加载时会执行静态成员变量的赋值和静态代码块里的内容(执行的先后顺序与代码顺序有关)
所以会先执行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方法)