反射
1、Java反射的概念
自己理解:可以通过类来获得对象及其属性和方法,先知道整体,然后根据整体是什么类型,在创建具体实现的对象,从而进行其他操作。
反射含义:可以获取正在运行的Java对象。
2、Java功能:
可以判断运行对象属于哪一个类
可以判断运行对象拥有的成员和函数
反射甚至可以调用private修饰的方法
3、实现Java反射的类
Class:它表示正在运行的Java应用程序中的类和接口
Field:提供有关类或接口的属性信息,以及对它的动态访问权限
Constructor:提供关于类的单个构造方法的信息以及对它的访问权限
Method:提供关于类或接口中某个方法信息
4、反射的优缺点
反射的优点是可以实现动态创建对象
反射的缺点是对性能有影响
代码示例:
public class Mydemo {
public static void main(String[] args){
// 获取整个类
Class<?> c = null;
try {
c = Class.forName("java.lang.Integer");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// 获取所有的属性
Field[] fs = c.getDeclaredFields();
// 定义可变长的字符串,用来存储属性
StringBuffer sb = new StringBuffer();
// 通过追加的方法,将每个属性拼接到此字符串中
// 最外边的public定义
sb.append(Modifier.toString(c.getModifiers()) + " class " + c.getSimpleName() +"{\n");
// 里边的每一个属性
for(Field field:fs){
// 空格
sb.append("\t");
// 获得属性的修饰符,例如public,static等等
sb.append(Modifier.toString(field.getModifiers())+" ");
// 属性的类型的名字
sb.append(field.getType().getSimpleName() + " ");
// 属性的名字+回车
sb.append(field.getName()+";\n");
}
sb.append("}");
System.out.println(sb);
}
}