关于类加载和初始化时内部元素加载顺序
来源:互联网 发布:ug数控车床编程讲解 编辑:程序博客网 时间:2024/06/14 04:08
关于类加载和初始化时内部元素加载顺序一直是一个我们会搞错的问题,其实关于一个类初始化是类的内部加载顺序如下:
1.当一个类加载时:【没有除了Object以外的其它父类时候】
首先是静态内容【静态成员变量--->静态代码块---->静态方法】---->构造代码块--->构造函数【几乎和构造代码块一起,只是要在构造函数内容之前执行】--->成员变量---->普通方法【局部变量---->局部代码块】
2.当一个类加载时:【除了Object以外还有其它的父类时候】
当初始化子类对象时,首先要加载父类对象,加载父类对象时候也是先加载类成员【被static修饰的】,有静态的先加载静态的,当父类的静态加载完事后,加载子类静态的【这时候要注意是父类的类静态加载完之后,立刻加载子类的静态】,之后是父类的构造代码块和构造函数,紧接着是子类的构造代码块和构造方法,之后是子类继承的父类的方法,成员变量等。如果存在多重父类,递归加载,规则如上:package test;
public class Test{
public static void main(String[] args) {
new HelloB();
}
}
class HelloA{
//构造函数
public HelloA() {
System.out.println("I'm HelloA 的构造函数");
}
//构造代码块
{
System.out.println("I'm HelloA class");
}
//静态代码块
static {
System.out.println("I'm staticA ");
}
}
class HelloB extends HelloA{
public HelloB() {
System.out.println("I'm HelloB 的构造函数");
}
{
System.out.println("I'm HelloB class");
}
static {
System.out.println("I'm staticB ");
}
}
2.当一个类加载时:【除了Object以外还有其它的父类时候】
当初始化子类对象时,首先要加载父类对象,加载父类对象时候也是先加载类成员【被static修饰的】,有静态的先加载静态的,当父类的静态加载完事后,加载子类静态的【这时候要注意是父类的类静态加载完之后,立刻加载子类的静态】,之后是父类的构造代码块和构造函数,紧接着是子类的构造代码块和构造方法,之后是子类继承的父类的方法,成员变量等。
如果存在多重父类,递归加载,规则如上:
运行结果:
I'm staticA
I'm staticB
I'm HelloA class
I'm HelloA 的构造函数
I'm HelloB class
I'm HelloB 的构造函数
I'm staticB
I'm HelloA class
I'm HelloA 的构造函数
I'm HelloB class
I'm HelloB 的构造函数
阅读全文
0 0
- 关于类加载和初始化时内部元素加载顺序
- java类加载和初始化顺序
- JAVA基础教程:类加载和初始化顺序
- 类的加载和初始化顺序
- java类加载和初始化顺序
- 关于java文件加载和初始化顺序问题分析
- 初始化类时的加载顺序
- 类的加载,初始化顺序
- 类加载与初始化顺序
- java 类加载-初始化顺序
- 关于Java中类加载时对其属性和代码块初始化顺序的研究与测试
- Java类的加载和初始化顺序分析
- Java类的加载和初始化顺序分析
- java经典面试题(类加载和初始化顺序)
- 类加载和初始化
- 类加载和初始化
- java 类的加载、链接和初始化(静态属性的加载顺序)
- 当一个类被加载时成员的初始化顺序
- HTML中id选择器和class选择器的区别(为什么id选择器不能重复)
- LVIS_FOCUSED和LVIS_SELECTED的区别
- Zabbix搭建笔记[6]--日志监控,计算和聚合
- 百度ueditor富文本--自定义插件按钮
- db_link
- 关于类加载和初始化时内部元素加载顺序
- LinkedList和ArrayList的区别
- python cgi服务尝试
- 苹果机之静态分析2 | 看一看别人的代码
- jquery mobile的两种页面跳转方式
- 8.9数据结构练习
- 日常放松自己压力的一些简单方法
- 润乾集算器与帆软报表应用集成
- SpringMVC问题集合