构造方法的获取

  1. 四个方法:getConstructors()获取所有的构造方法;

getConstructor(parameters)获取匹配参数的构造方法;

getDeclaredConstructors()仅获取类中所有真正的构造方法,不包括从父类继承的构造方法;

getDeclaredConstructor(parameters)仅获取类中匹配参数的所有真正的构造方法,不包括从父类继承的构造方法。

  2. 对于构造方法中参数为可变参数的情况,当调用getDeclaredConstructor(parameters)时,parameters应该是数组类型的Class对象,

例如 String[].class

3. 关于嵌套类的构造方法的调用

需要区分静态和非静态嵌套类两种情况,静态情况下,和一般的调用方法一样,非静态情况下则比较特殊。

(1)静态嵌套类

 package jichu;

 import java.lang.reflect.Constructor;

 /**
*@author 作者 Yu chenchen
*@version 创建时间:2017年4月28日 上午11:05:33
*类说明:
*/
public class TestReflection { public TestReflection(){ }
public TestReflection(String str) {
// TODO Auto-generated constructor stub
} //静态嵌套类
static class NestedClass{
public NestedClass(int i) {
// TODO Auto-generated constructor stub
}
} public void test() throws Exception{
Constructor<TestReflection> constructor = TestReflection.class.getDeclaredConstructor(String.class);
constructor.newInstance("ycc");
//获取静态嵌套类的构造方法
Constructor<NestedClass> constructor2 = NestedClass.class.getConstructor(int.class);
constructor2.newInstance(11); }
public static void main(String[] args) {
try {
new TestReflection().test();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }

(2)非静态嵌套类

对于非静态嵌套类来说,它的对象实例中有一个隐含的指向外部类对象的引用,靠这个引用可以访问外部类对象的私有域和方法,因此在获取非静态嵌套类的构造方法时,类型参数列表的第一个参数必须为外部类的Class对象。在获取到构造方法之后,调用newInstance()方法时,第一个参数应该为外部类对象的引用this,与调用getDeclaredConstructor()方法的第一个参数对应。

 package jichu;

 import java.lang.reflect.Constructor;

 /**
*@author 作者 Yu chenchen
*@version 创建时间:2017年4月28日 上午11:05:33
*类说明:
*/
public class TestReflection { public TestReflection(){ }
public TestReflection(String str) {
// TODO Auto-generated constructor stub
} //非静态嵌套类
class NestedClass{
public NestedClass(int i) {
// TODO Auto-generated constructor stub
}
} public void test() throws Exception{
Constructor<TestReflection> constructor = TestReflection.class.getDeclaredConstructor(String.class);
constructor.newInstance("ycc");
//获取非静态嵌套类的构造方法
Constructor<NestedClass> constructor2 = NestedClass.class.getConstructor(TestReflection.class,int.class);
constructor2.newInstance(this,11);
//或者
constructor2.newInstance(TestReflection.this,11); }
public static void main(String[] args) {
try {
new TestReflection().test();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }

Java反射基础(一)的更多相关文章

  1. java反射基础知识(四)反射应用实践

    反射基础 p.s: 本文需要读者对反射机制的API有一定程度的了解,如果之前没有接触过的话,建议先看一下官方文档的Quick Start. 在应用反射机制之前,首先我们先来看一下如何获取一个对象对应的 ...

  2. java反射基础知识(一)

    一.反射 反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...

  3. java反射(基础了解)

    package cn.itcast_01; /** *Person类 */ public class Person {    /** 姓名 */    private String name;     ...

  4. 深入解析Java反射基础

    博客原文:http://www.sczyh30.com/posts/Java/java-reflection-1/ - 这老哥写的特别好 一.回顾:什么是反射? 反射(Reflection)是Java ...

  5. Java 反射基础

    1.反射概念: Java运行时,动态获得类的信息以及动态调用对象的方法的功能. 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时调 ...

  6. java反射基础知识(五)反射应用实践

    详解Java反射各种应用   Java除了给我们提供在编译期得到类的各种信息之外,还通过反射让我们可以在运行期间得到类的各种信息.通过反射获取类的信息,得到类的信息之后,就可以获取以下相关内容: Cl ...

  7. java反射基础知识(三)

    原文地址:http://tutorials.jenkov.com/java-reflection/index.html http://www.cnblogs.com/penghongwei/p/329 ...

  8. java反射基础知识(二)

    1. 了解 Java 中的反射 1.1 什么是 Java 的反射 Java 反射是可以让我们在运行时获取类的函数.属性.父类.接口等 Class 内部信息的机制.通过反射还可以让我们在运行期实例化对象 ...

  9. 5、java反射基础

    Class对象: Class对象记录了所有与类相关的信息,当类加载器从文件系统中加载.class文件到JVM中的同时会为每一个类创建一个Class对象.通过Class对象可以获取到类的属性.方法.构造 ...

  10. 简介Java反射基础

    [参考资料: 疯狂Java讲义 Chapter 18] 1.类加载.连接.初始化 当Java程序需要某一个类时,如果该类尚未加载到内存中,系统会通过加载.连接.初始化三个步骤将该类加载到内存,并完成初 ...

随机推荐

  1. Unity Mono foreach BUG性能测试

    # 环境 - Unity 4.6.4 / Windows # 测试代码 # 结果数据 # 结论 foreach存在bug,会导致GC,并且效率低下: 使用GetEnumerator代替,没有GC,并且 ...

  2. 解决RegexKitLite编译报错

    原地址:http://blog.csdn.net/kepoon/article/details/7586861 在编译RegexKitLite的时候,报错如下: Undefined symbols f ...

  3. dubbo注冊zookepper奇妙IP_续

    原文章地址:http://blog.csdn.net/lele2426/article/details/39530409#4483369 后来server须要连接外网.配置DNS后又開始出现奇妙的IP ...

  4. vim 中Taglist的安装和使用

    将vim 改造成功能强大的IDE系列之二 『插件介绍』 Taglist是vim的一个插件,提供源代码符号的结构化视图. 效果图:(直接使用了别人的图片.在我机器上也差不多-) 『下载和安装』 1)从h ...

  5. Getting started with Chrome Dev Editor

    转自:https://github.com/GoogleChrome/chromedeveditor/blob/master/doc/GettingStarted.md Installation In ...

  6. cookie存中文

    cookie存取: 存: Cookie cookie = new Cookie("title",URLEncoder.encode("标题","utf ...

  7. canvas学习笔记(下篇) -- canvas入门教程--保存状态/变形/旋转/缩放/矩阵变换/综合案例(星空/时钟/小球)

    [下篇] -- 建议学习时间4小时  课程共(上中下)三篇 此笔记是我初次接触canvas的时候的学习笔记,这次特意整理为博客供大家入门学习,几乎涵盖了canvas所有的基础知识,并且有众多练习案例, ...

  8. JavaScript点击按钮显示 确认对话框

    //JavaScript点击按钮显示确认对话框 <html xmlns="http://www.w3.org/1999/xhtml"> <head> < ...

  9. sql自动增长标识(转载)

    sql自动增长标识   对于一个设了自动增长标识的数据表来说,它的字段的值是由数据库自动设置的:这在导数据时很麻烦.   当我们导数据时,我们往往想想将标识字段的数据也导进来,怎么办呢?   方法有两 ...

  10. Atitit.ati  str  字符串增强api

    Atitit.ati  str  字符串增强api 1. java StringUtils方法全览 分类: Java2011-11-30 17:22 8194人阅读 评论(2) 收藏 举报 javas ...