Java类成员初始化顺序

类中包含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。

代码:

* 每个属性设置断点,启动后可以观察执行顺序。

父类:

 1 package com.lookcoder.haircutmember.vo;
 2
 3 public class TRoleVoAFather {
 4     private String nameFather = "12";
 5     private Integer ageFather = 1;
 6     private int ageiFather = 1;
 7     {
 8         System.out.println("father defualt method block2");
 9     }
10     private String defualtInitFather = getDefaultInit();
11     {
12         System.out.println("father defualt method block1");
13     }
14     private String getDefaultInit() {
15         return "father default init";
16     }
17     // ----------------------------------------------------------------------------
18     private static String aFather = "2";
19     private final static String aaFather = getFinalStatic();
20     static {
21         System.out.println("father default static method2");
22     }
23     private static Integer bFather = 1;
24     static {
25         System.out.println("father default static method1");
26     }
27     private final static Integer bbFather = 2;
28     private static String getFinalStatic() {
29         return "father final static aa";
30     }
31     private final static Boolean bo = true;
32     // ----------------------------------------------------------------------------
33     TRoleVoAFather() {
34         System.out.println("father default construct");
35     }
36     TRoleVoAFather(String name, Integer age) {
37         this.nameFather = name;
38         this.ageFather = age;
39     }
40     // ----------------------------------------------------------------------------
41     public void abc() {
42         System.out.println("abc method!");
43     }
44 }

子类:

 1 package com.lookcoder.haircutmember.vo;
 2
 3 public class TRoleVoA extends TRoleVoAFather{
 4     private int agei = 1;
 5     {
 6         System.out.println("defualt method block2");
 7     }
 8     private Integer age = 1;
 9     {
10         System.out.println("defualt method block1");
11     }
12     private String name = "12";
13     private String defualtInit = getDefaultInit();
14     private String getDefaultInit() {
15         return "default init";
16     }
17     // ----------------------------------------------------------------------------
18     private final static Integer bb = 2;
19     private final static String aa = getFinalStatic();
20     private static String getFinalStatic() {
21         return "final static aa";
22     }
23     private final static Boolean bo = true;
24     private static String a = "2";
25     private static Integer b = 1;
26     static {
27         System.out.println("default static method2");
28     }
29     static {
30         System.out.println("default static method1");
31     }
32     private static Integer b11= 1;
33
34     // ----------------------------------------------------------------------------
35     TRoleVoA() {
36         System.out.println("default construct");
37     }
38     TRoleVoA(String name, Integer age) {
39         super(name, age);
40         this.name = name;
41         this.age = age;
42     }
43     // ----------------------------------------------------------------------------
44     public void showDefault() {
45         System.out.println("show default method!");
46     }
47 }

启动类:

1 package com.lookcoder.haircutmember.vo;
2
3 public class TRoleVoARun {
4     public static void main(String[] args) {
5         TRoleVoA tRoleVo = new TRoleVoA("123", 123);
6         tRoleVo.showDefault();
7     }
8 }

原文地址:https://www.cnblogs.com/hfultrastrong/p/11751351.html

时间: 2024-08-01 08:06:52

Java类成员初始化顺序的相关文章

java类的初始化顺序

java类的初始化顺序 (2008-10-21 13:30:15) 转载▼ 标签: java 初始化 继承初始化 it 分类: Java 对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器.我们也可以通过下面的测试代码来验证这一点: public class InitialOrderTest { // 静态变量 public static String staticField = "静态变量";

java类内容初始化顺序

在java类中一般有:成员变量.静态变量.成员方法.静态方法.构造方法.那么这几个的初始化顺序是什么呢? 初始化的先后顺序是:静态变量(类load进内存就初始化)------静态代码块(类load进内存就初始化)--------成员变量(对象初始化时)------------初始化块------------构造函数 测试程序如下: package com.evan; /* * 初始化顺序测试 */ public class InitialOrderTest { public static Str

Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)(转)

大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,另外还有一些将变量值输出到控制台的代码,然后让我们判断输出的结果.这实际上是在考查我们对于继承情况下类的初始化顺序的了解. 我们大家都知道,对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序以此是(静态变量.静态初始化块)>(变量.初始化块)>构造器.我们也可以通过下面的测试代码来验证这一点: Java代码 p

Java各种成员初始化顺序

在其他博客看到过这种关于初始化顺序的文章,仔细一想,自己还真的不太清楚具体的顺序是什么样的,搞段代码测试一下: class B extends A ,然后A类也就是父类里面有静态代码块,普通代码块,静态方法,静态成员变量,普通成员变量,普通方法. public class LoaderOrderParent { static{ System.out.println("父类--静态代码块"); } { System.out.println("父类--代码块"); }

java中类成员初始化顺序

java中初始化类成员方法包括: 1.显示域初始化,比如public int a=1;public static int b=1: 2.初始化块,分为普通初始化块,静态初始化块: 3.构造函数. 初始化的时候,首先是静态类的初始化方式执行,然后才是普通初始方式执行, 并且初始化块总是先于构造函数执行,显式域初始化与初始化块的执行顺序按照代码中出现的顺序执行. 显式静态域初始化先于静态初始化块 public class Hello{ public static int staticA=1; pub

java 类的初始化顺序

有父类 1. 父类static成员变量 2. 父类static块 3. 父类非static成员 4. 父类非static块 5. 父类构造方法 子类,也按照1-5顺序执行 无父类 1. static成员变量 2. static块 3. 非static成员 4. 非static块 5. 构造方法 总结: 先父再子 先静后动 先static成员后static块 先变量后代码块,在构造方法

Java 类中成员初始化顺序

Java 中的类成员 基本分为 静态成员, 实例变量  方法中特别的是静态方法和构造方法. 1.定义一个类 public class ClassLoaderTest { public int a ; public String b; private static int c; public  ClassLoaderTest(){ System.out.println("执行前:"+ a + "  "+ b); a = 10; b = "lisi"

Java 类成员的初始化顺序

Java 类成员的初始化顺序 前言:开发中碰到一个Java文件中有很多的成员变量,包括静态和非静态的,还有很多的初始化方法,很好奇这些成员的初始化顺序,在这里作个研究. ? 1 ?无继承情况下的Java初始化顺序: class Sample { Sample(String s) { System.out.println(s); } Sample() { System.out.println("Sample默认构造函数被调用"); } } class Test { static Samp

C#类的成员初始化顺序

首先我们来看看引用类型的成员初始化过程 我们来看一个例子吧 class Program {     static void Main(string[] args)     {         DriveB d = new DriveB();     } } class BaseA {     static DisplayClass a = new DisplayClass("基类静态成员初始化"); DisplayClass BaseA_c = new DisplayClass(&qu