首页 > 代码库 > Java各种成员初始化顺序
Java各种成员初始化顺序
在其他博客看到过这种关于初始化顺序的文章,仔细一想,自己还真的不太清楚具体的顺序是什么样的,搞段代码测试一下:
class B extends A ,然后A类也就是父类里面有静态代码块,普通代码块,静态方法,静态成员变量,普通成员变量,普通方法。
public class LoaderOrderParent { static{ System.out.println("父类--静态代码块"); } { System.out.println("父类--代码块"); } public static String staticStringParent=initStaticStringInParent(); public String stringInParent=initStringInParent(); public LoaderOrderParent(){ System.out.println("父类--构造方法"); } public static String initStaticStringInParent(){ System.out.println("父类--初始化静态变量"); return "initStaticStringInParent"; } public String initStringInParent(){ System.out.println("父类--初始化普通变量"); return "initStringInParent"; } } public class LoaderOrderChild extends LoaderOrderParent { public String stringInChild=initStringInChild(); public static String staticStringInChild=initStaticStringInChild(); { System.out.println("子类--方法块"); } static { System.out.println("子类--静态方法块"); } public LoaderOrderChild(){ System.out.println("子类--构造方法"); } public static String initStaticStringInChild(){ System.out.println("子类--初始化静态变量"); return "staticStringInChild"; } public String initStringInChild(){ System.out.println("子类--初始化普通变量"); return "stringInChild"; } public static void main(String[] args){ new LoaderOrderChild(); } }
在子类中,执行main方法,new LoaderOrderChild();
输出结果为:
父类--静态代码块
父类--初始化静态变量
子类--初始化静态变量
子类--静态方法块
父类--代码块
父类--初始化普通变量
父类--构造方法
子类--初始化普通变量
子类--方法块
子类--构造方法
虽然子类的普通代码块写在静态代码块前面,但是还是静态代码库先执行
Java各种成员初始化顺序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。