Java反射机制总结

1. 什么是java反射机制?

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

2. 什么是反射类

动态获取类或者对象的信息(属性和方法),以及动态操作对象的属性和方法的类,动态分析和使用类的信息的类。
注:动态是指在java运行状态。

3. 反射的作用

1.动态获取对象的信息(对象的属性和方法);
2.动态调用对象的属性和方法;
例如:Java程序中一些对象在运行时会出现两种类型:运行时类型和编译时类型,例如一个向上转型的代码:Bird bird = new Animal();其中,bird在编译时类型为Bird,运行时类型为Animal,通过反射机制就能在程序运行时发现该对象和类的真实信息。

4. 反射的使用场景

1.操作因访问权限限制的属性和方法;
2.实现自定义注解;
3.动态加载第三方jar包;
4.按需加载类,节省编译和初始化时间。

5.反射技术的使用

5.1 反射主要涉及的类

在这里插入图片描述
反射技术的核心技术是Class对象,每个类在定义以后都有各自的Class对象。

5.2 反射技术主要框架

在这里插入图片描述

5.3 获取Class对象的三种方式

(1)使用Class.forName方法(“类的全路径名”);

(2)使用需要反射的类名调用class方法;

(3)使用需要反射的类的对象调用getClass方法

  		Class<?> c1 = Class.forName("com.beantechs.model.Point");
        Class<Point> c2 = Point.class;
        Class<? extends Point> c3 = new Point(1.0, 2.0, 3.0).getClass();
        System.out.println(c1==c3);
    打印结果为true

5.4 Class对象获取类常见的方法

  1. getClassLoader():获得类的加载器;
  2. getDeclaredClasses():返回一个数组,数组中包含该类中所有类和接口类的对象;
  3. forName(String classRoad):根据类的路径返回类的Class对象(该方法是静态成员方法);
  4. newInstacne():创建类的实例;
  5. getName():获得类的完整路径名。

5.5 调用类中的私有构造方法

  1. getConstructor(Class…<?>parameterTypes):获得该类中与参数类型匹配的公有的构造方法;
  2. getConstructors(): 获得该类中所有公有的构造方法;
  3. getDeclaredConstructor(Class…<?>parameterTypes):获得该类中与参数类型匹配的构造方法;
  4. getDeclaredConstructors():获得该类中所有构造方法。

5.6 使用类中的私有成员变量

  1. getField(String name):获得该类中某个公有的字段;
  2. getFields():获得该类中所有的共有字段;
  3. getDeclaredField(String name):获得该类中某个字段;
  4. getDeclaredFields():获得该类中所有字段。

5.7 调用类中的私有成员方法

  1. getMethod(String name,Class…<?>parameterTypes):获得该类中某个共有的方法;
  2. getMethods():获得该类中所有的共有方法;
  3. getDeclaredMethod(String name,Class…<?>parameterTypes):获得该类中某个方法;
  4. getDeclaredMethods():获得该类中所有方法。

6. 反射的优点与缺点

优点:对于任意一个类,都能够获得这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法,增加程序的灵活性和扩展性,降低耦合性。
缺点:使用反射会导致程序效率降低(为了获得一个类的对象,调用了Class类中的多个方法),反射机制绕过了源代码,可能会带来维护问题。

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值