黑马程序员_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中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。反射允许我们在编写与执行时,使我们的程序代码能够接入装载到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培训、期待与您交流! ----------------------
相关文章推荐
- 黑马程序员_09Java反射知识总结
- 黑马程序员——java —反射知识总结
- 黑马程序员学习log第九篇基础知识:JAVA的面向对象之正则表达式及反射总结
- 黑马程序员-反射知识总结
- 黑马程序员--java学习之反射总结
- 黑马程序员_Java第15天知识总结_TreeSet_泛型
- 黑马程序员 Java自学总结一 Java语言的基础知识
- 黑马程序员_Java第23天知识总结_IP地址类_端点Socket_DatagramSocket(UDPSocket)_Socket(TCPSocket)_ServerSocket
- 黑马程序员_java基础知识学习总结三
- 黑马程序员_Java第20天知识总结_File类_Properties_打印流_文件切割合并
- 黑马程序员_Java第14天知识总结_集合类(集合框架)_Collection_迭代器_List_Set_HashSet
- 黑马程序员_Java第18天知识总结_System类_Runtime类_Date_Calendar_Math_Random_InputStream_OutputStream_IO异常的处理
- 黑马程序员:Java基础总结----反射
- 黑马程序员_Java编程学习日记01(开博之言、java编程基础知识总结)
- 黑马程序员_Java第25天知识总结_正则表达式_匹配_切割_替换_获取_Pattern_Matcher
- java 反射知识总结
- 黑马程序员_java基础知识学习总结二
- 黑马程序员 Java高新技术 反射总结
- 黑马程序员_java反射总结
- 黑马程序员------java基础知识总结