Java类的初始化顺序
来源:互联网 发布:销售数据分析 职业 编辑:程序博客网 时间:2024/05/17 17:54
一:先不考虑继承。一个类中初始化的顺序规则是:
(1)静态变量>普通变量>构造器。
(2)变量定义的顺序决定初始化的顺序。
(3)静态变量和静态块是一样的,变量和非静态块是一样的。即可以把静态块看作是静态变量,把非静态块看作是
变量。
执行静态代码块
静态变量--(3)------cccccccccccccc
静态变量--(4)------cccccccccccccc
变量--(1)------cccccccccccccc
变量--(2)------cccccccccccccc
执行非静态代码块
父类静态变量1------cccccccccccccc
父类--静态初始化块
父类静态变量2------cccccccccccccc
子类静态变量1------cccccccccccccc
子类--静态初始化块
子类静态变量2------cccccccccccccc
父类--变量1------cccccccccccccc
父类--初始化块
父类--变量2------cccccccccccccc
父类--构造器
子类--变量1------cccccccccccccc
子类--初始化块
子类--变量2------cccccccccccccc
子类--构造器
(1)静态变量>普通变量>构造器。
(2)变量定义的顺序决定初始化的顺序。
(3)静态变量和静态块是一样的,变量和非静态块是一样的。即可以把静态块看作是静态变量,把非静态块看作是
变量。
public class D { /**D的构造器**/ public D(){ System.out.println("D的构造器"); } /**D静态代码块**/ static{ System.out.println("执行静态代码块"); } /**D变量**/ private C c1=new C("变量--(1)"); private C c2=new C("变量--(2)"); /**D非静态代码块**/ { System.out.println("执行非静态代码块"); } /**D的静态变量**/ private static C c3=new C("静态变量--(3)"); private static C c4=new C("静态变量--(4)"); public static void main(String [] args){ new D(); } } class C{ public C(String s){ System.out.println(s+"------cccccccccccccc"); } }
执行静态代码块
静态变量--(3)------cccccccccccccc
静态变量--(4)------cccccccccccccc
变量--(1)------cccccccccccccc
变量--(2)------cccccccccccccc
执行非静态代码块
D的构造器
二:如果有继承的话。那么初始化的顺序规则是:
(1)父类的初始化>子类的初始化
(2)静态变量>普通变量>构造器。
(3)变量定义的顺序决定初始化的顺序。
(4)静态变量和静态块是一样的,变量和非静态块是一样的。即可以把静态块看作是静态变量,把非静态块看作是
变量。
class C{ public C(String s){ System.out.println(s+"------cccccccccccccc"); } } class A { /***构造器***/ public A() { System.out.println("父类--构造器"); } /***** 静态变量****/ public static C c3=new C("父类静态变量1"); /***** 静态初始化块****/ static { System.out.println("父类--静态初始化块"); } public static C c4=new C("父类静态变量2"); /***** 变量****/ public C c1 = new C("父类--变量1"); /***** 始化块****/ { System.out.println("父类--初始化块"); } public C c2 = new C("父类--变量2"); } public class B extends A { /***构造器***/ public B() { System.out.println("子类--构造器"); } /***** 静态变量****/ public static C c1=new C("子类静态变量1"); /***** 静态初始化块****/ static { System.out.println("子类--静态初始化块"); } public static C c2=new C("子类静态变量2"); /***** 变量****/ public C c3 = new C("子类--变量1"); /***** 始化块****/ { System.out.println("子类--初始化块"); } public C c4 = new C("子类--变量2"); public static void main(String[] args) { new B(); } }
父类静态变量1------cccccccccccccc
父类--静态初始化块
父类静态变量2------cccccccccccccc
子类静态变量1------cccccccccccccc
子类--静态初始化块
子类静态变量2------cccccccccccccc
父类--变量1------cccccccccccccc
父类--初始化块
父类--变量2------cccccccccccccc
父类--构造器
子类--变量1------cccccccccccccc
子类--初始化块
子类--变量2------cccccccccccccc
子类--构造器
注:父类静态变量->子类静态变量->父类实例变量->父类构造器->子类实例变量->子类构造器
- java类的初始化顺序
- Java类的初始化顺序
- Java类的初始化顺序
- Java类的初始化顺序
- Java类的初始化顺序
- java类初始化的顺序
- java类的初始化顺序
- Java类的初始化顺序
- java 类的初始化顺序
- Java类的初始化顺序
- java类的初始化顺序
- java类的初始化顺序
- JAVA类的初始化顺序
- Java类的初始化顺序
- java类的初始化顺序
- java 类的初始化 顺序
- java类的初始化顺序
- java类的初始化顺序
- 总是优先级最高的在执行
- 轻松实现Apache,Tomcat集群和负载均衡
- javascript学习笔记
- 数据复制的并发控制
- oracle imp导入数据 出现 IMP-00017: following statement failed with ORACLE error 603:
- Java类的初始化顺序
- MySQL 语句命令的使用
- PDF 编辑工具
- tomcat绿色版 安装
- 我们应该清楚的
- php程序提速小结
- EXCEL中如何取消显示科学计数法
- Hadoop下进行反向索引(Inverted Index)操作
- NHibernate Cookbook 学习笔记 6