Java反射(获取成员变量+获取无参成员方法)

一、获取成员变量(Reflect.java)

1.获取字节码对象

2.获取成员变量

3.给获取的成员变量赋值

    (1).通过无参构造方法创建对象

    (2).public void set(Object obj,Object value);

package com.test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;

public class ReflectTest {
  public static void main(String[] args) throws Exception {
    //获取字节码对象
    Class c = Class.forName("com.test.Student");

    //获取所有的成员变量
    //Field[] fields = c.getFields();
    Field[] fields = c.getDeclaredFields();
    for(Field field : fields){
      System.out.println(field);
    }

    //通过无参构造方法创建对象
    Constructor con = c.getConstructor();//获取构造方法
    Object obj = con.newInstance();//调用构造方法

    //获取单个的成员变量
    Field ageField = c.getField("age");//获取某个共有的
    //给obj对象的ageField字段设置值为19
    ageField.set(obj,19);
    System.out.println(obj);

    Field numField = c.getField("num");
    numField.set(obj,3);
    System.out.println(obj);

    Field nameField = c.getDeclaredField("name");//获取某个私有的
    nameField.setAccessible(true);//暴力访问
    nameField.set(obj,"张三");
    System.out.println(obj);
  }
}

Student.java

package com.test;

public class Student {
  private String name;
  public int age;
  public int num ;

  private Student(String name, int age, int num) {
    this.name = name;
    this.age = age;
    this.num = num;
  }

  public Student() {}

  public Student(String name, int age) {
    this.name = name;
    this.age = age;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }

  public void show(){
    System.out.println("show");
  }

  @Override
  public String toString() {
    return name+"--"+age+"--"+num;
  }
}

二、获取无参成员方法(ReflectFangFa.java)

1.获取字节码对象

2.获取成员方法

3.获取方法并使用

    (1).获取构造方法,并创建对象

    (2).获取单个方法并使用

package com.test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class ReflectFangFa {
  public static void main(String[] args) throws Exception {
    //获取字节码对象
    Class c = Class.forName("com.test.Student");
    //获取成员方法
    //Method[] methods = c.getMethods();//获取自己的包括父亲的公共方法
    Method[] methods = c.getDeclaredMethods();
    for(Method method : methods){
      System.out.println(method);
    }
    //获取构造方法
    Constructor con = c.getConstructor();
    Object obj = c.newInstance();

    //获取单个方法并使用
    Method method = c.getMethod("show");
    method.invoke(obj);
  }
}

 

发布了20 篇原创文章 · 获赞 32 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章