Java 初始化顺序
来源:互联网 发布:linux显示时间命令 编辑:程序博客网 时间:2024/06/12 00:17
首先,我们先看一个例子:
class Parent {static {System.out.println("parent_static_{}");}public String a = getStrParent();{System.out.println("parent_{}");}public Parent() {System.out.println("parent_construct");}public String getStrParent() {System.out.println("parent_method");return "Parent";}}class Child extends Parent {{System.out.println("child_{}");}static {System.out.println("child_static_{}");}String a = getStrChild();public Child() {System.out.println("Child_construct");}public String getStrChild() {System.out.println("child_method");return "Child";}}public class MainClass {int a;{System.out.println("Mainclass_{}");}static {System.out.println("Mainclass_static_{}");}public MainClass() {System.out.println("MainClass_construct");}public static void main(String[] args) {Parent parent = new Child();}}运行结果:
Mainclass_static_{}
parent_static_{}
child_static_{}
parent_method
parent_{}
parent_construct
child_{}
child_method
Child_construct
说明首先是包含
public static void main(String[] args)函数的类中的静态块的初始化,然后是这个函数中的变量进行初始化。这里的Child 类继承Parent类,初始化的顺序是:父类的静态块-》子类的静态块-》父类的非静态块或非静态变量(这两种的等级相同,根据代码的先后顺序而定)-》父类的构造函数-》子类的非静态块或非静态变量(这两种的等级相同,根据代码的先后顺序而定)-》子类的构造函数
如果类中含有静态变量,那顺序又如何?这里,让我们再看一个例子
class Parent {static {System.out.println("parent_static_{}");}public String a = getStrParent();{System.out.println("parent_{}");}public Parent() {System.out.println("parent_construct");}public static String getStrParent() {//System.out.println("parent_method");return "Parent";}}class Child extends Parent {{System.out.println("child_{}");}static {System.out.println("child_static_{}");}static String a = getStrChild();//定义了一个静态变量,并用函数给它初始化;public Child() {System.out.println("Child_construct");}public static String getStrChild() {//System.out.println("child_static_method");return "Child";}}public class MainClass {int a;{System.out.println("Mainclass_{}");}static {System.out.println("Mainclass_static_{}");}public MainClass() {System.out.println("MainClass_construct");}public static void main(String[] args) {Parent parent = new Child();}}
运行结果:
Mainclass_static_{}
parent_static_{}
child_static_{}
child_static_method
parent_method
parent_{}
parent_construct
child_{}
Child_construct
以上的运行结果中:child_static_method是由于定义了静态变量而又调用了函数给它初始化输出的。说明静态的变量的初始化和静态的块应该是一个优先级的。
综上,Java 初始化顺序如下:
首先是包含
public static void main(String[] args)函数的类中的静态块的初始化,然后是这个函数中的变量进行初始化。这里的Child 类继承Parent类,初始化的顺序是:父类的静态块或静态变量(这两种的等级相同,根据代码的先后顺序而定)-》子类的静态块或静态变量(这两种的等级相同,根据代码的先后顺序而定)-》父类的非静态块或非静态变量(这两种的等级相同,根据代码的先后顺序而定)-》父类的构造函数-》子类的非静态块或非静态变量(这两种的等级相同,根据代码的先后顺序而定)-》子类的构造函数
1 0
- java-java初始化顺序
- Java初始化顺序
- JAVA 初始化顺序
- JAVA初始化顺序
- Java程序初始化顺序
- Java初始化顺序
- [java]初始化顺序
- java变量初始化顺序
- java 初始化顺序
- Java初始化的顺序
- JAVA对象初始化顺序
- java对象初始化顺序
- JAVA 类初始化顺序
- JAVA初始化顺序
- Java 静态初始化顺序
- Java类初始化顺序
- java初始化顺序
- JAVA初始化顺序
- MySql 基础
- 关于链表的理解(不定期更新)
- 深度学习原理总结
- MSChart常用图表注解
- Apache负载均衡配置详解
- Java 初始化顺序
- message sent to deallocated instance
- 通过分析文章,找到同一领域的人——貌似是个不错的点子
- 策略模式例子
- 两台设备连接在同一Wi-Fi不能通信问题解决
- DFS.H4403.等式成立
- peachfuzz
- unity网格合并后位置会变
- Intent传递数据