美文网首页Java篇
Java中的反射机制

Java中的反射机制

作者: w达不溜w | 来源:发表于2021-04-17 23:03 被阅读0次

  Java的反射机制是在运行状态中,对于任意一个类,都能获取这个类的所有属性和方法,对于任意一个对象,能够调用它的任意一个方法和属性,包括私有方法和属性,这种动态地获取信息以及动态的调用对象的方法的工程称之为Java的反射机制。

实例应用

//--Student测试类定义
public class Student {
    //私有属性
    private String name;
    // 无参构造函数
    public Student() {
        System.out.println("调用了无参构造函数");
    }
    // 有参构造函数
    public Student(String str) {
        System.out.println("调用了有参构造函数");
    }
    // 无参数方法
    public void setName1() {
        System.out.println("调用了无参方法:setName1()");
    }
    // 有参数方法
    public void setName2(String str) {
        System.out.println("调用了有参方法setName2(String str):" + str);
    }
}

实例1:利用反射获取类的属性&赋值

public static void main(String[] args) {
    try {
        // 1.获取Student类的Class对象
        Class<Student> studentClass = Student.class;
        // 2.通过Class对象创建Student类的对象
        Student mStudent = studentClass.newInstance();
        // 3.通过Class对象获取Student类的name属性
        Field f = studentClass.getDeclaredField("name");
        // 4.设置私有访问权限
        f.setAccessible(true);
        // 5.对新创建的Student对象设置name值
        f.set(mStudent,"bestchangge");
        // 6.获取新创建Student对象的name属性
        System.out.println(f.get(mStudent));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

测试结果:

调用了无参构造函数
bestchangge

实例2:利用反射调用类的构造函数

public static void main(String[] args) {
    try {
        // 1 获取Student类的Class对象
        Class<Student> studentClass = Student.class;
        // 2.1 通过Class对象获取Constructor类对象,从而调用无参构造(构造函数的调用实际上是在newInstance())
        Student student1 = studentClass.getConstructor().newInstance();
        // 2.2 通过Class对象获取Constructor类对象(传入参数类型),从而调用有参构造
        Student student2 = studentClass.getConstructor(String.class).newInstance("bestchangge");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

测试结果:

调用了无参构造函数
调用了有参构造函数,传值为:bestchangge

实例3:利用反射调用类对象的方法

public static void main(String[] args) {
    try {
        // 1 获取Student类的Class对象
        Class<Student> studentClass = Student.class;
        // 2 通过Class对象获取Constructor类对象,从而调用无参构造(构造函数的调用实际上是在newInstance())
        Student mStudent = studentClass.getConstructor().newInstance();
        // 3.1 通过Class对象获取方法setName1()的Method对象
        Method method1 = studentClass.getMethod("setName1");
        // 通过Method对象调用setName1()
        method1.invoke(mStudent);

        // 3.2 通过Class对象获取方法setName2()
        Method method2 = studentClass.getMethod("setName2", String.class);
        // 通过Method对象调用setName2()
        method2.invoke(mStudent,"bestchangge");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

测试结果:

调用了无参构造函数
调用了无参方法:setName1()
调用了有参方法setName2(String str):bestchangge

相关文章

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • 详解Java反射机制(Reflection)

    详解Java反射机制(Reflection) 反射机制的作用 JAVA反射机制是在运行状态中,对于任意一个类,都能...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • java反射机制

    java的反射机制 1 JAVA的反射机制是什么?反射机制能做什么?反射机制的优点与缺点2 认识 Class...

  • 反射之三

    总结内容源自以下文章 粗浅看java反射机制 反射机制应用实践 谈谈java反射机制 Java Reflectio...

  • Android 使用注解和反射自制简单版的butternife

    一.Java反射机制。 1.反射机制的定义。 Java反射机制是指在运行状态中,对于任意一个类,都能知道这个类的所...

  • C++中使用QT实现反射机制

    1.反射机制 反射机制在java中是一个非常重要的特性,JAVA反射机制是在运行状态中,对于任意一个类,都能够知道...

  • Java反射笔记

    Java反射的概述 什么是Java的反射机制 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所...

网友评论

    本文标题:Java中的反射机制

    本文链接:https://www.haomeiwen.com/subject/dmoplltx.html