题记:其实类的加载顺序没有什么,但是就是容易忘,过几天就不记得了,我相信点进来的你要么是不想自己验证,要么就是也忘了直接问的度娘要结果。我来记录一下以防以后在忘了!

一、单独类的加载顺序(以父类来为例子)

父类静态语句块1
父类静态语句块3
父类静态语句块2
父类非静态语句块1
父类非静态语句块2
父类构造函数
一般非静态方法!
一般静态方法!

总结:

  1. 静态代码块最先加载,加载顺序和代码的书写顺序有关从上往下以此执行。
  2. 第二是非静态代码块,加载顺序也是自上而下以此执行。
  3. 第三是构造代码块
  4. 一般方法是最后且他的输出顺序是你调用的顺序,这个和创建没有关系,你怎么调用就怎么显示!

下边是示例代码:

public class FuJava1 {

    //静态语句块
    static {
        System.out.println("父类静态语句块1");
    }

    //静态语句块
    static {
        System.out.println("父类静态语句块3");
    }

    //静态语句块
    static {
        System.out.println("父类静态语句块2");
    }


    //非静态语句块
    {
        System.out.println("父类非静态语句块1");
    }

    //非静态语句块
    {
        System.out.println("父类非静态语句块2");
    }

    //非静态方法
    public void notStaticMethod() {
        System.out.println("父类非静态方法");
        return;
    }

    //静态方法
    public static void staticMethod() {
        System.out.println("父类静态方法");
        return;
    }

    //无参构造函数
    public FuJava1() {
        System.out.println("父类构造函数");
    }

    //一般静态方法
    public static void normalMethod(){
        System.out.println("一般静态方法!");
    }

    //一般非静态方法
    public void normalMethod1(){
        System.out.println("一般非静态方法!");
    }

    public static void main(String args[]) {
        FuJava1 fuJava1=new FuJava1();
        fuJava1.normalMethod1();
        normalMethod();
    }

}

二、是继承的加载顺序

父类静态语句块1
父类静态语句块2
父类静态语句块3
子类静态语句块1
子类静态语句块2
子类静态语句块3
父类非静态语句块1
父类非静态语句块2
父类构造函数
子类非静态语句块1
子类非静态语句块2
子类构造函数

这个直接上代码了,没什么好解释的!

FuJava2的代码:

package top.wj.fuzi;

public class FuJava2 {


    //静态语句块
    static {
        System.out.println("父类静态语句块1");
    }

    //静态语句块
    static {
        System.out.println("父类静态语句块2");
    }

    //静态语句块
    static {
        System.out.println("父类静态语句块3");
    }

    //非静态语句块
    {
        System.out.println("父类非静态语句块1");
    }

    //非静态语句块
    {
        System.out.println("父类非静态语句块2");
    }

    //非静态方法
    public void bDisplay() {
        System.out.println("父类非静态方法");
        return;
    }

    //静态方法
    public static void bTest() {
        System.out.println("父类静态方法");
        return;
    }

    //构造函数
    public FuJava2() {
        System.out.println("父类构造函数");
    }


    public static void main(String args[]) {
        ZiJava2 ziJava2 = new ZiJava2();
    }

}

ZiJava2的代码:

package top.wj.fuzi;

public class ZiJava2 extends FuJava2 {

    public static String lcyhh() {
        System.out.println("子类静态变量");
        return "静态变量";
    }

    //静态语句块
    static {
        System.out.println("子类静态语句块1");
    }

    //静态语句块
    static {
        System.out.println("子类静态语句块2");
    }

    //静态语句块
    static {
        System.out.println("子类静态语句块3");
    }

    //非静态语句块
    {
        System.out.println("子类非静态语句块1");
    }

    //非静态语句块
    {
        System.out.println("子类非静态语句块2");
    }

    //非静态方法
    public void bDisplay() {
        System.out.println("子类非静态方法");
        return;
    }

    //静态方法
    public static void bTest() {
        System.out.println("子类静态方法");
        return;
    }

    //构造函数
    public ZiJava2() {
        System.out.println("子类构造函数");

    }
}

三、参数的值打印

父类静态变量i=null
父类静态语句块1静态变量
父类静态语句块2
父类静态语句块3
子类静态变量
子类静态语句块1静态变量
子类静态语句块2
子类静态语句块3
aa==0
aa==11
父类非静态变量
父类非静态语句块1
父类非静态语句块2
父类构造函数
bb==3
子类非静态变量
子类非静态语句块1
子类非静态语句块2
子类构造函数

总结:

这个是添加了变量的赋值

FuJava3的代码:

package top.wj.fuzi;

public class FuJava3 {
    int aa;

    //静态变量
    static String i = lcy();

    public static String lcy() {
        System.out.println("父类静态变量i=" + i);
        return "静态变量";
    }

    //静态语句块
    static {
        System.out.println("父类静态语句块1" + i);
    }

    //静态语句块
    static {
        System.out.println("父类静态语句块2");
    }

    //静态语句块
    static {
        System.out.println("父类静态语句块3");
    }

    //非静态变量
    String j=pplcy();

    public String pplcy() {
        System.out.println("aa==" + aa);
        aa = 11;
        System.out.println("aa==" + aa);
        System.out.println("父类非静态变量");
        return "父类非静态变量";
    }

    //非静态语句块
    {
        System.out.println("父类非静态语句块1");
    }

    //非静态语句块
    {
        System.out.println("父类非静态语句块2");
    }

    //非静态方法
    public void bDisplay() {
        System.out.println("父类非静态方法");
        return;
    }

    //静态方法
    public static void bTest() {
        System.out.println("父类静态方法");
        return;
    }

    //构造函数
    public FuJava3() {
        System.out.println("父类构造函数");
    }

    public static void main(String args[]) {
        ZiJava3 ziJava3=new ZiJava3();
    }

}

ZiJava3的代码:

package top.wj.fuzi;

public class ZiJava3 extends FuJava3 {
    int bb;
    //静态变量
    static String a = lcyhh();

    public static String lcyhh() {
        System.out.println("子类静态变量");
        return "静态变量";
    }

    //静态语句块
    static {
        System.out.println("子类静态语句块1"+a);
    }

    //静态语句块
    static {
        System.out.println("子类静态语句块2");
    }

    //静态语句块
    static {
        System.out.println("子类静态语句块3");
    }

    //非静态语句块
    {
        System.out.println("子类非静态语句块1");
    }

    //非静态变量
    String b = ppplcy();

    public String ppplcy() {
        bb = 3;
        System.out.println("bb==" + bb);
        System.out.println("子类非静态变量");
        return "子类非静态变量";
    }

    //非静态语句块
    {
        System.out.println("子类非静态语句块2");
    }

    //非静态方法
    public void bDisplay() {
        System.out.println("子类非静态方法");
        return;
    }

    //静态方法
    public static void bTest() {
        System.out.println("子类静态方法");
        return;
    }

    //构造函数
    public ZiJava3() {
        System.out.println("子类构造函数");

    }
}