带有继承和静态的类的初始化以及加载过程(重要)
Posted Lqc_javaEngineer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有继承和静态的类的初始化以及加载过程(重要)相关的知识,希望对你有一定的参考价值。
package com.google.test;
public class BaseClass
public void haha()
printInit(“haha”);
private int i = 9;
protected int j;
public BaseClass()
// TODO Auto-generated constructor stub
System.out.println(“i=” + i + “,” + “j=” + j);
j = 39;
private static int x1 = printInit(“1”);
static int printInit(String s)
// TODO Auto-generated method stub
System.out.println(s);
return 47;
void testBaseNormalMethod()
System.out.println("BaseNormalMethod()");
package com.google.test;
public class TestClassInit extends BaseClass
/**
父类代码注释
public class BaseClass
public void haha()
printInit("haha");
private int i = 9;
protected int j;
public BaseClass()
// TODO Auto-generated constructor stub
System.out.println("i=" + i + "," + "j=" + j);
j = 39;
private static int x1 = printInit("1");
static int printInit(String s)
// TODO Auto-generated method stub
System.out.println(s);
return 47;
void testBaseNormalMethod()
System.out.println("BaseNormalMethod()");
*/
private void testNomalMethod1()
System.out.println("NomalMethod1()");
private int k = printInit("3");
public TestClassInit()
System.out.println("k=" + k);
System.out.println("j=" + j);
private int k2 = printInit("4");
private void testNomalMethod2()
System.out.println("NomalMethod2()");
public static void main(String[] args)
System.out.println("2");
TestClassInit testClassInit = new TestClassInit();
private static int x2 = printInit("test");
/**
* 步骤如下:
* 1.先编译子类.class加载,看到extents后加载父类,先找静态的方法得出结果:1(这一步不管子类有没有创建子类对象都要执行)
* 2.父类执行完以后执行子类的静态方法
* (1.普通静态方法优先于main方法执行,虽然main方法也是静态的,2.同样这一步不管子类有没有创建子类对象都要执行)得出结果:test ,2
* 3.创建子类对象时候调用子类构造方法,子类构造方法默认有一条super()来调用父类构造方法,这时候不会调用父类构造方法之前的普通方法。
* 得出结果:i=9,j=0。注意:基本类型boolean默认值为false,char默认值为:\\u0000,其他全部为0,引用类型默认值为null。
* 4.执行子类从父类继承下来的静态方法,然后执行自身的构造方法,得出结果:3,(k=47);4(k2=47)
* 5.执行自身的构造方法。得出结果:k=47,j=39
*/
/**运行结果:
* 1
test
2
i=9,j=0
3
4
k=47
j=39*/
以上是关于带有继承和静态的类的初始化以及加载过程(重要)的主要内容,如果未能解决你的问题,请参考以下文章