java加载顺序

    xiaoxiao2021-12-14  50

    本文章主要是自己在网上学习了别人的文章后写的,其中例子也是直接复制别人的。写着个文章是为了加深记忆,以后忘了也可以翻看下。

    java类加载主要有静态static变量、静态初始化块、非静态变量、非静态初始化块和构造方法加载顺序。

    加载的顺序如下:

    1、同一个类中加载优先级:静态static变量>静态初始化块>非静态变量>非静态初始化块>构造方法。

    2、父类和子类加载优先级:

    父类静态static变量>父类静态初始化块>子类静态static变量>子类静态初始化块>父类非静态变量>父类非静态初始化块>父类构造方法>子类非静态变量>子类非静态初始化块>子类构造方法

    如下是相关例子 ,可以验证上述的结果:

    package com.bq.tets.load; public class Parent  {    public static int t = parentStaticMethod2();    int a = parentStaticMethod3();   //public static int t = 6;        //父类非静态初始化块    {        System.out.println("父类非静态初始化块");    }        //父类静态初始化块    static    {        System.out.println("父类静态初始化块");    }        //父类的构造方法    public Parent()    {        System.out.println("父类的构造方法");    }        //父类类的静态方法    public static int parentStaticMethod()    {        System.out.println("父类类的静态方法");        return 10;    }        //父类的静态方法2    public static int parentStaticMethod2()    {        System.out.println("父类的静态方法2,为了验证static静态变量");        return 9;    }        //父类的静态方法3    public static int parentStaticMethod3()    {        System.out.println("父类的静态方法3,为了验证非静态变量");        return 9;    }      //销毁父类    @Override    protected void finalize() throws Throwable    {        // TODO Auto-generated method stub        super.finalize();        System.out.println("销毁父类");    }     } package com.bq.tets.load; public class Child extends Parent { public static int m = childStaticMethod2(); int n = childStaticMethod3(); //子类非静态初始化块 {         System.out.println("子类非静态初始化块");     } //子类静态初始化块     static     {         System.out.println("子类静态初始化块");     }          //子类的构造方法     public Child()     {         System.out.println("子类的构造方法");     }          //子类的静态方法     public static int childStaticMethod()     {         System.out.println("子类的静态方法");         return 1000;     }          //子类的静态方法     public static int childStaticMethod2()     {         System.out.println("子类的静态方法,为了验证静态static变量");         return 1000;     }          //子类的静态方法     public static int childStaticMethod3()     {         System.out.println("子类的静态方法,为了验证非静态变量");         return 1000;     }               //销毁子类     @Override     protected void finalize() throws Throwable     {         // TODO Auto-generated method stub         super.finalize();         System.out.println("销毁子类");     } } package com.bq.tets.load; public class TestLoad  { public static void main(String[] arg) throws Throwable { //Parent.parentStaticMethod(); //int a = Parent.t; //Parent parent = new Parent(); Child child = new Child(); child.finalize(); } }

    转载请注明原文地址: https://ju.6miu.com/read-962107.html

    最新回复(0)