Class和的初始化

刚好看到了think in java的第14章 class和反射,看到个demo很有意思。

具体讲:

当".class"来创建对Class对象的引用时,不会自动地初始化该Class对象,

同时包含了3个步骤

1、加载

2、链接

3、初始化,如果该类具有超类,则对其进行初始化,执行静态初始化器和静态初始化块

初始化被延迟到了对静态方法或者非常数静态域进行首次引用时才执行

 

 

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
package jdk.reflect;

import java.util.Random;

/**
*
@author <a href="mailto:czy88840616@gmail.com">czy</a>
*
@since 2010-4-25 21:11:02
*/
public class ClassInitialization {
public static Random rand = new Random( 47 );

public static void main(String[] args) throws ClassNotFoundException {
// 在使用.class创建对Class的引用的时候,不会自动初始化Class对象,所以不会触发static块
Class initable = Initable. class ;
System.out.println(
" after creating Initable ref " );

// 调用了类的常数静态域,所以不会触发static块
System.out.println(Initable.staticFinal);
// 调用了非常数静态域,会触发static块
System.out.println(Initable.staticFinal2);
// 没有fianl
System.out.println(Initable2.staticNonFinal);
// class.forname会触发初始化
Class initable3 = Class.forName( " jdk.reflect.Initable3 " );

System.out.println(
" after creating initable3 ref " );

System.out.println(Initable3.staticNonFinal);
}
}

class Initable {
static final int staticFinal = 47 ;

static final int staticFinal2 = ClassInitialization.rand.nextInt( 1000 );

static {
System.out.println(
" Initializing Initable " );
}
}

class Initable2 {
static int staticNonFinal = 147 ;

static {
System.out.println(
" Initializing Initable2 " );
}
}

class Initable3 {
static int staticNonFinal = 74 ;
static {
System.out.println(
" Initializing Initable3 " );
}
}

 

 

 

结果:

 
  
after creating Initable ref
47
Initializing Initable
258
Initializing Initable2
147
Initializing Initable3
after creating initable3 ref
74

 

 

转载于:https://www.cnblogs.com/xiziyin/archive/2010/04/25/1720801.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值