Java反射

Java反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

  • 使用反射获取一个对象的步骤

    //获取类的 Class 对象实例
    Class clz = Class.forName("com.xxp.api.Phone");
    //根据 Class 对象实例获取 Constructor 对象
    Constructor phoneConstructor = clz.getConstructor();
    //使用 Constructor 对象的 newInstance 方法获取反射类对象
    Object phoneObj = phoneConstructor.newInstance();
    
  • 调用某一个方法

    //获取方法的 Method 对象
    Method setPriceMethod = clz.getMethod("setPrice", int.class);
    //利用 invoke 方法调用方法
    setPriceMethod.invoke(phoneObj, 6000);
    

public class Phone {

    public int price;

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public static void main(String[] args) throws Exception{
        Phone phone = new Phone();
        phone.setPrice(5000);
        System.out.println("phone price: "+phone.getPrice());

        //反射
        Class cls = Class.forName("com.example.demo.entity.Phone");
        Method method = cls.getMethod("setPrice", int.class); //反射获取方法
        Constructor con = cls.getConstructor();//获取构造方法
        Object ojt = con.newInstance();//通过类的不带参数的构造方法创建这个类的一个对象
        method.invoke(ojt,6000);
        Method me = cls.getMethod("getPrice");
        System.out.println("method price: "+me.invoke(ojt));

        Class clz = Phone.class;
        Field[] fields = clz.getFields();
        for (Field f:fields){
            System.out.println("方法:");
            System.out.println(f.getName());
        }
    }
}

反射总结

反射机制允许程序在运行时取得任何一个已知名称的class的内部信息,包括包括其modifiers(修饰符),fields(属性),methods(方法)等,并可于运行时改变fields内容或调用methods。那么我们便可以更灵活的编写代码,代码可以在运行时装配,无需在组件之间进行源代码链接,降低代码的耦合度;还有动态代理的实现;JDBC原生代码注册驱动;hibernate 的实体类;Spring的AOP等等。但反射使用不当会造成很高的资源消耗.

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. Java反射
    1. 1.0.0.1.
    2. 1.0.0.2. 反射总结
本站总访问量: , 本页阅读量: