class Insect{
private int i = 9;
protected int j;
Insect(){
j = 39;
}
private static int x1 = printInit("static Insect.x1 initialized");
static int printInit(String s){
System.out.println(s);
return 47;
}
}
类加载的顺序应该是1、static属性;2、static方法。
那么应该是private static int x1先执行,然后执行static int printInit方法。
但是属性定义时需要调用printInit方法,这是怎么调用的?
public class Study23 {
private static int x1 = printInit("static Insect.x1 initialized");
static int printInit(String s){
//输出 Test Message
System.out.println(msg);
System.out.println(s);
return 47;
}
static String msg = "Test Message";
}
可以看到static变量 msg 定义在 printInit方法之后,但是我们却在之前引用了它,而且代码并没有报错。其实static类型的变量以及方法是程序运行期间一直存在的,是类级别的变量。所以static变量及方法间引用是不区分先后顺序的。jvm译时会将static变量以及方法放在公共区域,属于平行关系。
可以看看我写的static文章
有关static的用法总结详解:https://blog.csdn.net/u012011079/article/details/115799789
(欢迎各位大佬斧正,里面包含了设计过程的static、面向对象的static、类模板含有static的解析)