关于java初始化顺序的一个示例

本文详细解析了Java中对象创建过程中的构造与初始化顺序,包括静态成员与非静态成员的初始化流程,展示了如何通过示例代码理解这些概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class Sample
{
    
public static void main(String[] args){
        B ba 
= new B();
        
        System.out.println(
"-------------------------------");

        B bb 
= new B();
    }
};


class Target
{
    
public Target(String s){
        System.out.println(
"Target("+s+")");
    }
};

class A
{
    
    
public static Target td = new Target("static in A");
    
static{
        System.out.println(
"static block in A");
    }

    {
        System.out.println(
"non-static block in A");
    }

    
public Target ta = new Target("in A");
};

class B extends A
{
    
public Target tb = new Target("in B");
    
static{
        System.out.println(
"static block in B");
    }
    
static public Target tc = new Target("static in B");

    {
        System.out.println(
"non-static block in B");
    }
    
};
 

结果:
Target(static in A)
static block in A
static block in B
Target(
static in B)
non
-static block in A
Target(
in A)
Target(
in B)
non
-static block in B
-------------------------------
non
-static block in A
Target(
in A)
Target(
in B)
non
-static block in B



注意:
  1. All data fields are initialized to their default value (0, false, or null).

  2. All field initializers and initialization blocks are executed, in the order in which they occur in the class declaration.

  3. If the first line of the constructor calls a second constructor, then the body of the second constructor is executed.

  4. The body of the constructor is executed。


另外,可以看到:
先父类的static,后子类的static,然后父类的非static,再子类的非static。
static包括静态的字段和初始化块。
非static包括非静态字段和初始化块。
同级别的字段或初始化块的顺序就依赖于定义的先后了。

还有一点简单的,顺便提一下:
static的东东只在类装入的时候,执行一次。不是每次实例化一个对象时都执行。

顺便提第二点:在jdk5中因为支持可变参数列表所以,
public static void main(String... args){}

是成立的。

另外,关于初始化问题参见:
http://www.javaworld.com/javaworld/jw-03-1998/jw-03-initialization.html?page=1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值