类初始化顺序--如果类中包含自身静态属性
来源:互联网 发布:linux文件重命名 编辑:程序博客网 时间:2024/06/05 20:31
举个基本的例子来说明类初始化的顺序:
public class MyMain { public static void main(String args[]) { Father f = new Son(); }}class Father { static int a = 1; //static Father father = new Father(); //如果打开注释,执行时将此代码放到下面的static块中 static { System.out.println("print in father"); } public Father() { System.out.println("Father Construct"); }}class Son extends Father { static int b=1; //static Son son = new Son(); static { System.out.println("print in son"); } public Son() { System.out.println("Son Construct"); }}上面例子的执行结果为:
print in fatherprint in sonFather ConstructSon Construct
从结果看到执行顺序为:父类静态属性--父类静态代码块--子类静态属性--子类静态代码块--父类构造函数--子类构造函数
但是如果把注释打开,也就是类中包含自身的属性,且为静态的,这样执行结果为:
Father Constructprint in fatherFather ConstructSon Constructprint in sonFather ConstructSon Construct从结果中可以看到执行顺序为:父类静态属性--父类构造函数--父类静态代码块--子类静态属性--子类构造函数--子类静态代码块--父类构造函数--子类构造函数
分析:从上的例子可以看出,如果类中有自身对象且为静态的,限制性构造函数,并不是一味的先执行静态的属性,构成递归。
如果去属性的static,那么这样就构成递归了,可以用上面的里试一下就看到结果了。
0 0
- 类初始化顺序--如果类中包含自身静态属性
- Java类中静态属性、静态语句块、属性、初始化语句块、构造函数之间的执行顺序
- Java类中属性的初始化顺序
- Java类静态属性、静态块、非静态属性、非静态块、构造函数在初始化时的执行顺序
- Java类静态属性、静态块、非静态属性、非静态块、构造函数在初始化时的执行顺序
- Java类静态属性、静态块、非静态属性、非静态块、构造函数在初始化时的执行顺序
- 有关于在Java 类的静态初始化块中创建一个自身实例的问题。
- Java类、类属性、静态块、实例、实例属性、实例块初始化顺序
- swift中一个类定义一个属性必须初始化,如果不想初始化可以加?
- 静态类、静态方法、静态代码块及初始化顺序
- java 类的加载、链接和初始化(静态属性的加载顺序)
- java类 静态实例初始化顺序
- java类中静态域、块,非静态域、块,构造函数的初始化顺序(回钦波)
- java类中静态域、块,非静态域、块,构造函数的初始化顺序(回钦波)
- java类中静态域、块,非静态域、块,构造函数的初始化顺序
- java 中类初始化,构造方法,静态成员变量,静态块的加载顺序
- Java类中字段和方法的初始化顺序(包含static)
- 为什么类的定义中不能包含其自身类型,但是能包含其自身的指针或引用类型
- NSString 与 NSData 之间的互转 NSData 与 UIImage 之间互转 NSDate 与 NSString 之间的互转
- 使用极客标签二维码服务快速生成二维码
- java 调用js 方法库进行简单的数学表达式的运算
- asp.net mvc5 与图片
- 修改navigationController返回按钮颜色和文字
- 类初始化顺序--如果类中包含自身静态属性
- 路由规则
- JSP自定义标签必知必会
- AndroidStudio 设置自动导包 ——诺诺"涂鸦"记忆
- java实现类似与redis的hash存储操作
- 使用poi通过excel模板导出excel数据
- ios9 状态栏颜色设置
- STL_算法_局部排序(partial_sort、partial_sort_copy)
- 动画瞎写