一个类有多个组成部分,例如:成员变量,方法,构造方法等。反射就是加载类,并解剖出类的各个组成部分。下面就详细介绍构造器器解剖的方法。
案例如下:首先创建一个普通的Java类Student类,该类位于cn.csdn.reflect包中并编译产生相应的class文件.下面就是该类中各种构造器解剖的方式如下:
//第一:怎么知道 Student类中有哪些构造器呢?方法如下:
@Test
public void test3()throws Exception{
//1、加载类 ("cn.csdn.reflect.Student"为包名和类名)
Class cls = Class.forName("cn.csdn.reflect.Student");
//2、获取加载类中的所有的构造器
Constructor csr[] = cls.getConstructors();
//3、遍历构造器csr
for(Constructor c:csr){
//打印出构造器参数的类型及构造器名称
System.out.println(c.toGenericString());
}
// 解析:public Student()构造器
@Test
public void test1() throws Exception{
// 1、加载类 ("cn.csdn.reflect.Student"为包名和类名)
Class cls = Class.forName("cn.csdn.reflect.Student");
// 2、通过无参数的构造器解析
Constructor constructor = cls.getConstructor(null);
// 3、创建类的实例
Student entity = (Student) constructor.newInstance(null);
//4、调用对象的方法
entity.study();
}
//解析:public Student(String name,int age);构造器
@Test
public void test2()throws Exception{
//1、加载类 ("cn.csdn.reflect.Student"为包名和类名)
Class cls = Class.forName("cn.csdn.reflect.Student");
//2、通过带有参数的构造器解析
Constructor constructor = cls.getConstructor(String.class,int.class);
//3、创建类实例
Student entity = (Student)constructor.newInstance("redarmy",90);
//4、调用方法
entity.study();
System.out.println(entity.getName());
}
//解析:public cn.csdn.reflect.Student(java.lang.String[])构造器
@Test
public void test4()throws Exception{
//1、加载类
Class cls = Class.forName("cn.csdn.reflect.Student");
//2、根据构造器参数类型获取相应的构造器对象
Constructor csr = cls.getConstructor(String[].class);
String str[]={"111","123"};
//3、创建实体对象
Student entity = (Student)csr.newInstance((Object)str);
/*如果以上不明白请参考:Java反射中java.lang.IllegalArgumentException: wrong number of arguments的解析*/
[url]http://redarmychen.javaeye.com/blog/924134
[/url]
//4、调用方法
entity.study();
}
//解析 private Student(List list)构造器
@Test
public void test5()throws Exception{
//1、加载类
Class cls = Class.forName("cn.csdn.reflect.Student");
//2、根据构造器参数类型获取相应的构造器对象
Constructor csr = cls.getDeclaredConstructor(List.class);
//采用此法获取private修饰的构造器
csr.setAccessible(true);//强制解析private修饰的构造器
//3、创建实体对象
Student entity = (Student)csr.newInstance(new ArrayList());
//4、调用方法
entity.study();
}
[更多原创资源分享][资源下载]
以上内容归redarmy_chen原创,版权归redarmy_chen所有不得随意转载 如有问题请发送邮件到redarmy_chen@qq.com
分享到:
相关推荐
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。...
Java高级程序设计 第3章 Java反射机制 3.1 应用场景 3.2 相关知识3.3 实施过程 3.4 拓展知识3.5 拓展训练 3.6 课后小结3.7 课后习题 3.8 上机实训 Java高级程序设计实战教程第三章-Java反射机制全文共15页,当前为第...
山东大学--局部解剖--重点
川大华西--神经解剖学---神经系统发生.pptx
Java反射机制是在运行状态中的 对于任意一个类,都能够知道这个类的所有属性和方法(动态获取的信息); 对于任意一个对象,都能调用它的任意一个方法和属性(动态调用对象的方法) 这种动态获取的信息以及...
C语言深度解剖--中级程序员必经之路 你不得不下的资源
C 语言深度解剖 -------------------解开程序员面试笔试的秘密 以含金量勇敢挑战国内外同类书籍 陈正冲编著 石虎审阅 很好的讲解了c语言的难点
java redis源码 anatomy-lettuce 庖丁解架构之 Redis Java 客户端 Lettuce 架构解剖和源码精读相关代码
C语言深度解剖(第2版)解开程序员面试笔试的秘密-陈正冲-第二版-高清-带书签目录 完整版.pdf《C语言深度解剖:解开程序员面试笔试的秘密(第2版)》由作者结合自身多年嵌入式C语言开发经验和平时讲解C语言的心得体会...
解剖-顺口溜--整合版(非常全).docx
行业文档-设计装置-解剖教研台.zip
0基础的就不要看了,此书不适合入门。都是一些在平时容易忽略的问题
C语言深度解剖--解开程序员面试笔试的秘密.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
C语言深度解剖 深层次解析C语言 希望对学习有帮助
c语言深度解剖--解开程序员面试笔试的秘密 陈正冲(扫描版)
机械构造解剖图鉴 家庭小器件的构造详解!超实用
带全书签,高清
C 语言深度解剖--解开程序员面试笔试的秘密 以含金量勇敢挑战国内外同类书籍
大学生-系统解剖学-期末重点