反射的第一步是先得到类对象,然后从类对象中获取类的成分对象
Field[] getFields() 返回所有成员变量对象的数组(只能拿public修饰的)
Field[] getDeclaredFields() 返回所有成员变量对象的数组,存在就能拿到
Field getField(String name) 返回单个成员变量对象(只能拿Public修饰的)
Field getDeclaredField(String name) 返回成员变量对象,存在就能拿到
获取成员变量的作用依然是在某个对象中取值,赋值
Field类中用于取值、赋值的方法
void set(Objet obj,Object value) 赋值
void get(Objet obj) 获取值
-
-
- import java.lang.reflect.Field;
-
- public class Test {
-
- public static void main(String[] args) throws Exception {
- Class c=Student.class; //先获取类对象
- Field reflectage=c.getDeclaredField("age");
- //创建一个学生对象
- Student s1=new Student();
- reflectage.setAccessible(true);//暴力反射访问私有方法
- reflectage.set(s1, 18);//赋值
-
- System.out.println(s1);
-
- int age=reflectage.getInt(s1);
- System.out.println(age);
-
-
- }
-
- }
反射的第一步是先得到类对象,然后从类对象中后去类的成分对象
Method[] getMethods() 返回所有成员方法对象的数组(只能返回为public修饰的)
Method[] getDeclaredMethod() 返回所有成员方法对象的数组
Method getMethod(String name,Class> parameterTypes) 返回单个成员方法对象(只能为public修饰的)
Method getDeclaredMethod(String name,Class> parameterTypes) 返回单个成员方法对象
Object invoke (Object obj,Object args) 运行方法
参数1:用obj对象调用该方法
参数2:调用方法的传递的参数(如果没有就不写)返回值:方法的返回值(如果没有就不写)
学生对象
-
-
- public class Student {
- private String name;
- private int age;
- @Override
- public String toString() {
- return "Student [name=" + name + ", age=" + age + "]";
- }
- public Student(String name, int age) {
- super();
- this.name = name;
- this.age = age;
- }
- public Student() {
- super();
- }
- /**
- * @return the name
- */
- public String getName() {
- return name;
- }
- /**
- * @param name the name to set
- */
- public void setName(String name) {
- this.name = name;
- }
- /**
- * @return the age
- */
- public int getAge() {
- return age;
- }
- /**
- * @param age the age to set
- */
- public void setAge(int age) {
- this.age = age;
- }
- private void start() {
- System.out.println(name+"正在上课");
-
- }
-
- public String eat(String food) {
- System.out.println(name+"正在吃"+food);
- return name+"吃了"+food;
-
- }
-
-
-
- }
- package 反射获取成员变量对象;
-
- import java.lang.reflect.Method;
-
- public class Test2 {
-
- public static void main(String[] args) throws Exception{
- //获取类对象
- Class c=Student.class;
- //创建一个学生对象
- Student s1=new Student("张三",18);
- //获取方法对象(无参数,无法返回值)
- Method m1=c.getDeclaredMethod("start");//方法名
- m1.setAccessible(true); //访问私有方法开启暴力反射
- m1.invoke(s1);
- System.out.println("--------------");
-
- //获取方法对象(有参有返回值)
- Method m2=c.getDeclaredMethod("eat", String.class);
- Object msg=m2.invoke(s1, "苹果");
- System.out.println(msg);
-
-
-
- }
-
- }