反射的应用:
通过反射获取类的信息分为两步,首先获取Class对象,然后通过Class对象获取信息
1、获取Class对象
每个类被加载之后,系统就会为该类生成一个对应Class对象,通过Class对象就可访问到java虚拟机中的这个类。java程序中获取Class对象通常有如下3中方式。
1)通过对象的getClass()方法
getClass()是java.lang.Object类中的一个方法,所有的java对象都可以调用该方法,该方法返回对象所属类对应的Class对象。使用方式 如下代码。
Student p = new Student(); //Student为自定义的学生类型
Class cla = p.getClass(); //Cla为Class对象
Class cla = p.getClass(); //Cla为Class对象
2)调用类的Class属性
通过调用某个类的Class属性可获取该类对应的Class对象,这种方式需要在编译就知道该类名称,使用方式如下代码:
Class cla = Student.class;//Student为自定义的学生类型
3)使用Class类的forName()静态方法
使用Class类的forName()静态方法也可以获取该类对应的Class对象。该方法需要传入字符串参数,该字符串参数的值是某个类的全名,即要在类名前添加完整的包名。
try {
Class cla = Class.forName("com.test.Student");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Class cla = Class.forName("com.test.Student");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
如果传入的字符串不是某个类的全名,就会抛出一个ClassNotFoundException异常
后两种方式都是直接根据类来取得该类的Class对象,相比之下调用某个类的class属性来获取该类对象的Class对象这种方式更加有优势。原因有如下两点:
代码更安全。程序在编译阶段就可以检查需要访问的Class对象是否存在
程序性能更高,因为这种无需调用方法,所以性能更好。
因此,大部分都应该使用调用某个类的class属性的方式来获取指定类的Class对象。
2、从Class对象获取信息
在获得了某个类所对应的Class对象之后,程序就可以调用Class对象的方法来获得该类的真实信息。Class类提供了大量实例方法来获取Class对象对应类的详细信息
1、访问Class对应的类所包含的构造方法
2、访问Class对应的类所包含的方法。
3、访问Class对应的类所包含的属性。
4、访问Class对应的类所包含的注释
5、访问Class对应的类的其他信息。