java中类成员初始化顺序

java中初始化类成员方法包括:

1.显示域初始化,比如public int a=1;public static int b=1;

2.初始化块,分为普通初始化块,静态初始化块;

3.构造函数。

初始化的时候,首先是静态类的初始化方式执行,然后才是普通初始方式执行,

并且初始化块总是先于构造函数执行,显式域初始化与初始化块的执行顺序按照代码中出现的顺序执行。

  • 显式静态域初始化先于静态初始化块
public class Hello{

    public static int staticA=1;
    public static int staticB;

    static{
        System.out.println("Static Inital Block Start");
        staticB=2;
        PrintAB();
        System.out.println("Static Inital Block End\n");
    }

    public static void PrintAB(){
        System.out.println("staticA:"+staticA);
        System.out.println("staticB:"+staticB);
    }

    public Hello(){
        Hello.PrintAB();
    }

    public static void main(String[] args){
        Hello h=new Hello();
    }
}

输出:

Static Inital Block Start

staticA:1

staticB:2

Static Inital Block End

staticA:1

staticB:2

  • 显式静态域初始化后于静态初始化块
public class Hello{

    public static int staticB;

    static{
        System.out.println("Static Inital Block Start");
        staticB=2;
        PrintAB();
        System.out.println("Static Inital Block End\n");
    }
    public static int staticA=1;
    public static void PrintAB(){
        System.out.println("staticA:"+staticA);
        System.out.println("staticB:"+staticB);
    }

    public Hello(){
        Hello.PrintAB();
    }

    public static void main(String[] args){
        Hello h=new Hello();
    }
}

输出:

Static Inital Block Start

staticA:0

staticB:2

Static Inital Block End

staticA:1

staticB:2

  • 显式静态域初始化与初始化块按照出现顺序执行,最后执行构造函数,

  注意noStaticD在两个构造快中间初始化,第一个初始化块打印时noStaticD=0,第二个块中变为1

输出:

NoStatic Inital Block for noStaticC Start
noStaticC:1
noStaticD:1
noStaticE:1
noStaticF:0
NoStatic Inital Block for noStaticC End

Constructor Start
noStaticC:1
noStaticD:1
noStaticE:1
noStaticF:1
Constructor END

原文地址:https://www.cnblogs.com/lvjianwei/p/9862494.html

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

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

Java中类的初始化顺序

对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器.我们也可以通过下面的测试代码来验证这一点: public class InitialOrderTest {// 静态变量public static String staticField = "静态变量";// 变量public String field = "变量";// 静态初始化块static {System.out.pr

Java各种成员初始化顺序

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

Java类成员初始化顺序

类中包含7中成员:1.静态变量 static2.final静态常量 final static3.静态代码块 static{}  //多个代码块顺序执行 4.普通变量5.普通代码块 {}  //多个代码块顺序执行 6.构造方法 7.普通方法 类中成员初始化方式(排出7): 非继承类中:    首先执行1/2/3,执行顺序为顺序执行(谁在前先执行谁).    之后执行4/5,执行顺序为顺序执行(谁在前先执行谁).    然后执行6(默认执行无参构造方法).    继承类中:    首先执行父类1/2

java 中类的初始化顺序

//测试代码: 1 public class Test02 2 { 3 public Test02() 4 { 5 System.out.println("Test02"); 6 } 7 public static void main(String[] args) 8 { 9 Test03 test03= new Test03(); //1 10 //Test03.f(); //2 11 // System.out.println(Test03.i); //3 12 } 13 } 14

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中的初始化顺序(静态成员、静态初始化块,普通成员、普通初始化块、构造函数)

本文链接    http://blog.csdn.net/xiaodongrush/article/details/29170099 参考文章     http://my.oschina.net/leoson/blog/103251 1. 一个类中的初始化顺序 (静态变量.静态初始化块)=>(变量.初始化块.构造器). 2. 两个具有继承关系类的初始化顺序 父类的(静态变量.静态初始化块)=> 子类的(静态变量.静态初始化块)=> 父类的(变量.初始化块.构造器)=> 子类的(变量

java类的初始化顺序

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

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

java类内容初始化顺序

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