JAVA中类的加载顺序
废话不说,直接上代码!
package Demo01.Day001;
/**
* 类的加载及顺序测试
* 测试结果:(输出顺序从上到下)
* 父类静态变量
* 父类静态代码块one
* 父类静态代码块second
* 父类非静态变量
* 非静态语句one
* 非静态语句second
* 父类构造函数
* 父类方法(静态 非静态不分先后,谁在前被调用则谁先被执行)
*
* 作者:张陈陈
* 时间:2019/9/2/19:24
*/
public class Exam02Demo01 {
//1.静态变量
static String test01 = TestDemo01();
//2.静态方法
static String TestDemo01() {
System.out.println("父类静态变量");
return "静态变量";
}
//3.静态代码块
static {
System.out.println("父类静态代码块one");
}
static {
System.out.println("父类静态代码块second");
}
//4.非静态变量
String test02 = TestDemo02();
//5.非静态变量测试方法
public String TestDemo02() {
System.out.println("父类非静态变量");
return "父类非静态变量";
}
//6.非静态语句块
{
System.out.println("父类非静态语句one");
}
{
System.out.println("父类非静态语句second");
}
//7.非静态方法
public void methodTest(){
System.out.println("父类非静态方法");
}
//7.1静态方法
public static void staticMethodTest(){
System.out.println("父类静态方法");
}
//8.构造函数
public Exam02Demo01() {
System.out.println("父类构造函数");
}
public static void main(String[] args) {
Exam02Demo01 exam02Demo01 = new Exam02Demo01();
exam02Demo01.staticMethodTest();
exam02Demo01.methodTest();
}
}
以上测试仅针对单独一个类中的元素加载顺序判断结果如下:
- 测试结果:(输出顺序从上到下)
- 父类静态变量
- 父类静态代码块one
- 父类静态代码块second
- 父类非静态变量
- 非静态语句one
- 非静态语句second
- 父类构造函数
- 父类方法(静态 非静态不分先后,谁在前被调用则谁先被执行)
下面进行加子类的测试,测试代码如下:
package Demo01.Day001;
/**
* 测试子类父类结合的时候类的加载顺序
* 测试结果:(输出顺序从上到下)
* 父类静态变量
* 父类静态代码块one
* 父类静态代码块second
* 子类静态变量
* 子类静态代码块one
* 子类静态代码块second
* 父类非静态变量
* 父类非静态语句one
* 父类非静态语句second
* 父类构造函数
* 子类非静态变量
* 子类非静态代码块one
* 子类非静态代码块second
* 子类构造函数
*
* 从此两次测试结果得出关于类的加载顺序的以下结论
* 1.加载父类静态变量
* 2.加载父类中静态代码块的内容
* 3.加载子类静态变量
* 4.加载子类中静态代码块的内容
* 5.加载父类非静态变量
* 6.加载父类非静态代码块内容
* 7.加载父类构造方法
* 8.加载子类非静态变量
* 9.加载子类非静态代码块内容
* 10.加载子类构造方法
*
* 作者:张陈陈
* 时间:2019/9/2/19:24
*/
public class Exam02Demo02 extends Exam02Demo01 {
//1.静态变量
static String test01 = SunTestDemo01();
public static String SunTestDemo01() {
System.out.println("子类静态变量");
return "子类静态变量";
}
//2.静态代码块
static {
System.out.println("子类静态代码块one");
}
static {
System.out.println("子类静态代码块second");
}
//3.非静态变量
String test02 = SunTEstDemo02();
public String SunTEstDemo02() {
System.out.println("子类非静态变量");
return "子类非静态变脸";
}
//4.非静态代码块
{
System.out.println("子类非静态代码块one");
}
{
System.out.println("子类非静态代码块second");
}
//5.构造函数
public Exam02Demo02() {
System.out.println("子类构造函数");
}
//6.静态方法
public static void StaticMethod() {
System.out.println("子类静态方法");
}
//7.非静态方法
public void Method() {
System.out.println("子类非静态方法");
}
public static void main(String[] args) {
Exam02Demo02 exam02Demo02 = new Exam02Demo02();
}
}
子类继承父类后,测试代码的执行结果如下:
- 测试结果:(输出顺序从上到下)
- 父类静态变量
- 父类静态代码块one
- 父类静态代码块second
- 子类静态变量
- 子类静态代码块one
- 子类静态代码块second
- 父类非静态变量
- 父类非静态语句one
- 父类非静态语句second
- 父类构造函数
- 子类非静态变量
- 子类非静态代码块one
- 子类非静态代码块second
- 子类构造函数
从此两次测试结果得出关于JAVA中类的加载顺序的
1.加载父类静态变量
2.加载父类中静态代码块的内容
3.加载子类静态变量
4.加载子类中静态代码块的内容
5.加载父类非静态变量
6.加载父类非静态代码块内容
7.加载父类构造方法
8.加载子类非静态变量
9.加载子类非静态代码块内容
10.加载子类构造方法
小弟初来驾到,还请各路大神指点…