不多哔哔,直接说我个人理解吧。
Java反射能帮助程序员在知道类名,却不知道类里面有啥具体方法时使用
反射
Class _class = null;
Constructor pClass = null;
Object obj = null;
Method setMethod = null;
try {
_class = Class.forName(“com.oracle.entity.Student”);
pClass = _class.getConstructor();
obj = pClass.newInstance();//这里就相当于实例化对象Object obj = new Student();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
获取成员
//获得类的所有属性。包括私有的
Field [] allFields = _class.getDeclaredFields();
for(Field field : allFields){
System.out.println(field.getName());
}
Field f2 = _class.getDeclaredField(“name”);//name是一个私有变量
//启用和禁用访问安全检查的开关,值为 true,则表示反射的对象在使用时应该取消 java 语言的访问检查;反之不取消
f2.setAccessible(true);
System.out.println(f2);
属性中属于基本数据类型的变量赋值方法:
setInt
setChar
setLong
setFloat
setDouble
setBoolean等等。
属性中属于引用数据类型的变量赋值方法:
set
获取方法
Method[] method1 = _class.getDeclareMethods();
method1.invoke(初始化生成的对象,[要给这个方法传入的参数…]);
这就类似于:初始化生成的对象.method1([要传入的参数…]);
自我小结
反射中用到的类有
Class,Constructor,Field,Method
其中Constructor,Field,Method的对象都是由Class对象调用get方法获取
Constructor能实例化对象通过newInstance方法。
Field能通过set和get方法能对类中的属性赋值
Method能通过invoke方法对类中的方法赋值和返回结果