Java反射基础(一)
构造方法的获取
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反射基础(一)的更多相关文章
- java反射基础知识(四)反射应用实践
反射基础 p.s: 本文需要读者对反射机制的API有一定程度的了解,如果之前没有接触过的话,建议先看一下官方文档的Quick Start. 在应用反射机制之前,首先我们先来看一下如何获取一个对象对应的 ...
- java反射基础知识(一)
一.反射 反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...
- java反射(基础了解)
package cn.itcast_01; /** *Person类 */ public class Person { /** 姓名 */ private String name; ...
- 深入解析Java反射基础
博客原文:http://www.sczyh30.com/posts/Java/java-reflection-1/ - 这老哥写的特别好 一.回顾:什么是反射? 反射(Reflection)是Java ...
- Java 反射基础
1.反射概念: Java运行时,动态获得类的信息以及动态调用对象的方法的功能. 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时调 ...
- java反射基础知识(五)反射应用实践
详解Java反射各种应用 Java除了给我们提供在编译期得到类的各种信息之外,还通过反射让我们可以在运行期间得到类的各种信息.通过反射获取类的信息,得到类的信息之后,就可以获取以下相关内容: Cl ...
- java反射基础知识(三)
原文地址:http://tutorials.jenkov.com/java-reflection/index.html http://www.cnblogs.com/penghongwei/p/329 ...
- java反射基础知识(二)
1. 了解 Java 中的反射 1.1 什么是 Java 的反射 Java 反射是可以让我们在运行时获取类的函数.属性.父类.接口等 Class 内部信息的机制.通过反射还可以让我们在运行期实例化对象 ...
- 5、java反射基础
Class对象: Class对象记录了所有与类相关的信息,当类加载器从文件系统中加载.class文件到JVM中的同时会为每一个类创建一个Class对象.通过Class对象可以获取到类的属性.方法.构造 ...
- 简介Java反射基础
[参考资料: 疯狂Java讲义 Chapter 18] 1.类加载.连接.初始化 当Java程序需要某一个类时,如果该类尚未加载到内存中,系统会通过加载.连接.初始化三个步骤将该类加载到内存,并完成初 ...
随机推荐
- CSS之word-break : break-all
CSS之word-break : break-all 强制英文单词断行 div{ word-break:break-all; } 强制不换行 div{ white-space:nowr ...
- [Mybatis - 1A] - Cause: java.sql.SQLException: Column count doesn't match value count at row 1
严重: Servlet.service() for servlet [springMVC] in context with path [/ExceptionManageSystem] threw ex ...
- oracle 查询 函数练习
/*--以下代码是对emp表进行显示宽度设置col empno for 9999;col ename for a10;col job for a10;col mgr for 9999; col hir ...
- Windows 10 KMS 激活方法
本篇文章由:http://xinpure.com/windows-10-activate-method/ 摘抄: http://www.nruan.com/win-key.html 须知:如果需要在线 ...
- iOS10相册相机闪退bug
iOS10系统下调用系统相册.相机功能,遇到闪退的情况,描述如下: This app has crashed because it attempted to access privacy-sensit ...
- 创建cocos2d-x+lua项目
1> 创建cocos2d-x+lua项目 进入到cocos2d-x-2.1.5\tools\project-creator文件夹运行下面命令: python create_project ...
- Kafka 快速起步
Kafka 快速起步 原创 2017-01-05 杜亦舒 性能与架构 性能与架构 性能与架构 微信号 yogoup 功能介绍 网站性能提升与架构设计 主要内容:1. kafka 安装.启动2. 消息的 ...
- unity5, UI Button "On Button Down"
unity5自带的UI Button的Inspector面板中只有On Click事件,如果我们想让一个按钮响应On Button Down事件该怎么办呢?方法是: 点Add Component-&g ...
- atitit.userService 用户系统设计 v5 q330
atitit.userService 用户系统设计 v5 q330 1. 新特性1 2. Admin login1 3. 用户注册登录2 3.1. <!-- 会员注册使用 --> 商家 ...
- 解决Jenkins无法编译Egret5.0项目的问题
问题的原因可查看:https://blog.csdn.net/sujun10/article/details/75512929 解决 造成这个问题的原因是用户权限分配,你可以通过下面几步解决,而非改e ...