JAVA中静态代码块,构造代码块,构造函数的加载顺序
来源:互联网 发布:jquery 二元数组 编辑:程序博客网 时间:2024/05/18 01:04
静态代码块:
在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。
//如果类中包含多个静态代码块,那么将按照”先定义的代码先执行,后定义的代码后执行”。
//注意:1 静态代码块不能存在于任何方法体内。2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。
构造代码块
直接在类中定义且没有加static关键字的代码块称为{}构造代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。
第一种:
//加载顺序:静态代码块 > 构造代码块 > 构造函数
其中 静态代码块只执行一次,构造代码块在每次创建对象时都会执行
class Test1{ public static void main(String[] args) { System.out.println("Hello JAVA!"); new GouZao1(); new GouZao1(); System.out.println("------------"); new GouZao2(); new GouZao2(); }}class GouZao1{ GouZao1(){ System.out.println("构造1 的 构造函数"); } static{ System.out.println("构造1 的 静态代码块"); } { System.out.println("构造1 的 构造代码块"); }}class GouZao2{ GouZao2(){ System.out.println("构造2 的 构造函数"); } static{ System.out.println("构造2 的 静态代码块"); } { System.out.println("构造2 的 构造代码块"); }}/*打印结果:Hello JAVA!构造1 的 静态代码块构造1 的 构造代码块构造1 的 构造函数构造1 的 构造代码块构造1 的 构造函数------------构造2 的 静态代码块构造2 的 构造代码块构造2 的 构造函数构造2 的 构造代码块构造2 的 构造函数*/
第二种:子父类中的静态代码块,构造代码块,构造函数的加载顺序。
//加载顺序:父类静态代码块> 子类静态代码块 > 父类构造代码块 > 父类构造函数 > 子类构造代码块 > 子类构造函数
class Test2{ public static void main(String[] args) { Zi z = new Zi(); }}class Fu { public Fu() { System.out.println("父类 构造函数"); } static { System.out.println("父类 静态代码块"); } { System.out.println("父类 构造代码块"); }}class Zi extends Fu{ public Zi() { System.out.println("子类 构造函数"); } static { System.out.println("子类 静态代码块"); } { System.out.println("子类 构造代码块"); }}/*输出结果父类 静态代码块子类 静态代码块父类 构造代码块父类 构造函数子类 构造代码块子类 构造函数*/
但子父类中 使用类名调用时有一点要注意
class Test3{ public static void main(String[] args) { System.out.println(Zi.value); //System.out.println(Zi.v); } }class Fu { static int value = 6; static { System.out.println("Fu静态代码块"); } { System.out.println("父类构造代码块"); }}class Zi extends Fu{ static int v = 9; static { System.out.println("Zi静态代码块"); }}/*打印结果:Fu静态代码块6*/
可以看出,子类静态代码块并未执行。
只有在执行注释的System.out.println(Zi.v); 语句时才会执行
执行的结果为:
Fu静态代码块 6 Zi静态代码块 9
如果将System.out.println(Zi.value);注释掉,只执行System.out.println(Zi.v);的话,输出结果为:
Fu静态代码块 Zi静态代码块 9
0 0
- JAVA中静态代码块,构造代码块,构造函数的加载顺序
- Java中代码块,静态代码块和构造函数的加载顺序
- java中代码块的执行顺序--静态代码块,构造器,普通代码块,构造块,main主函数
- JAVA中父类与子类静态代码块、非静态代码块、构造函数的加载顺序
- Java中构造函数、构造代码块、静态代码块等的执行顺序问题
- Java中静态代码块、构造代码块构造函数的执行顺序
- 举例说明java中静态代码块、非静态代码块、构造函数的执行顺序
- Java中静态代码块、非静态代码块和构造函数的执行顺序
- Java中静态代码块、非静态代码块、构造函数的执行顺序与作用
- java中静态代码块,非静态代码块,构造函数之间的执行顺序
- JAVA继承关系中静态代码块、非静态代码块,构造函数的执行顺序
- Java中静态代码块、非静态代码块以及构造函数的初始化顺序
- java一般代码块,构造块,构造函数,静态代码块的执行顺序实践
- java中静态代码块、代码块、构造方法的加载顺序
- 【26】静态代码块、构造代码块和构造函数的特点及加载顺序
- 静态代码块、构造代码块以及构造函数的加载顺序
- 静态代码块、构造代码块以及构造函数的加载顺序
- java 静态代码块 代码块 构造函数执行顺序
- Android UI 实战之圆形ImageView
- HDU 2092 整数解
- O ______Block
- 小白学开发(iOS)OC_类的本质(2015-07-27)
- 类设计回顾
- JAVA中静态代码块,构造代码块,构造函数的加载顺序
- Scala学习第一天 scala开发环境搭建和helloword解析
- 2008反间谍软件如何显示出来
- leetcode 241 Different Ways to Add Parentheses
- 面试:实现内存复制函数
- 通过网页版邮箱的实现“联系我们”
- Lintcode 比较字符串
- Java拆解字符串(包括中文)
- 参数服务器在分布式深度学习的应用