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程序需要某一个类时,如果该类尚未加载到内存中,系统会通过加载.连接.初始化三个步骤将该类加载到内存,并完成初 ...
随机推荐
- [Exception IOS 4] - could not build module 'foundation'
出现这个问题首先百度找到的是:http://www.cocoachina.com/bbs/read.php?tid=188086 然后在blog中能找到链接:http://stackoverflow. ...
- (三)Solr——Solr的基本使用
1. Schema.xml 在schema.xml文件中,主要配置了solrcore的一些数据信息,包括Field和FieldType的定义等信息,在solr中,Field和FieldType都需要先 ...
- memcache stats命令详解
参数不算多,我们来启动一个Memcache的服务器端: /usr/local/bin/memcached -d-m 10 -u root-l 192.168.0.200-p 12000-c 256- ...
- ubuntu下ssh设置firefox用的反向代理
mark一下: ssh -D 127.0.0.1:8080 -l root MyIp
- Unity中差乘判断目标是否在左边或右边
使用差乘判断左右一般是比较差乘的y,小于0是左,大于0是右.特殊情况可以用其他分量来比较 默认情况: var cross = Vector3.Cross(lhsObject.transform.pos ...
- [k8s]kubelet最佳实战
kubelet端口解析: 10250 –port: kubelet服务监听的端口,api会检测他是否存活 10248 –healthz-port: 健康检查服务的端口 10255 –read-only ...
- vncviewer鼠标不同步问题
sh-4.1# virsh edit win7 把下面的参数: <input type='mouse' bus='ps2'/> 改成: <input type='tablet' bu ...
- 0045 Spring中使用DataSourceTransactionManager进行事务管理的xml配置
在一个业务的实现过程中,可能需要多条sql完成对数据库的操作,比如账户登录,需要匹配用户名和密码,然后要增加积分,还要记录登录的ip和时间,这可能需要三个sql语句,这三个语句应当是一个整体,任意一个 ...
- 关于 web中 使用 java.net.URLEncoder.encode 要编码两次呢 , js的encodeURIComponent 同理
因为在jsp中对中文进行了编码的时候用的是UTF-8的编码方式,而在servlet中调用request.getParameter();方法的时候使用服务器指定的原始编码格式(ISO-8859-1)自动 ...
- Vue 混合
混合(mixins)是一种分发vue组件中可复用功能的非常灵活的方式.混合对象可以可以包含任意组件选项.以组件使用混合对象时,所有混合对象的选项将被混合到该组件本身的选项. //定义一个混合对象 va ...