黑马程序员_java反射知识总结,黑马程序员_java反射
分享于 点击 2724 次 点评:219
黑马程序员_java反射知识总结,黑马程序员_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 ></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培训、期待与您交流! ----------------------
相关文章
- 暂无相关文章
用户点评