前言:
整理下学习笔记,打好基础,daydayup!!!
反射
反射(Reflection):加载类,并允许以编程的方式解剖类中的各种成分(成员变量,方法,构造器等)
1,获取Class对象
获取Class对象有三种方式:
1,Class 变量名 = 类名.class;
2,调用Class提供方法:public static Class forName(String package);
3,Object提供的方法:public Class getClass(): Class 变量名 = 对象.getClass();
示例如下:
2,获取构造器
获取构造器方法如下:
方法 | 说明 |
Constructor<?>[ ] getConstructors( ) | 获取全部构造器(只能获取public修饰的) |
Constructor<?>[ ] getDeclaredConstructors() | 获取全部构造器(只要存在就能拿到) |
Constructor<T> getConstructor(Class<?>...parameterTypes) | 获取某个构造器(只能获取public修饰的) |
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) | 获取某个构造器(只要存在就能拿到) |
示例如下:
3,获取类的成员变量
获取成员变量的方法如下:
方法 | 说明 |
public Field[ ] getFields( ) | 获取类的全部成员变量(只能获取public修饰的) |
public Field[ ] getDeclaredFields( ) | 获取类的全部成员变量(只要存在就能拿到) |
public Field getField(String name) | 获取类的某个成员变量(只能获取public修饰的) |
public Field getDeclaredField(String name) | 获取类的某个成员变量(要存在就能拿到) |
void set(Object obj ,Object value): | 赋值 |
Object get(Object obj) | 取值 |
public void setAccessible(boolean flag) | 设置为true,表示禁止检查访问控制(暴力反射) |
示例如下:
4,获取类的方法
获取方法的方法如下:
方法 | 说明 |
Method[ ] getMethods() | 获取类得全部方法(只能获取public修饰的) |
Method[ ] getDeclaredMethods() | 获取类得全部方法(只要存在就能拿到) |
Method getMethod(String name,Class<?>... parameterTypes) | 获取类的某个成员方法(只能获取public修饰的) |
Method getDeclaredMethod(String name,Class<?>... parameterTypes) | 获取类的某个成员方法(只要存在就能拿到) |
示例如下:
反射的使用
1:可以得到一个类的全部成分
2:破坏封装性
3:制作java的框架
简易框架制作
需求:制作一个框架,可以把任意一个对象的字段名和对应的值都保存到文件中。
思考:1,定义一个方法,可以接受任意对象;2,每收到一个对象后,使用反射获得该对象的Class对象,然后获取全部的成员变量;3,遍历成员变量,然后提取成员变量在该对象中的具体值;4,把成员变量名和所对应的值写到文件中去。
操作实现:
整理结束,撒花!!!