Java类的加载顺序
来源:互联网 发布:网络空间的定义 编辑:程序博客网 时间:2024/06/01 23:26
问题
昨天有人问我一个类中有静态方法,有静态代码块,普通代码块,构造函数,普通方法,静态方法,那么它们的加载顺序是什么?如果有之类继承该类,也有如上的方法,那么加载顺序又是如何?
实例1
普通方法StaticVar
测试加载方法OrderLoad
运行结果如下:
加载顺序是:
静态代码块-----静态方法--------普通代码块-------构造方法-----------调用的方法(包括静态方法和非静态方法,按调用顺序)
实例2
子类OrderLoadChild实现父类OrderLoad
运行结果如下:
加载顺序是:
父类静态块-----父类静态常量-------子类静态块----------子类静态常量----------父类普通代码块------------父类构造方法------------子类代码块------------子类构造方法
类的加载顺序
1、静态代码块/静态成员
静态代码块/静态成员最先加载。
静态代码块/静态成员顺序按照代码书写先后顺序加载。
如父类有静态代码块/静态成员,先调用父类静态代码块/静态成员(Object最优先),再一次加载本类的静态代码块/静态成员。
2、普通代码块/非静态成员
同一类中普通代码块/非静态成员顺序在静态代码块/静态成员加载之后。
同一类中多段普通代码块/非静态成员加载顺序按照代码书写先后加载。
如父类有普通代码块/非静态成员,现在加载父类的普通代码块/非静态成员,在加载子类的普通代码块/非静态成员。
3、构造方法
同一类中构造方法次于代码块之后加载。
同一类中如果有多个构造方法,按照实例时所调用的加载。
先加载父类的构造方法,在加载子类的构造方法。
子类的普通代码块/非静态成员加载顺序低于父类构造函数的加载顺序。
4、静态方法/普通方法
调用时才加载。
总结:
先加载父类的静态代码块/静态成员(父类中中都有或有多个有,按书写顺序) ------------- 加载子类的静态代码块/静态成员(字类中都有或有多个,按书写顺序)---------父类的普通代码块/非静态成员(父类中中都有或有多个有,按书写顺序)------------父类的构造方法-----------------子类的普通代码块/非静态成员(字类中都有或有多个,按书写顺序)-----------子类的构造方法
- Java类的加载顺序
- java类的加载顺序
- Java类加载的顺序
- Java类的加载顺序
- JAVA类的加载顺序
- java类的加载顺序
- Java类的加载顺序
- java的类加载顺序
- Java类的加载顺序
- java类的加载顺序
- Java类的加载顺序
- JAVA 类的加载顺序
- java类的加载顺序
- Java类的加载顺序
- Java类的加载顺序
- java类加载器的加载顺序
- Java| Java的类加载顺序
- Java类加载顺序
- 异或运算实现简单的字符串加密和解密
- leetcode03-Longest Substring Without Repeating Characters之Java版本
- hadoop安装01
- 九度 OJ 1066:字符串排序
- 常用排序算法之希尔排序
- Java类的加载顺序
- 如何使用UDP进行跨网段广播
- js定义父类窗口,接收子窗口返回的内容,window.opener.document取得父类窗口的对象.html
- 河北师范大学自考英语(基础科段)(专科)经验
- IOS让标题栏背景透明、设置左右baritem
- 多线程
- Google Gson 使用简介
- LinearLayout属性android:orientation
- 每日一linux命令(4)-------mkdir