1.class类
java在创建某个类的对象时,先会到内存中查找是否存在该类的class对象,如果没有,则会先创建class对象,创建完class对象,就拥有了该类的各种信息,所以不会因为向上转型丢失该类的信息;
2.获取class对象的其他方式
(1)通过.class方式获取class对象时,不会自动的初始化该对象,初始化被延迟到静态方法或者非final静态域调用时才会初始化该对象,这样的作法比较安全,因为在编译时就会收到检查(不需要try- catch代码块预防)。
(2)class.forName
会自动地初始化该Class对象,但需要指定类名,并且需要置于try语句块中。
3.Class类提供的常用方法
使用newinstance()创建某个类的对象,例如:
Class c2 = Writer.class;
System.out.println(c2.getName());
try {
Writer wangsan = (Writer) c2.newInstance();
System.out.println(wangsan);
// 输出:com.cmower.java_demo.fifteen.Writer@7852e922
} catch (InstantiationException | IllegalAccessException e1) {
e1.printStackTrace();
}
由于我们在创建Class对象c2时没有使用泛型,所以newInstance()
返回的对象类型需要强转为Writer。我们可以在此基础上进行改进,示例如下:
Class<Writer> c4 = Writer.class;
System.out.println(c4.getName());
try {
Writer wangsan = c4.newInstance();
System.out.println(wangsan);
// 输出:com.cmower.java_demo.fifteen.Writer@7852e922
} catch (InstantiationException | IllegalAccessException e1) {
e1.printStackTrace();
}
转载自https://www.jianshu.com/p/ad3af0efcbe2