黑马程序员_java反射知识总结


--------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

       Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。但需注意的是:如果使用不当,反射的成本很高。java反射知识在java框架中用的很多,学好反射对学习框架很有帮助。

反射的步骤:
1、获取class类型。
       获取Class有三种方法
      通过类名获取,通过包名获取获取(会报异常,需要进行异常处理),通过类的实例获取。

<pre name="code" class="java">       String str = "Myqq";

       //通过类名获取

       Class classType1 = String.class;

       //通过包名获取

       Class classType2 = Class.forName("java.lang.String");

       //通过类的实例获取

       Class classType3 = str.getClass();


 

2、获取method(方法)

<p align="left"><span style="font-size:14px;color:black;"></span><pre name="code" class="java">  //获取方法。第一个参数是你要获取的方法的名,第二个参数是一个可变参数,是要获取的方法的参数对象的class。

       Method  method =classType.getDeclaredMethod("endsWith", new Class[]{String.class});

       method.setAccessible(true);//获取权限(调用private修饰的方法必须先有权限)

       method.invoke(str, newObject[] {"qq"});//方法调用

             

获取field(成员变量)的方法和获取method类似。以下代码是遍历对象的所有成员变量

       Field[] fields =classType1.getDeclaredFields();

       for(Field field : fields)

       {

           System.out.println(field);

       }

3、通过class来生成实例

不带参数的实例生成

String str2 = (String) classType1.newInstance();

带参数的实例生成,生成之前必须先获取带参数的构造方法。

       char[] ch = {'h','e','l','l','o'};

       Constructor<?> con = classType1.getConstructor(char[].class);  

       String str3 = (String)con.newInstance(ch);


4、反射技术优缺点

a、反射的优点
      反射提高了Java程序的灵活性和扩展性,降低耦合性,提高自适应能力。它允许程序创建和控制任何类的对象,无需提前硬编码目标类 
      反射是其它一些常用语言,如C、C++、Fortran 或者Pascal等都不具备的 
      Java反射技术应用领域很广,如软件测试、 EJB、JavaBean等 
      许多流行的开源框架例如Struts、Hibernate、Spring在实现过程中都采用了该技术 
b、反射的缺点
       使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此Java反射机制主要应用在对灵活性和扩展性要求很高的系统框架上,普通程序不建议使用。 
        使用反射会模糊程序内部逻辑 
        程序人员希望在源代码中看到程序的逻辑,反射等绕过了源代码的技术,因而会带来维护问题。反射代码比相应的直接代码更复杂。

--------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值