java中运行时执行顺序和测试类加载顺序
来源:互联网 发布:矩阵制组织形式举例 编辑:程序博客网 时间:2024/06/08 06:06
先看看几个类
public class Animal {public Body b1 = new Body("Animal b1");public static Body b2 = new Body("Animal static b2");public Animal(){Body b3 = new Body("Animal b3");System.out.println("Animal create..");}}
public class Dog extends Animal{ public Body b1 = new Body("Dog b1"); public static Body b2 = new Body("Dog static b2"); public static final Body b3 = new Body("Dog static final b3"); public static int a = 5; public static final int b = 6; public Dog(){ Body b4 = new Body("Dog b4"); System.out.println("Dog create.."); } }
public class Body {public Body(String name){System.out.println(name+"loading");}}首先执行第一种测试
public class Test {public static void main(String[] args) {Animal a = new Dog();}}这一种新建了一个dog,当类进行加载的时候,首先是进行父类的加载。
1,所以当创建Dog的时候,检查存在父类进行加载父类
所以父类中的静态变量都会被初始化,所以静态方法全部执行,而不是静态方法在他们之后初始化
然后是加载子类,然后Dog的静态变量会被初始化,同时final的也被初始化
2,这个时候开始调用子类的构造方法,默认会调用父类的构造方法,在构造方法之前要先初始化变量b1,所以就创建Body了
所有的变量初始化后,就继续调用父类的构造方法b3被创建。打印Animal create
3,父类的调用完之后调用子类的构造器,先初始化变量b1,然后打印
执行结果:
Animal static b2loadingDog static b2loadingDog static final b3loadingAnimal b1loadingAnimal b3loadingAnimal create..Dog b1loadingDog b4loadingDog create..第二种测试,什么情况加载类
public static void main(String[] args) {try {Class.forName("cn.dzq.loading.Dog");} catch (ClassNotFoundException e) {e.printStackTrace();}}当Class加载Dog的时候会先加载父类,所以先初始化父类的静态属性,然后初始化子类的属性
执行结果:
Animal static b2loadingDog static b2loadingDog static final b3loading第二种测试,使用类名直接调用属性的时候是否加载
public static void main(String[] args) {System.out.println(Dog.b3);}这样会加载Dog类
执行结果:
Animal static b2loadingDog static b2loadingDog static final b3loadingcn.dzq.loading.Body@ca0b6直接调用static的基本数据类型
public static void main(String[] args) { System.out.println(Dog.a);}同样会加载Dog类
执行结果:
Animal static b2loadingDog static b2loadingDog static final b3loading5直接调用static final的基本数据类型
public static void main(String[] args) {System.out.println(Dog.b);}就不会直接加载类
执行结果:
6以上全是自己总结,如果有错误的地方可以直接提出来,或者有更好的思路都可以说说。
0 0
- java中运行时执行顺序和测试类加载顺序
- java中类加载和执行顺序
- java中类的加载和执行顺序
- Java中类加载的执行顺序
- Java--类加载时执行方法顺序
- java运行时执行顺序
- Java 类加载执行顺序
- java执行顺序测试
- java 继承关系中-执行顺序测试
- java 继承关系中-执行顺序测试
- java中类的加载,及执行顺序
- java中类的加载,及执行顺序
- java中类的加载,及执行顺序
- java中类的加载,及执行顺序【转】
- Java中类的加载顺序执行结果
- Java中代码块介绍以及加载类和创建对象的执行顺序
- java中类加载顺序
- 页面加载时page类中事件的执行顺序
- 2014年全国高等学校名单
- 第十二章 12.3.2节练习
- windbg常用的查看命令
- 百余款智能电视创意类应用参赛角逐 Top13 App新鲜出炉!
- Centos Install Graphite with Apache
- java中运行时执行顺序和测试类加载顺序
- ASCII、ANSI、UNICODE,char、byte
- Java String 设计为不可变类型的好处
- android 4.0 禁用系统home键
- Java内存泄露
- Eclipse安装adt插件后之后看不到andorid manger
- Havok Vision Engine
- [分享]Android Studio 快捷键整理-SadieYu
- gradle拷贝文件中文乱码