Chinaunix首页 | 论坛 | 博客
  • 博客访问: 676358
  • 博文数量: 194
  • 博客积分: 3831
  • 博客等级: 中校
  • 技术积分: 1843
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-28 13:24
文章分类

全部博文(194)

文章存档

2012年(41)

2011年(42)

2010年(45)

2009年(66)

分类: Java

2012-03-15 09:18:40

首先,明确两点

1) 类中Static{}代码段会在该类第一次访问里被调用,并且仅被调用一次

2) 由于类中构造方法会默认地或显示的调用父类的构造方法,这样类在实例化时(即调用构造器方法),会优先调用构造器方法。

如下程序:

class Firework{
    static {
        System.out.println("Hello" );
    }
    public Firework () {
        System.out.println("Firework 0" );
    }
}

class Fountain extends Firework {
    static {
        System.out.println("World" );
    }
    public Fountain() {
        // TODO Auto-generated constructor stub
        System.out.println("Fountain 0" );
    }
}

现有一段代码如下:

Firework f = new Fountain();

 

运行输出为

Hello

World

Firework 0

Fountain 0

由输出可知Java对类中static块执行策略是:优先深度遍历所有类的static{}块,其次再遍历类的构造器

阅读(834) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~