类加载顺序
来源:互联网 发布:同声传译软件 编辑:程序博客网 时间:2024/06/05 19:02
若不用new 则只加载静态修饰的内容
静态变量>静态块>mian
public class Father { int i; static int staticI; static {System.out.println("Father 静态代码块1"+" (++staticI)="+(++staticI));} {System.out.println("Father 非静态代码块1"+" i="+i+" (++staticI)="+(++staticI));} public Father() {System.out.println("Father 构造器");} {System.out.println("Father 非静态代码块2"+" i="+i+" (++staticI)="+(++staticI));} static {System.out.println("Father 静态代码块2"+" (++staticI)="+(++staticI));} public static void main(String[] args) {System.out.println("main 方法"+" (++staticI)="+(++staticI));} {System.out.println("Father 非静态代码块3"+" i="+i+" (++staticI)="+(++staticI));} static {System.out.println("Father 静态代码块3"+" (++staticI)="+(++staticI));}}
运行结果
Father 静态代码块1 (++staticI)=1Father 静态代码块2 (++staticI)=2Father 静态代码块3 (++staticI)=3main 方法 (++staticI)=4
静态内容>非静态变量>非静态块>构造器
将main也归纳到静态内容
将上面代码的main改造:
public static void main(String[] args) { System.out.println("main 方法"+" (++staticI)="+(++staticI)); new Father();}
运行结果
Father 静态代码块1 (++staticI)=1Father 静态代码块2 (++staticI)=2Father 静态代码块3 (++staticI)=3main 方法 (++staticI)=4Father 非静态代码块1 i=0 (++staticI)=5Father 非静态代码块2 i=0 (++staticI)=6Father 非静态代码块3 i=0 (++staticI)=7Father 构造器
结论
- 加载的顺序从上至下
- 静态变量>静态块>main>非静态变量>非静态块>构造器
有子类又会咋么样呢?
既然上面已经证明了在遵循加载规则的情况下顺序为从上至下
那么就可以简化代码了
public class CopyOfFather { int i; static int staticI; static {System.out.println("Father 静态代码块1"+" (++staticI)="+(++staticI));} {System.out.println("Father 非静态代码块1"+" i="+i+" (++staticI)="+(++staticI));} public CopyOfFather() {System.out.println("Father 构造器");} public static void main(String[] args) { System.out.println("main 方法"); System.out.println("(++CopyOfSon.staticI)="+(++CopyOfSon.staticI)); }}class CopyOfSon extends CopyOfFather { int i; static int staticI; public CopyOfSon() {System.out.println("Son 构造器");} static {System.out.println("Son 静态代码块1"+" (++staticI)="+(++staticI));} {System.out.println("Son 非静态代码块1"+" i="+i+" (++staticI)="+(++staticI));}}
执行结果
Father 静态代码块1 (++staticI)=1main 方法Son 静态代码块1 (++staticI)=1(++CopyOfSon.staticI)=2
结论:父类静态内容>子类静态内容
new 子类会怎么样
改造main:
public static void main(String[] args) { System.out.println("main 方法"); new CopyOfSon();}
运行结果
Father 静态代码块1 (++staticI)=1main 方法Son 静态代码块1 (++staticI)=1Father 非静态代码块1 i=0 (++staticI)=2Father 构造器Son 非静态代码块1 i=0 (++staticI)=2Son 构造器
结论
此处非静态内容不包括构造器
父类静态内容>子类静态内容>父类非静态内容>父类构造器>子类非静态内容>子类构造器
详细结论
父类静态变量>父类静态代码块>父类main>子类静态变量>子类静态代码块>父类非静态变量>父类非静态代码块>父类构造器>子类非静态变量>子类非静态代码块>子类构造器
请记住:
1.静态>非静态
2.变量>代码块: 先定义变量后在代码块使用
3.构造器在最后
阅读全文
0 0
- 简单类加载顺序
- 类的加载顺序
- tomcat类加载顺序
- 类的加载顺序
- jdk加载类顺序
- Java类加载顺序
- 类加载顺序
- 类加载顺序
- java类加载顺序
- 类加载顺序
- Java类加载顺序
- 类加载顺序
- 类的加载顺序
- 类的加载顺序
- 类的加载顺序
- 类的加载顺序
- Java 类加载顺序
- 类中方加载顺序
- GBDT(sklearn)参数详解
- 图解微积分:反向传播
- css的变量和继承
- CVS试用总结
- 615
- 类加载顺序
- SAP Web IDE Multi-Cloud Version简介
- 简单的上传插件(带进度条)
- Java序列化
- ubuntu 解决“无法获得锁 /var/lib/dpkg/lock -open (11:资源暂时不可用)”的方法
- java中“==”与“equals”浅析
- Android
- git的安装
- 机器学习之数据清洗与特征提取