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程序需要某一个类时,如果该类尚未加载到内存中,系统会通过加载.连接.初始化三个步骤将该类加载到内存,并完成初 ...
随机推荐
- 算法笔记_088:蓝桥杯练习 8-1因式分解(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 设计算法,用户输入合数,程序输出若个素数的乘积.例如,输入6,输出2*3.输入20,输出2*2*5. 样例 与上面的样例输入对应的输出. ...
- Java学习笔记1、常用dos命令
cd 改变当前目录 sys 制作DOS系统盘 copy 拷贝文件 del 删除文件 deltree 删除目录树 dir 列文件名 diskcopy 制磁盘 edit 文本编辑 format ...
- CSS总结:
给一个div加上边框,为了让他能看到边框,给他加上颜色 border: 2px solid; border-color: #00a1e9; solid表示实线边框.没有这个看不到边框. {border ...
- Spring+Hibernate整合
因为整合spring和hibernate所以,需要用到spring里面复写Hibernate的类以有DI和IOC特性 db.sql hibernate_basic数据库 表 person 字段 pid ...
- esriControlsMousePointer常量
控制鼠标指针选项. 不变 值 描述 esriPointerParentWindow -1 指针指定的父窗口或窗体. esriPointerDefault 0 默认指针,箭头一样. esriPointe ...
- 记一次.net core调用SOAP接口遇到的问题
背景 最近需要将一些外部的Web Service及其他SOAP接口的调用移到一个独立的WebAPI项目中,然后供其他.Net Core项目调用.之前的几个Web Service已经成功迁 ...
- Exif.js获取图片的详细信息(苹果手机移动端上传图片旋转90度)
Exif.js插件介绍 http://code.ciaoca.com/javascript/exif-js/ iOS手机竖着拍的照片经过前端处理之后被旋转了90°的原因以及解决方案 https://w ...
- laravel中,提交表单后给出提示例如添加成功,添加失败等等
laravel中的表单插入,我想在表单插入成功后,可以像thinkphp一样可以有一个提示内容,上网Google,他们还是给出的方法就是 return redirect('/')->with(' ...
- app store上传图片显示错误:未能创建 屏幕快照
在iTunes Connect中加入一个app后.加入屏幕快照时,依照要求的尺寸上传照片成功,可是在保存的时候提示"未能创建Screenshots for 4-inch iPhone5 an ...
- C#反射取数组单个元素的类型
去bing上查了一下,果然有和我一样蛋疼的朋友,他们在论坛研究了半天,最后还是暴力解决: public Type GetArrayElementType(Type t) { string tName ...