- 浏览: 20765 次
- 性别:
- 来自: 杭州
最新评论
文章来自: 博客浙江(blog.zj.com)
原文参考:http://jeplove.blog.zj.com/blog/d-229344.html
想生成对象的实体,在反射动态机制中有两种方法,一个针对无变量的构造方法,一个针对带参数的构造方法,,如果想调用无参数的构造函数直接调用Class类中的newInstance(),而如果想调用有参数的构造函数,则需要调用Constructor类中newInstance()方法,首先准备一个Class[]作为Constructor的参数类型。然后调用该Class对象的getConstructor()方法获得一个专属的Constructor的对象,最后再准备一个Object[]作为Constructor对象昂的newInstance()方法的实参。 在这里需要说明的是 只有两个类拥有newInstance()方法,分别是Class类和Constructor类,Class类中的newInstance()方法是不带参数的,而Constructro类中的newInstance()方法是带参数的需要提供必要的参数。
下面提供的代码是构造Customer2类的三个构造函数
java 代码
package cn.com.reflection;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
/**
* 在反射Reflection机制中,想生成一个类的实例有两种方法
* 一个是针对无参数的构造函数 ,另一个是针对有参数的构造函数
*
*/
public class ReflecTest3 {
/**
* 反射的动态性质之一: 运行期动态生成Instance
* @throws IllegalAccessException
* @throws InstantiationException
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws SecurityException
* @throws IllegalArgumentException
*/
public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, SecurityException, InvocationTargetException, NoSuchMethodException {
Customer2 customer=new Customer2();
Class cls=customer.getClass();
//获得Class所代表的对象的所有类型的构造函数Constructor的数组
Constructor ctor[]=cls.getDeclaredConstructors();
for(int i=0;i
//获得对应的构造函数参数列表的Class类型的数组
Class cx[]=ctor.getParameterTypes();
if(cx.length==0){
//无参的构造函数可以通过Class实例直接调用Class类的newInstance()方法
Object obj=cls.newInstance();
//同样也可以象以下这样构造,调用Constructor类的newInstance()方法
//Customer2 obj=(Customer2)cls.getConstructor(cx).newInstance(new Object[]{});
System.out.println(obj);
}else if(cx.length==2){
//此时只能调用Constructor类的newInstance()方法,注意:利用反射调用的是私有private的构造方法
Customer2 obj=(Customer2)cls.getConstructor(cx).newInstance(
new Object[]{new Long(123),"hejianjie"});
System.out.println(obj);
}else if(cx.length==3){
//此时只能调用Constructor类的newInstance()方法,注意:利用反射调用的是公有public的构造方法 Customer2 obj=(Customer2)cls.getConstructor(cx).newInstance(
new Object[]{new Long(133),"China-Boy",new Integer(21)});
System.out.println(obj);
}
}
}
}
class Customer2{
private Long id;
private String name;
private int age;
/**
* 无参数的构造函数
*
*/
public Customer2(){
}
/**
* public修饰的有参数的构造函数,3个参数
* @param id
* @param name
* @param age
*/
public Customer2(Long id,String name,int age){
this.id=id;
this.name=name;
this.age=age;
}
/**
* public修饰的构造函数,2个参数
* @param id
* @param name
*/
public Customer2(Long id,String name){
this.id=id;
this.name=name;
this.age=age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString(){
return ("id=="+this.getId()+" Name=="+this.getName()+" Age:"+this.getAge());
}
}
程序执行结果如下:
java 代码
id==123 Name==hejianjie Age:0
id==133 Name==China-Boy Age:21
id==null Name==null Age:0
显然,第一行是执行的两个参数的构造函数,int类型的age初始化为0,第二行执行的是带三个参数的构造函数,最后,第三行执行的是无参数的构造函数。,Long,String类型的id,name都初始化为null,而int类型的age初始化为0。
发表评论
-
Java反射经典实例 Java Reflection
2009-11-18 10:12 737http://jeplove.blog.zj.com/blog ... -
JProfiler试用手记
2009-04-13 16:00 800JProfiler是一款Java的性能监控工具。可以查看当前应 ... -
优化SQL的另一种思维1 性能调整综述
2009-04-12 17:34 1257作者: Peak Wong, 出处:IT专家网, 责任编辑: ... -
利用Oracle 10g SQL优化器(STA)优化语句(1)
2009-04-12 16:57 1774作者: fuyuncat 来源: w ... -
JAVA基础--JAVA中的反射机制详解
2009-02-25 22:41 737JAVA反射机制 JAVA反射机制是在运行状态中,对于任 ... -
Java中int和Integer的区别详解
2009-02-23 21:18 1101Java中int和Integer关系是比较微妙的。关系如下: ... -
Portal(门户)是什么--IT术语
2009-02-23 21:12 3056Portal 的组成可以分为 ... -
StringBuilder类
2009-02-20 21:40 12591.3 StringBuilder类 一个String对象 ... -
Java的内存泄漏
2009-02-20 18:13 761一 问题的提出 Java ... -
JDK核心API:Java1.5语言新特性简单总结
2009-02-20 18:05 9661. 自动装箱与拆箱 对应C# 例1.1 ... -
优秀Java程序员必须了解GC的工作原理
2009-02-20 17:57 852一个优秀的Java程序员必 ... -
转:大型互联网网站架构心得之一
2009-02-06 22:10 1092我们知道,对于一个大 ... -
一 CVS服务器的安装:
2008-12-28 18:43 1320一 CVS服务器的安装: 1。查看你的操作系统上是否安装了C ... -
Jive论坛与Spring框架的经典结合
2008-12-28 15:42 931没有一种新技术是凭空诞生的,它的萌芽或胚胎总是或多或少显现于以 ... -
开源技术分析:AOP和Spring事务处理
2008-12-27 22:01 758一.为什么要用框架 ...
相关推荐
精华java-反射机制-reflection-完整例子-具体说明-工程实际(完整版).doc
Java 反射机制、Java 的类反射机制、Java 反射机制的学习、Java 反射Reflection--运行时生成实例 java反射机制的手册文档
java 反射实战demo,Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。...
java 反射详解,详细解释了反射机制的运用
php-phpdocumentor-reflection-docblock5-5.2.0-1.el7.remi.noarch.rpm
php-phpdocumentor-reflection-docblock5-5.1.0-1.el7.remi.noarch.rpm
php-phpdocumentor-reflection-common2-2.2.0-1.el7.remi.noarch.rpm
java-reflection-annotation-test 探索java反射和注解之美
Java Reflection (JAVA反射)详解
Reflection是Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。
浪曦经典Java代码--反射+代理reflection_proxy源码 优秀代码,值得java学习者学习!
Reflection 是Java被视为动态(或准动态)语言的一个关键性质。本文借由实例,大面积示范Reflection APIs
java-reflection-playground
Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。 Java 的这一能力在...
圣思园 reflection(Java反射) 课件 圣思园 reflection(Java反射) 课件 圣思园 reflection(Java反射) 课件
PDF格式的,JAVA反射机制详细介绍,最后还有练习题
Java反射经典实例 Java Reflection Cookbook[1].docx.pdf
Java Reflection (JAVA反射.mht
标签:alheli-reflection-1.1.jar.zip,alheli,reflection,1.1,jar.zip包下载,依赖包
1.反射机制概述 java能够反射的前提:已经加载过这个类 反射可以通过类名来寻找这个类的所有相关信息、类似于人类的记忆,事先在记忆中有了这...在运行时调用任意一个对象的成员变量和方法生成动态代理 java反射机制的