(一)类加载的情况:
1、创建对象实例的时候(new)
class A{ //静态代码块 static{ System.out.println("A 的静态代码块1被执行..."); } }
用对象实例(new)
A a=new A();
输出的结果是:A 的静态代码块1被执行...
2、创建子类对象实例,父类对象也会被加载
class B{ //静态代码块 static{ System.out.println("B 的静态代码块1被执行..."); } } class A extends B{ //静态代码块 static{ System.out.println("A 的静态代码块1被执行..."); } }
A a2=new A();
输出的结果是:B 的静态代码块1被执行...
A 的静态代码块1被执行...
3、使用类的静态成员(静态属性,静态方法)的时候
class Cat{ public static int n1=999;//静态的属性 //静态代码块 static{ System.out.println("Cat 的静态代码块1被执行..."); } }
System.out.println(Cat.n1);
输出的结果是:Cat 的静态代码块1被执行...
999 (说明:先执行静态代码块,在执行静态成员)
4、静态代码块在类加载的时候,只能被执行一次//普通代码块,类对象创建一次,调用一次
class D{
//静态代码块
static{
System.out.println("D 的静态代码块1被执行...");
}
//普通代码块,在new对象时,被调用,而且是每一次创建一个对象,就会被调用一次
{
System.out.println("D 的普通代码块....");
}
public static int n1=8888;//静态属性
}
D d = new D();
D d1 = new D();
输出的结果是:D 的静态代码块1被执行...
D 的普通代码块....
D 的普通代码块....
5、只是使用类的静态代码块,普通代码块并不会执行
class D{
//静态代码块
static{
System.out.println("D 的静态代码块1被执行...");
}
//普通代码块,在new对象时,被调用,而且是每一次创建一个对象,就会被调用一次
{
System.out.println("D 的普通代码块....");
}
public static int n1=8888;//静态属性
}
System.out.println(DD.n1);//静态代码块一定会被执行
输出的结果是: DD 的静态代码块1被执行...
8888
最后
以上就是动人画板最近收集整理的关于JAVA static的类加载情况 详解的全部内容,更多相关JAVA内容请搜索靠谱客的其他文章。
发表评论 取消回复