java Class与静态初始化

package com.henry.classloader;

import java.util.Random;

class Init{
 //编译时就可以确定下面常量的值,所以加载(使用"类名.class,Class.forName")Class时不进行初始化
 //并且对静态常数值的引用也不会导致初始化 操作
 static final int staticFinal=47;
 static final int staticFinal2=2;
 static{
  System.out.println("Init");
 }
};

class Init2{
 //加载(使用"类名.class")Class时不进行初始化,初始化操作延迟到对静态方法(构造器隐式静态)或者是非常数静态域的首次引用
 //对非常数静态域初次使用时先进行链接(分配存储空间),再进行初始化
 //加载使用(Class.forName)Class时,立刻进行初始化
 static int staticNonFinal=74;
 static{
  //先执行下述语句,再打印出上述静态变量
  System.out.println("init2");
 }
}

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

public class ClassTest4 {
 public static Random random=new Random(47);
 public static void main(String[] args)throws Exception {
  Class initClass=Init.class;
  System.out.println("after creating init ref");
  
  System.out.println(Init.staticFinal);
  System.out.println(Init.staticFinal2);
  
  System.out.println(Init2.staticNonFinal);
  
  //使用“类名.class"方法产生的Class不会进行初始化,初始化操作延迟到对静态方法(构造器隐式静态)或者是非常数静态域的首次引用
//  Class initClass3=Init3.class;
  Class initClass3=Class.forName("com.henry.classloader.Init3");
  System.out.println("after creating init3 ref");
  
  
  System.out.println(Init3.staticNonFinal);
 }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值