您的位置:首页 > 职场人生

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

2014-08-01 09:57 288 查看
--------------------- 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培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 反射总结