构造方法的获取

  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. 算法笔记_050:硬币收集问题(Java)

    目录 1 问题描述 2 解决方案 2.1 动态规划法   1 问题描述 在n*m格木板中放有一些硬币,每格的硬币数目最多为一个,在木板左上方的一个机器人需要收集尽可能多的硬币并把它们带到右下方的单元格 ...

  2. ES6 for...of循环

    1.for of const arr = ['red', 'green', 'blue']; for(let v of arr) { console.log(v); // red green blue ...

  3. RecSys Challenge 2015

    [The Task] Given a sequence of click events performed by some user during a typical session in an e- ...

  4. 前端资源管理工具sourcetree

    https://www.sourcetreeapp.com/

  5. unity3d动态操作组件

    利用范型,动态操作组件(添加或删除) e.AddComponent<CubeTranslate> ();//动态添加组件 Destroy (e.GetComponent<CubeTr ...

  6. Linux 基础学习(第一节)

    IP地址的配置 配置临时IP地址 ifconfig etho 192.168.0.91 255.255.255.0 图形化下面配置IP地址: 重启网卡服务: shell环境配置网卡信息 必备的参数 关 ...

  7. js 获取距离顶部的相对高度

    getTop (e) { var offset=e.offsetTop; if(e.offsetParent!=null) offset+=this.getTop(e.offsetParent); r ...

  8. C 语言文件拷贝

    相关的方法: int fputs(const char*s,FILE *stream); int gets(char *s,int size,FILE *stream); 具体代码如下 /** *@a ...

  9. Java并发编程(五):Java线程安全性中的对象发布和逸出

    发布(Publish)和逸出(Escape)这两个概念倒是第一次听说,不过它在实际当中却十分常见,这和Java并发编程的线程安全性就很大的关系. 什么是发布?简单来说就是提供一个对象的引用给作用域之外 ...

  10. 纯真IP数据库解析Delphi D10.1下正常使用

    直接一个单元,代码分享出来. unit   Net.IPLocation; interface uses System.Classes, System.SysUtils, Winapi.WinSock ...