• 反射(获取成员变量,获取成员方法)


    使用反射技术获取成员变量对象并使用

    反射的第一步是先得到类对象,然后从类对象中获取类的成分对象

    Class类中用于获取成员变量的方法

    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)   获取值

    1. import java.lang.reflect.Field;
    2. public class Test {
    3. public static void main(String[] args) throws Exception {
    4. Class c=Student.class; //先获取类对象
    5. Field reflectage=c.getDeclaredField("age");
    6. //创建一个学生对象
    7. Student s1=new Student();
    8. reflectage.setAccessible(true);//暴力反射访问私有方法
    9. reflectage.set(s1, 18);//赋值
    10. System.out.println(s1);
    11. int age=reflectage.getInt(s1);
    12. System.out.println(age);
    13. }
    14. }

    使用反射获取方法对象并使用

    反射的第一步是先得到类对象,然后从类对象中后去类的成分对象

    Class类中获取成员方法的方法

    Method[] getMethods()  返回所有成员方法对象的数组(只能返回为public修饰的)

    Method[] getDeclaredMethod()  返回所有成员方法对象的数组

    Method getMethod(String name,Class  parameterTypes)  返回单个成员方法对象(只能为public修饰的)

    Method getDeclaredMethod(String name,Class  parameterTypes)  返回单个成员方法对象

    Method类中用于触发执行的方法

    Object invoke (Object  obj,Object  args)  运行方法

    参数1:用obj对象调用该方法

    参数2:调用方法的传递的参数(如果没有就不写)返回值:方法的返回值(如果没有就不写)

    学生对象

    1. public class Student {
    2. private String name;
    3. private int age;
    4. @Override
    5. public String toString() {
    6. return "Student [name=" + name + ", age=" + age + "]";
    7. }
    8. public Student(String name, int age) {
    9. super();
    10. this.name = name;
    11. this.age = age;
    12. }
    13. public Student() {
    14. super();
    15. }
    16. /**
    17. * @return the name
    18. */
    19. public String getName() {
    20. return name;
    21. }
    22. /**
    23. * @param name the name to set
    24. */
    25. public void setName(String name) {
    26. this.name = name;
    27. }
    28. /**
    29. * @return the age
    30. */
    31. public int getAge() {
    32. return age;
    33. }
    34. /**
    35. * @param age the age to set
    36. */
    37. public void setAge(int age) {
    38. this.age = age;
    39. }
    40. private void start() {
    41. System.out.println(name+"正在上课");
    42. }
    43. public String eat(String food) {
    44. System.out.println(name+"正在吃"+food);
    45. return name+"吃了"+food;
    46. }
    47. }

     

    1. package 反射获取成员变量对象;
    2. import java.lang.reflect.Method;
    3. public class Test2 {
    4. public static void main(String[] args) throws Exception{
    5. //获取类对象
    6. Class c=Student.class;
    7. //创建一个学生对象
    8. Student s1=new Student("张三",18);
    9. //获取方法对象(无参数,无法返回值)
    10. Method m1=c.getDeclaredMethod("start");//方法名
    11. m1.setAccessible(true); //访问私有方法开启暴力反射
    12. m1.invoke(s1);
    13. System.out.println("--------------");
    14. //获取方法对象(有参有返回值)
    15. Method m2=c.getDeclaredMethod("eat", String.class);
    16. Object msg=m2.invoke(s1, "苹果");
    17. System.out.println(msg);
    18. }
    19. }

  • 相关阅读:
    【机器学习】李宏毅——Domain Adaptation(领域自适应)
    ADAS&APA场景设计分享
    通用接口开放平台设计与实现——番外篇2 打包与引用遇到的问题及解决过程
    Log4j2
    Java延迟队列——DelayQueue
    C++基础——引用讲解2
    温岭商务局局长施珍娟莅临卧兔总部调研考察
    PHP如何对二维数组(多维数组)进排序
    基于Java后端与Typescript前端的代码自动生成 - malcolmcrum
    Python 框架学习 Django篇 (三) 链接数据库
  • 原文地址:https://blog.csdn.net/m0_64365315/article/details/126013924