您的位置:首页 > 编程语言 > Java开发

Java静态变量 静态代码块 主函数 成员变量 构造代码块 构造函数的执行顺序

2017-10-14 19:18 609 查看
一.static1.静态代码块:  代码在项目启动的时候就执行,这种代码是主动执行的,而且只执行一次。他常用做类属性的初始化。static{}2.静态方法:  在类加载的时候就已经加载,在类名调用时才执行,这种代码是被动执行的。  注意:静态方法里只能调用同类中其他静态成员;            不能以任何方式引用this和super关键字,因为静态方法使用前不需创建任何对象实例,所以就不存在this。3.静态变量:  属于整个类的变量而不是某个对象,任何方法都不能声明static变量。二.类的加载1.什么时候加载类的加载是通过类加载器(Classloader)完成的。两种情况加载类:只要有其它类引用了它就加载;等到类初始化发生的时候才加载。应该跟不同jvm有关 静态加载:new ClassName();编译时就提供 动态加载:Class.forName("ClassName"); 编译时可缺席2.那什么时候初始化 加载完类后类的初始化就会发生,会初始化所有静态成员。4.加载顺序 加载类时初始化顺序:按顺序加载对象的静态属性--->再加载静态代码块--->加载类的主函数 对象实例化时加载顺序:加载对象的非静态属性--->非静态代码块--->构造方法 有父类的情况:加载父类(初始化步骤)-->加载子类(初始化)-->加载父类(实例化)-->加载子类(实例化)
public class Test {
public static int k = 0;
public static Test t1 = new Test("t1");
public static Test t2 = new Test("t2");
public static int i = print("i");
public static int n = 99;
public int j = print("j");
{
print("构造块");
}
static {
print("静态块");
}
public Test(String str) {
System.out.println((++k) + ":" + str + "   i=" + i +
4000
"    n=" + n);
++i;
++n;
}
public static int print(String str) {
System.out.println((++k) + ":" + str + "   i=" + i + "    n=" + n);
++n;
return ++i;
}

public static void main(String args[]) {
Test t = new Test("init");
}
// 加载顺序   静态变量、成员变量加载,初始化为零。执行顺序  静态变量>静态代码块>主函数(静态方法)>成员变量>构造代码块>构造函数
}
 *  1.顺序加载类的静态属性(非静态不管) *  这里加载的是:public static int k = 0; *  然后加载:public static StaticTest t1 = new StaticTest("t1"); *  因为此处进行了类的实例化所以 *  1.1加载类的非静态属性 *  这里是:public int j = print("j"); 》》》1:j i=0 n=0 *  1.2顺序加载类中的非static代码块(static暂时不加载) *  这里是:print("构造快");和print("静态块");》》》2:构造快 i=1 n=1
   3:静态块 i=2 n=2
 *  1.3加载类的构造方法 *  这里是:public StaticTest(String str)》》》4:t1 i=3 n=3 (一个静态属性的实例就完成了) *  然后加载:public static StaticTest t2 = new StaticTest("t2"); 因为进行了类的实例化所以重复(1.1-1.3)》》》5:j i=4 n=4
   6:构造快 i=5 n=5
   7:静态块 i=6 n=6
   8:t2 i=7 n=7
 *  然后加载:public static int i = print("i");》》》9:i i=8 n=8 *  然后加载:public static int n = 99; 注意现在n为99了 *  2.如果有static代码块,在这里先加载,这个里面没有 *  3.加载主函数 *  这里加载的是:StaticTest t = new StaticTest("init"); 因为进行了类的实例化所以重复1.1-1.3》》》10:j i=9 n=99
   11:构造快 i=10 n=100
   12:静态块 i=11 n=101
   13:init i=12 n=102
转载自http://blog.sina.com.cn/s/blog_1552a7b490102w3xk.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐