第一次看到还有一个Class类,呵呵!好像只有某个类的Class对象被载入内存,才能创建这个类的所有对象,看起来挺重要的,利用Class 还有此类的所有接口和父类,应该是用来查找此类的所有类型信息的吧。
package com.zhoutenghn;
interface HasBatteries{}
interface Waterproof{}
interface Shoots{}
class Toy {
Toy(){}
Toy(int i ) {}
}
class FancyToy extends Toy implements HasBatteries,Waterproof,Shoots{
FancyToy(){}
}
public class ToyTest {
static void printInfo(Class<?> cc){
System.out.println("Class name:"+cc.getName()+
" is interface? ["+cc.isInterface()+"]");
System.out.println("Simple name:"+cc.getSimpleName());
System.out.println("Canonical name:"+cc.getCanonicalName());
}
/**
* @param args
* @throws IllegalAccessException
* @throws
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Class<?> c = null;
try {
c = Class.forName("com.zhoutenghn.FancyToy");//创建一个指向FancyToy类的Class引用,
//同时也创建了类FancyToy
}catch(ClassNotFoundException e){
System.out.println("Can't find FancyToy");
System.exit(1);
}
printInfo(c);
for (Class<?> face : c.getInterfaces())//得到此类的接口类型
printInfo(face);
//printInfo(c);
Class<?> up = c.getSuperclass();//得到此类的父类类型
Object obj = null;
try {
obj = up.newInstance();
//创建一个Toy类,并返回一个指向Toy类的引用
}catch (InstantiationException e){
System.out.println("Cannot instantiate");
System.exit(1);
}catch (IllegalAccessException e ){
System.out.println("Cannot access");
System.exit(1);
}
printInfo(obj.getClass());//obj.getClass()得到obj的class对象
printInfo(c);
}
}
还有一个就是Class.forName(FancyToy)跟FancyToy.class的区别:后一个中的FancyToy类并没有被初始化