Java 反射机制是Java 语言的一个重要特性。考虑实现一个newInstance(String
className)方法,它的作用是根据参数className 指定的类名,通过该类的不带参数的
构造方法创建这个类的对象,并将其返回。如果不运用Java 反射机制,必须在
newInstance()方法中罗列参数className所有可能的取值,然后创建相应的对象:
public Object newInstance(String className) throws Exception{
if(className.equals("HelloService1"))
return new HelloService1();
if(className.equals("HelloService2"))
return new HelloService2();
if(className.equals("HelloService3"))
return new HelloService3();
if(className.equals("HelloService4"))
return new HelloService4();
...
if(className.equals("HelloService1000"))
return new HelloService1000();
}
以上程序代码很冗长,而且可维护性差。如果在以后软件的升级版本中去除了一
个HelloService4类,或者增加了一个HelloService1001类,都需要修改以上newInstance()
方法。
如果运用反射机制,就可以简化程序代码,并且提高软件系统的可维护性和可扩
展性:
public Object newInstance(String className) throws Exception{
Class classType=Class.forName(className);
return classType.newInstance();
}
Java 反射机制在服务器程序和中间件程序中得到了广泛运用。在服务器端,往往
需要根据客户的请求,动态调用某一个对象的特定方法。此外,有一种ORM
(Object-Relation Mapping,对象-关系映射)中间件能够把任意一个JavaBean 持久化
到关系数据库中。在ORM 中间件的实现中,运用Java 反射机制来读取任意一个
JavaBean的所有属性,或者给这些属性赋值。在作者的另一本书《精通Hibernate:Java
对象持久化技术详解》中阐述了Java 反射机制在Hibernate(一种ORM中间件)的实
现中的运用。
在JDK类库中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect
包中。
l Class类:代表一个类。
l Field类:代表类的属性。
l Method类:代表类的方法。
l Constructor 类:代表类的构造方法。
l Array类:提供了动态创建数组,以及访问数组元素的静态方法。
l Proxy类和InvocationHandler 接口:提供了生成动态代理类及其实例的方法。
本章还介绍了Java 反射机制、静态代理模式和动态代理模式在远程方法调用中的
运用。本章以SimpleClient客户调用SimpleServer 服务器上的HelloServiceImpl对象的方法为例,探讨了实现远程方法调用的一些技巧。
练习题
1.假定Tester 类有如下test方法:
public int test(int p1, Integer p2)
以下哪段代码能正确地动态调用一个Tester 对象的test方法?(单选)
A.
Class classType=Tester.class;
Object tester=classType.newInstance();
Method addMethod=classType.getMethod("test",new Class[]{int.class,int.class});
Object result=addMethod.invoke(tester,
new Object[]{new Integer(100),new Integer(200)});
B.
Class classType=Tester.class;
Object tester=classType.newInstance();
Method addMethod=classType.getMethod("test",new Class[]{int.class,int.class});
int result=addMethod.invoke(tester,
new Object[]{new Integer(100),new Integer(200)});
C.
Class classType=Tester.class;
Object tester=classType.newInstance();
Method addMethod=classType.getMethod("test",new Class[]{int.class,Integer.class});
Object result=addMethod.invoke(tester,
new Object[]{new Integer(100),new Integer(200)});
D.
Class classType=Tester.class;
Object tester=classType.newInstance();
Method addMethod=classType.getMethod("test",new Class[]{int.class,Integer.class});
Integer result=addMethod.invoke(tester,
new Object[]{new Integer(100),new Integer(200)});
2.以下哪些方法在Class类中定义?(多选)
A.getConstructors() B.getPrivateMethods() C.getDeclaredFields()
D.getImports() E.setField()
3.以下哪些说法正确?(多选)
A.动态代理类与静态代理类一样,必须由开发人员编写源代码,并编译
成.class文件
B.代理类与被代理类具有同样的接口
C.java.lang.Exception类实现了java.io.Serializable接口,因此Exception对象
可以被序列化后在网络上传输
D.java.lang.reflect包中的Proxy类提供了创建动态代理类的方法
4.以下哪些属于动态代理类的特点?(多选)
A.动态代理类是public、final和非抽象类型的
B.动态代理类继承了java.lang.reflect.Proxy类
C.动态代理类实现了getProxyClass()或newProxyInstance()方法中参数
interfaces 指定的所有接口
D.动态代理类可以继承用户自定义的任意类
E.动态代理类都具有一个public 类型的构造方法,该构造方法有一个
InvocationHandler 类型的参数
5.在本章10.3.3 节(在远程方法调用中运用代理类)介绍的例子中,Connector
类位于服务器端还是客户端?(单选)
A.服务器端 B.客户端
6.在本章10.3.3 节(在远程方法调用中运用代理类)介绍的例子中,
HelloServiceProxy类位于服务器端还是客户端?(单选)
A.服务器端 B.客户端
7.运用本章介绍的动态代理机制,重新实现第1 章的EchoServer 服务器与
EchoClient客户,具体实现方式参照本章10.3.3节(在远程方法调用中运用代理类)所
介绍的例子。
答案:1.C 2.AC 3.BCD 4.ABCE 5.B 6.B
分享到:
相关推荐
这是一本关于Java反射机制论文集合的书。其中包含基本的理论及各种实例。... 关键字有:Java Java反射机制 Java反射 Java反射理论 Java反射实例 Java反射例子 反射原理 反射 网络论文 集合 汇总 总结 Class。
Java反射机制学习总结,附带程序示例。
java反射机制原理和反射机制总结!!! java反射机制原理和反射机制总结!!!
Java反射机制总结(实例分析) Java反射机制学习笔记
Java反射机制学习总结.doc
java反射机制总结
这是我自己地java反射机制的总结,在学习饿过程中自己的看法,以及学习的记录,希望能够帮助到大家!
自己总结的java反射机制的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合java的爱好者和学习者
java反射机制知识点总结
java反射机制总结
Java反射机制的学习总结.docx
Java高级程序设计 第3章 Java反射机制 3.1 应用场景 3.2 相关知识3.3 实施过程 3.4 拓展知识3.5 拓展训练 3.6 课后小结3.7 课后习题 3.8 上机实训 Java高级程序设计实战教程第三章-Java反射机制全文共15页,当前为第...
这是一年多以来学习java和在项目中遇到问题之后总结出的一系列资料。包含:java 反射机制 流 内存管理等信息。
Java 的反射机制是使其具有动态特性的非常关键的一种机制,也是在JavaBean 中广泛应用的一种特性。
文章目录Java ReflectionJava反射机制提供的功能Java反射相关的主要APIjava.lang.Class类Class类的核心要点Class类的重要API实例实例化Class类对象(四种方法)创建类对象并获取类的完整结构获取Class对象后创建类的...
JAVA中的反射机制(内含大量实例) JAVA中的反射机制(内含大量实例).doc
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的...这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。下面我们来一起学习一下吧
关于反射机制的原理什么的很详尽,经验总结精华奉献
本文介绍了JAVA反射类的基本概念,欢迎阅读学习,一起进步。 文章目录一.反射的基本概念二.反射常用类三.使用反射的基本步骤四.Class类讲解(1)Class类是反射机制的起源和入口(2)Class类存放类的结构信息(3)...