Java父子类加载顺序
加载顺序
先上桌结论:
父类静态属性(成员变量) > 父类静态代码块 > 子类静态属性 > 子类静态代码块 > 父类非静态属性 > 父类非静态代码块 > 父类构造器 > 子类非静态属性 > 子类非静态代码块 > 子类构造器
这么长怎么记呀?!
这里帮大家小结几个特点:
- 静态属性和代码块,当且仅当该类在程序中第一次被 new 或者第一次被类加载器调用时才会触发(不考虑永久代的回收)。也正是因为上述原因,类优先于对象 加载/new,即 静态优先于非静态。
- 属性(成员变量)优先于构造方法,可以这么理解,加载这整个类,需要先知道类具有哪些属性,并且这些属性初始化完毕之后,这个类的对象才算是完整的。另外,非静态代码块其实就是对象 new 的准备工作之一,算是一个不接受任何外来参数的构造方法。因此,属性 > 非静态代码块 > 构造方法。
- 有趣的是,静态部分(前4个)是父类 > 子类,而 非静态部分(后6个)也是父类 > 子类。
- 另外容易忽略的是,非静态代码块在每次 new 对象时都会运行,可以理解:非静态代码块是正式构造方法前的准备工作(非静态代码块 > 构造方法)。
测试代码如下:
/**
* @author Lean.Li
* @date 2018/10/15
*/
public class Main {
static class A {
static Hi hi = new Hi("A");
Hi hi2 = new Hi("A2");
static {
System.out.println("A static");
}
{
System.out.println("AAA");
}
public A() {
System.out.println("A init");
}
}
static class B extends A {
static Hi hi = new Hi("B");
Hi hi2 = new Hi("B2");
static {
System.out.println("B static");
}
{
System.out.println("BBB");
}
public B() {
System.out.println("B init");
}
}
static class Hi {
public Hi(String str) {
System.out.println("Hi " + str);
}
}
public static void main(String[] args) {
System.out.println("初次 new B:");
B b = new B();
System.out.println();
System.out.println("第二次 new B:");
b = new B();
}
}
运行结果如下:
初次 new B:
Hi A
A static
Hi B
B static
Hi A2
AAA
A init
Hi B2
BBB
B init
第二次 new B:
Hi A2
AAA
A init
Hi B2
BBB
B init

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Java SPI机制
0 很久没有写博客了,这一两个月基本上就是找工作——离职——入职。到今天基本上入职近一个月了,在看公司代码的时候发现使用到了SPI技术来进行解耦,这篇文章主要写下SPI的基本使用。 1. SPI基本概念 SPI的全名叫Service Provider Interface,其主要是针对厂商或者插件的。我的理解就是上层提供接口,我们需要去实现,并且上层只需要根据我们的配置文件即可拿到我们的实现类(反射获取)。 2. SPI代码 先看下目录结构: 目录结构 2.1 接口定义 定义一个接口IStudy: public interface IStudy { void study(); } 2.2 编写实现类 编写两个实现类NormalStudy和SuperStudy: public class NormalStudy implements IStudy { @Override public void study() { System.out.println("normal study"); } } public class SuperStudy implements IStudy { @Over...
-
下一篇
24、【支付模块开发】——将下载下来的支付宝API Demo运行在web上
上一篇23、【支付模块快发】——Java对接支付宝步骤(沙箱环境)我们讲解了怎么配置相关配置文件,下面我们调试一下怎么使其在IDEA的web项目中跑起来,然后在浏览器中进行操作 我们用IDEA导入支付宝对接Demo的是时候发现不能运行,下面讲解一下怎么在IDEA中运行支付宝Demo并且在浏览器中运行出来~ 首先我们点击IDEA上面的这个按钮: image.png 或者点击: Project Structure... image.png 然后按图中操作: image.png 下一步选中我们的项目: image.png 然后点击下方的Apply... 下一步: image.png 选择我们的项目: image.png 点击OK: image.png 点击Add Configuration image.png image.png image.png image.png Apply... image.png 乌拉,下面就可以点击下面的运行按钮啦~ image.png 测试我们的二维码支付: image.png 填写参数: image.png 确认之后就会跳转到二维码啦: image.png i...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装Nodejs环境
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL数据库在高并发下的优化方案
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果