Java类成员初始化顺序的示例分析
这篇文章给大家分享的是有关Java类成员初始化顺序的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
创新互联是少有的网站设计、做网站、营销型企业网站、微信平台小程序开发、手机APP,开发、制作、设计、买链接、推广优化一站式服务网络公司,2013年开创至今,坚持透明化,价格低,无套路经营理念。让网页惊喜每一位访客多年来深受用户好评
类中包含7中成员:
1、静态变量 static
2、final静态常量 final static
3、静态代码块 static{} //多个代码块顺序执行
4、普通变量
5、普通代码块 {} //多个代码块顺序执行
6、构造方法
7、普通方法
类中成员初始化方式(排出7):
非继承类中:
首先执行1/2/3,执行顺序为顺序执行(谁在前先执行谁)。
之后执行4/5,执行顺序为顺序执行(谁在前先执行谁)。
然后执行6(默认执行无参构造方法)。
继承类中:
首先执行父类1/2/3,执行顺序为顺序执行(谁在前先执行谁),
随即执行子类1/2/3,执行顺序为顺序执行(谁在前先执行谁)。
之后执行父类4/5,执行顺序为顺序执行(谁在前先执行谁),
然后执行父类6(如果子类没有调用父类构造方法,则默认调用父类默认无参构造方法)。
随即执行子类4/5,执行顺序为顺序执行(谁在前先执行谁)。
然后执行子类6。
代码:
* 每个属性设置断点,启动后可以观察执行顺序。
父类:
package com.lookcoder.haircutmember.vo; public class TRoleVoAFather { private String nameFather = "12"; private Integer ageFather = 1; private int ageiFather = 1; { System.out.println("father defualt method block2"); } private String defualtInitFather = getDefaultInit(); { System.out.println("father defualt method block1"); } private String getDefaultInit() { return "father default init"; } // ---------------------------------------------------------------------------- private static String aFather = "2"; private final static String aaFather = getFinalStatic(); static { System.out.println("father default static method2"); } private static Integer bFather = 1; static { System.out.println("father default static method1"); } private final static Integer bbFather = 2; private static String getFinalStatic() { return "father final static aa"; } private final static Boolean bo = true; // ---------------------------------------------------------------------------- TRoleVoAFather() { System.out.println("father default construct"); } TRoleVoAFather(String name, Integer age) { this.nameFather = name; this.ageFather = age; } // ---------------------------------------------------------------------------- public void abc() { System.out.println("abc method!"); } }
子类:
package com.lookcoder.haircutmember.vo; public class TRoleVoA extends TRoleVoAFather{ private int agei = 1; { System.out.println("defualt method block2"); } private Integer age = 1; { System.out.println("defualt method block1"); } private String name = "12"; private String defualtInit = getDefaultInit(); private String getDefaultInit() { return "default init"; } // ---------------------------------------------------------------------------- private final static Integer bb = 2; private final static String aa = getFinalStatic(); private static String getFinalStatic() { return "final static aa"; } private final static Boolean bo = true; private static String a = "2"; private static Integer b = 1; static { System.out.println("default static method2"); } static { System.out.println("default static method1"); } private static Integer b11= 1; // ---------------------------------------------------------------------------- TRoleVoA() { System.out.println("default construct"); } TRoleVoA(String name, Integer age) { super(name, age); this.name = name; this.age = age; } // ---------------------------------------------------------------------------- public void showDefault() { System.out.println("show default method!"); } }
启动类:
package com.lookcoder.haircutmember.vo; public class TRoleVoARun { public static void main(String[] args) { TRoleVoA tRoleVo = new TRoleVoA("123", 123); tRoleVo.showDefault(); } }
感谢各位的阅读!关于“Java类成员初始化顺序的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
当前文章:Java类成员初始化顺序的示例分析
转载源于:http://myzitong.com/article/ghjjpc.html