博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java类的初始化顺序
阅读量:6932 次
发布时间:2019-06-27

本文共 1841 字,大约阅读时间需要 6 分钟。

做Java开发的,起码要知道类的初始化顺序,因为这样你才知道编写的代码运行到了那里。

img_2d9f75e7088238efb0ff94c2b9653e45.png
与文无关

一段代码

public class BaseTest {    private String baseName = "baseName";    static {        System.out.println("父类静态代码块");    }    public BaseTest() {        System.out.println("父类构造方法");        callName();    }    public void callName(){        System.out.println(baseName);    }    static class Sub extends BaseTest{        private String baseName = "subName";        public Sub() {            System.out.println("子类构造方法");        }        static {            System.out.println("子类静态代码块");        }        @Override        public void callName() {            System.out.println(baseName);   //输出为null            super.callName();   //输出baseName,baseStatic        }    }    public static void main(String[] args) {        Sub sub = new Sub();    }}

以上代码运行的结果如下:

父类静态代码块子类静态代码块父类构造方法nullbaseName子类构造方法

为什么在子类中直接调用 System.out.println(baseName),输出为null呢?

在创造派生类的过程中首先创建基类对象,然后才能创建派生类。创建基类即默认调用BaseTest()方法,在方法中调用callName()方法,由于派生类中存在此方法,则被调用的callName()方法是派生类中的方法,此时派生类还未构造,所以变量baseName的值为null

静态代码块的初始化

public class StaticTest {    static {        System.out.println("父类的静态代码块");    }    public static String str = getStr();    private static String getStr() {        System.out.println("父类的静态方法");        return "str1";    }    public StaticTest() {        System.out.println("父类构造方法");    }    static class SubStatic extends StaticTest{        static {            System.out.println("子类的静态代码块");        }        public static String str1 = getStr1();        private static String getStr1() {            System.out.println("子类的静态方法");            return "str1";        }        public SubStatic() {            System.out.println("子类构造方法");        }    }    public static void main(String[] args) {        new SubStatic();    }}

运行结果:

父类的静态代码块父类的静态方法子类的静态代码块子类的静态方法父类构造方法子类构造方法

最后

动手操作,查看了下类的初始化过程。

转载地址:http://uemjl.baihongyu.com/

你可能感兴趣的文章
Exchange 2013 SP1部署系列15:配置OWA IIS重定向
查看>>
tomcat服务器
查看>>
使用mailutils发邮件
查看>>
博为峰Java技术题 ——JavaSE Java Swing在顶层容器中添加组件Ⅰ
查看>>
Android设计模式之模板方法模式
查看>>
linux 服务器I/O读写测试
查看>>
Python 用 os.walk 遍历目录
查看>>
腾讯云Badjs镜像使用入门
查看>>
vim批量注释方法
查看>>
《疯狂java讲义2》读书笔记——面向对象的三大特性之一:多态
查看>>
十进制转二进制
查看>>
如何愉快开始在github玩耍——项目首页or个人博客
查看>>
交换是网络网关设在汇聚还是核心?
查看>>
ubuntu下的wireshark编译安装
查看>>
input输入框 只给输入数字,正则表达 手机 邮箱
查看>>
多学一点(一)——在 Linux 下安装 JDK 和 Tomcat
查看>>
单例模式
查看>>
python编程入门----numpy中的数学函数与算数函数
查看>>
记录一款好用的JS,以后好自己用
查看>>
MySQL 共享锁和排他锁
查看>>