简介
在运行过程中,对任意一个类,都能知道这个类的所有属性和方法。对于任一个对象,都能调用他的任意一个方法和属性。这种动态获取信息以及动态调用对象的方法称为java语言的反射机制
用法
我这里就列出我常用的两个方法私有类和变量
方法Methods
方法 | 用途 |
---|---|
getDeclaredMethods() | 获取当前类的所有方法,包括public/private/protected/default修饰的方法 |
getDeclaredMethod(String name, Class<?>… parameterTypes) | 获取当前类的某一个方法,包括public/private/protected/default修饰的方法 |
getMethods() | 获取当前类和所继承父类的public标识的所有方法,仅仅包括public |
getMethod(String name, Class<?>… parameterTypes) | 获取当前类和所继承父类的public标识的某一个方法,仅仅包括public |
上面就是两个类型的方法,一个是只获取当前类的方法,获取当前类的方法,包括所有类型的方法:public/private/protected/default。还有一个是获取当前类和所继承的父类的方法,仅仅包括public修饰的方法。
调用方式
1 | //在TakePhotoActivity.class类中有两个重载方法,一个无参,一个有一个String类型的参数 |
调用无参的方法
1 | TakePhotoActivity takePhotoActivity = new TakePhotoActivity();//new 一个类对象 |
调用有参的方法
1 | TakePhotoActivity takePhotoActivity = new TakePhotoActivity();//new 一个类对象 |
有参的方法,在获取方法的时候,传一个Class[]数组,里面的值就是参数类型的类。或者还有另一种传的方法,前面获取方法的时候:
- 获取方法的时候,无参的传一个空的Class[],有参就传有值的Class[]数组
- 执行方法的时候,无参的传一个空的Object[],有参就传有值的Object[]数组,至于传的值随便写,类型一样就行
变量Field
方法 | 用途 |
---|---|
getDeclaredFields() | 获取当前类的所有类型的全局变量,包括public/private/protected/default修饰的变量 |
getDeclaredField(String name) | 获取当前类的某一个类型的全局变量,包括public/private/protected/default修饰的变量 |
getFields() | 获取当前类和继承父类的所有用public修饰的变量 |
getField(String name) | 获取当前类和继承父类的某一个用public修饰的变量 |
调用方式
1 | //在TakePhotoActivity里面定义 |
获取变量
1 | TakePhotoActivity takePhotoActivity = new TakePhotoActivity();//new 一个类对象 |
设置变量的值
1 | //获取变量的值跟上面一样 |
工具类
1 | import java.lang.reflect.Field; |