什么是反射?Java反射?反射的优缺点

什么是反射(Reflection )?

主要是指程序可以访问、检测和修改它本身状态或行为的一种能力

Java反射?

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

使用:

  • 在程序运行期动态判断任意一个对象所属的类。

  • 在程序运行期动态构造任意一个类的对象。

  • 在程序运行期动态判断任意一个类所具有的成员变量和方法。

  • 在程序运行期动态调用任意一个对象的方法(私有方法也可以调用)。

反射的优缺点

优点

  • 自由,使用灵活,不受类的访问权限限制。
  • 可以根据指定类名、方法名来实现方法调用,非常适合实现业务的灵活配置。

缺点

  • 因为反射不受类的访问权限限制,其安全性低,很大部分的java安全问题都是反射导致的;
  • 相对于正常的对象的访问调用,反射因为存在类和方法的实例化过程,性能也相对较低;
  • 破坏java类封装性,类的信息隐藏性和边界被破坏。

获取Class对象的三种方式:

★ 方式一
通过对象的getClass方法进行获取。这种方式需要具体的类和该类的对象,以及调用getClass方法。

Person p=new Person("Jack", 23);
Class c=p.getClass();//来自Object方法

★ 方式二
任何数据类型(包括基本数据类型)都具备着一个静态的属性class,通过它可直接获取到该类型对应的Class对象。这种方式要使用具体的类,然后调用类中的静态属性class完成,无需调用方法,性能更好。

 Class c=Person.class;
 Class c2=int.class;

★ 方式三
通过Class.forName()方法获取。这种方式仅需使用类全名,就可以获取该类的Class对象,更有利于扩展。

try {
          Class c=Class.forName("cn.hncu.reflect.test.Person");
      } catch (ClassNotFoundException e) {
          e.printStackTrace();
      }

java反射技术的应用场景

  • 通过配置信息调用类的方法
  • 结合注解实现特殊功能
  • 按需加载jar包或class:按需加载,需要用到哪些jar,按照程序动态运行的需求取加载这些jar。
  • 动态代理:反射机制可以实现动态代理,实现不改变原来代码的情况下,对原来对象的方法进行增强。
  • 框架开发: Spring、Hibernate、Struts等,都使用了反射机制,以提供更灵活、可扩展的特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值