2种获取class的方式的区别
1. Class.forName("")
2. *.class
package context;
import java.util.Random;
public class ClassInitialization {
public static final Random rand = new Random();
public static void main(String[] args) throws ClassNotFoundException {
//.class使用懒加载,使用非编译期常量时初始化;编译期间检查
Class c1 = Initable1.class;
System.out.println("afer create Initable1");
System.out.println("static final param: " + Initable1.staticFinal1);
System.out.println(Initable1.staticFinal2);
System.out.println("--------");
//Class.forName方法调用即初始化;运行期间检查
Class c2 = Class.forName("context.Initable2");
System.out.println("after create Initable2");
System.out.println(Initable2.staticFinal1);
//泛型的用法: ?通配符
Class<? extends Number> c = int.class;
}
}
class Initable1 {
static final int staticFinal1 = 47; //编译期常量
static final int staticFinal2 = ClassInitialization.rand.nextInt(); //非编译期常量
static {
System.out.println("initial Initable1");
}
}
class Initable2 {
static final int staticFinal1 = 125;
static {
System.out.println("initial Initable1");
}
}
//output
afer create Initable1
static final param: 47
initial Initable1
963871024
--------
initial Initable1
after create Initable2
125