The saddest thing is|

柒木木木

园龄:2年8个月粉丝:9关注:0

代码块(普通代码块和静态代码块)

创建一个子类对象时(继承关系),他们的静态代码块,静态属性初始化,普通代码块,普通属性初始化,构造方法的调用顺序如下

1. 父类的静态代码块和静态属性(优先级一样,按定义顺序执行)
2. 子类的静态代码块和静态属性(优先级一样,按定义顺序执行)
3. 父类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)
4. 父类的构造方法
5. 子类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)
6. 子类的构造方法/面试题

代码详情

package com.dz.block;
public class Block {
/**
* 代码块
*/
public static void main(String[] args) {
/*步骤说明:
开始步:(1.0)进行类的加载
1.1 先加载父类A02,
1.2 再加载B02子类
(2.0)创建对象
2.1从子类的构造器开始
*/
new B02();
}
}
class A02 {
private static int n1 = getVal01();//静态属性的初始化 //第一步(01)
static {
System.out.println("A02中的静态代码块被调用了"); //第二步
}
{
System.out.println("A02中的普通代码块被调用了"); //第五步(04)最终结果
}
public int n3 = getVal02();//普通属性的初始化 //第六步(01)
public static int getVal01() {
System.out.println("getVal01"); //第一步(02)最终结果
return 10;
}
public int getVal02() {
System.out.println("getVal02"); //第六步(02)最终结果
return 10;
}
public A02() {
//构造器默认隐藏了下面两个:
//super() //第五步(02)调用父类构造器,
//普通代码和普通属性的初始化.····· //第五步(03)谁在前先执行谁
System.out.println("A02的构造器被调用"); //第七步
}
}
class B02 extends A02 {
private static int n3 = getVal03(); //第三步(01)
static {
System.out.println("B02中的静态代码块被调用了"); //第四步
}
public int n4 = getVal04(); //第八步(02)
{
System.out.println("B02中的普通代码块被调用了"); //第九步
}
public static int getVal03() {
System.out.println("getVal03"); //第三步(02)最终结果
return 10;
}
public int getVal04() {
System.out.println("getVal04"); //第八步(03)最终结果
return 10;
}
public B02() {
//构造器默认隐藏了下面两个:
//super() //第五步(01)调用父类A02中的构造器
//普通代码和普通属性的初始化.····· //第八步(01)谁在前先执行谁
System.out.println("B02的构造器被调用"); //第十步
}
}

本文作者:柒木木木

本文链接:https://www.cnblogs.com/qimu666/articles/16567017.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   柒木木木  阅读(89)  评论(2编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起