万事万物皆是对象,class也一样。
在Java中,系统定义的和自己定义的类其实都是Class类(java.lang.Class)的对象,如
class Foo{
void print(){
System.out.println("foo");
}
}
Foo类就是Class类的对象
而类类型(class type)则是表示类的Class类型,如
Foo f1 = new Foo();
Class c1 = Foo.class;
Class c2 = Foo.class;
c1,c2就是Foo类的类类型,而且一个类只可能是Class类的一个实例对象,即:
System.out.println(c1==c2);// true
获得类的类类型有三种方法:
1、每个类有一个Class的静态变量,可直接获取,如
Class c1 = Foo.class;
2、 已知类的对象,通过getClass()得到class对象,如
Foo f1 = new Foo();
Class c2 = f1.getClass();
3、 通过Class.forName(String className)获取class对象,如果找不到,抛出ClassNotFoundException异常,如:
Class c3=null;
try {
c2 = Class.forName("Foo");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
还可以通过类类型来创建类的实例对象,如
try {
Foo foo= (Foo) c1.newInstance();//需要调用无参数的调用方法
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
以上大部分内容来源于慕课网的”反射——Java高级开发必须懂的”课程,网址是http://www.imooc.com/learn/199,感谢Cedar老师的辛勤付出!