子类继承父类的加载顺序详解

版权声明:个人随笔,只为保存文档,希望能对你有帮助,如需转载、修改请保留本人CSDN链接! https://blog.csdn.net/w893932747/article/details/86180500

题记:以前总是对不会的东西逃避,但是不会早晚有一天还是会找到你,今天以此笔记做记!

分析两种情况的加载顺序,一种:单独类的加载顺序。二:子类继承父类的加载顺序

一:单独类的加载顺序

  1. 静态变量、静态代码块(从上到下的顺序加载)
  2. 类的非静态变量,非静态块(从上到下的顺序加载)
  3. 构造函数

二:子类继承父类的加载顺序

  1. 父类静态变量、父类静态代码块(从上到下的顺序加载)
  2. 子类静态变量、子类静态代码块(从上到下的顺序加载)
  3. 父类的非静态变量、父类的非静态代码块(从上到下的顺序加载)
  4. 父类的构造方法
  5. 子类的非静态变量、子类的非静态代码块(从上到下的顺序加载)
  6. 子类的构造方法

说明:

  1. 静态方法、非静态方法只有在调用的时候才会执行,不调用不会执行,静态方法是类的方法,非静态方法需要对象调用。
  2. 变量赋值问题,Java中局部变量需要显式赋值后才能使用,成员变量也可直接显式赋值,但是如果没有给初始值,当加载声明的变量时这个时候是默认值,默认值列表如下:
             Boolean      false
             Char         '\u0000'(null)
             byte         (byte)0
             short        (short)0
             int          0
             long         0L
             float        0.0f
             double       0.0d

测试代码如下:

package top.wj.test;

public class FuClass {
    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 FuClass(){
            System.out.println("父类构造函数");
        }


        public static void main (String args[]) {
            FuClass a=new FuClass();
//            a.bDisplay();
//            a.bTest();

        }

}

二、子类继承父类的加载方式

如果单独的看懂了,子类继承父类的和上边一样直接给出代码

package top.wj.test;

public class ZiClass extends FuClass{
    int bb;
    //静态变量
    static String a=lcyhh();
    public static String lcyhh()
    {
        System.out.println("子类静态变量");
        return "静态变量";
    }
    //静态语句块
    static {
        System.out.println("子类静态语句块1");
    }
    //静态语句块
    static {
        System.out.println("子类静态语句块2");
    }
    //静态语句块
    static{
        System.out.println("子类静态语句块3");
    }

    //非静态变量
    String b=ppplcy();
    public String ppplcy()
    {
        bb=3;
        System.out.println("bb=="+bb);
        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 ZiClass() {
        System.out.println("子类构造函数");

    }
}

猜你喜欢

转载自blog.csdn.net/w893932747/article/details/86180500