java 27 - 3 反射之 通过反射获取构造方法并使用
类 Constructor<T>:提供关于类的单个构造方法的信息以及对它的访问权限。
通过反射的方法获取构造方法并使用 ps:先忽略泛型
A.1:获取构造方法的数组:
public Constructor<?>[] getConstructors():获得所有公共构造方法
public Constructor<?>[] getDeclaredConstructors():获得所有构造方法
A.2:获取单个构造方法(用于非私有的构造方法)
public Constructor<T> getConstructor(Class<?>... parameterTypes)
参数表示的是:你要获取的构造方法的构造参数个数及数据类型的class字节码文件对象
A.3:获取单个构造方法(用于私有的构造方法)
public Constructor<T> getDeclaredtConstructor(Class<?>... parameterTypes)
B.1:初始化构造方法的实例:(用于非私有的构造方法)
public T newInstance(Object... initargs) 注意:T表示的是泛型,Object... initargs表示的是你要实例化的指定参数
使用此 Constructor对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
B.2:初始化构造方法的实例:(用于私有的构造方法)
先用: public void setAccessible(boolean flag):flag的值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。
再用: public T newInstance(Object... initargs)
代码:
A:public Constructor<?>[] getConstructors():获得所有公共构造方法
Constructor[] c1 = c.getConstructors();
System.out.println(c1);// 返回的是地址值,证明得到的是个数组对象
// 遍历这个数组
for (Constructor ct : c1) {
System.out.println(ct);
} //获得Person类中的所有公告构造方法
B:public Constructor<?>[] getDeclaredConstructors():获得所有构造方法
// B:public Constructor<?>[] getDeclaredConstructors():获得所有构造方法
Constructor[] c1 = c.getDeclaredConstructors();
//遍历数组
for(Constructor ct : c1){
System.out.println(ct);
} //获得Person类的所有构造方法
C:public Constructor<T> getConstructor(Class<?>... parameterTypes):获得指定的构造方法
获得无参构造方法:
Constructor c1 = c.getDeclaredConstructor();
System.out.println(c1);
获得带参构造方法:
//获取指定的构造方法,需要该方法的参数列表
Constructor c1 = c.getDeclaredConstructor(String.class,int.class,String.class);
System.out.println(c1);
D:public T newInstance(Object... initargs) 注意:T表示的是泛型,Object... initargs表示的是你要实例化的指定参数
使用此 Constructor对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
也就是初始化对象
通过反射获取公共带参构造方法并使用:
//获取指定的构造方法,需要该方法的参数列表
Constructor c1 = c.getDeclaredConstructor(String.class,int.class,String.class);
System.out.println(c1); // 通过带参构造方法对象创建对象
// public T newInstance(Object... initargs):
//有泛型,前面没使用泛型,先用Objcet
Object b = c1.newInstance("张三",13,"家乡");
System.out.println(b); //Person [name=张三, age=13, address=家乡]
通过反射获取私有带参构造方法并使用:
//获取指定的私有构造方法
Constructor c1 = c.getDeclaredConstructor(String.class); //public void setAccessible(boolean flag):
//flag的值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。
c1.setAccessible(true); // public T newInstance(Object... initargs)
Object ob = c1.newInstance("张三");
System.out.println(ob);
后两个代码,相当于以前的: 只不过通过反射,不需要导入对应的类
public Person(String name, int age, String address)
Person p = new Person("张三",13,"家乡");
System.out.println(p);
和
private Person(String name){}
Person p = new Person("风清扬");
System.out.println(p);
java 27 - 3 反射之 通过反射获取构造方法并使用的更多相关文章
- 【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】
方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; priva ...
- java 27 - 6 反射之 通过配置文件运行类中的方法
在以前,如果我们想要调用一个类中的方法,只能这样子: 例: 有Cat和Dog两个类,里面有eat和run两个成员方法: public class Dog { public void eat() { S ...
- JAVA基础 (二)反射 深入解析反射机制
在谈论到反射这个问题时,你是否有例如以下疑问? 不管是在.NET还是Java中反射的原理和机制是一样的,理解了一种还有一种就能够迎刃而解,想要理解反射首先须要了解底层的一些概念和执行.理解了反射有助于 ...
- Java 反射机制[Method反射]
Java 反射机制[Method反射] 接着上一篇Java 反射机制[Field反射],通过调用Person类的setName方法将obj的name字段的Value设置为"callPerso ...
- Java基础 -- 深入理解Java类型信息(Class对象)与反射机制
一 RTTI概念 认识Claa对象之前,先来了解一个概念,RTTI(Run-Time Type Identification)运行时类型识别,对于这个词一直是 C++ 中的概念,至于Java中出现RT ...
- Java高级篇(四)——反射
之前写到了设计模式的代理模式,因为下一篇动态代理等内容需要用到反射的知识,所以在之前Java篇的基础上再写一篇有关反射的内容,还是以实际的程序为主,了解反射是做什么的.应该怎么用. 一.什么是反射 反 ...
- XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)
XML序列化 #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...
- Java之旅(2)—反射
1. 概念 反射就是将java类中的各种成分映射成对应的java类.之前我们已经讲过了Class类,也明确了一个java类中用一个Class类的对象来表示,一个类中的组成部分有:成员变量,方法 ...
- 我对java的理解(二)——反射是小偷的万能钥匙
在我们生活中,车上或者路上有时候会遇到一种很讨厌的人——“小偷”,趁我们不注意或者疏忽的时候拿走属于我们的东西.更有甚者,趁我们不在家的时候,手持一把万能钥匙,打开我们的房门,悠闲的查看房间的布置,翻 ...
随机推荐
- UIColor与PatternImage
UIColor有一个方法叫做+ (UIColor *)colorWithPatternImage:(UIImage *)image;. 返回的是一个UIColor,但没有明确的RGB值,所以叫做pat ...
- Lock同步锁--线程同步
Lock-同步锁 Lock是java5提供的一个强大的线程同步机制--通过显示定义同步锁对象来实现同步.Lock可以显示的加锁.解锁.每次只能有一个线程对lock对象加锁. Lock有ReadLock ...
- .frame类库简单介绍与使用
.a静态库是Unix推出的,几乎所有平台都可以使用: .framework是Apple推出的,是对.a静态库的封装,方便使用. 1.新建framework类库项目 2.生成的类库中,自定义的源头文件需 ...
- Fragment中的按键监听
在Fragmentzhong中写按键监听,有两处处需要注意: 1)是否是当前显示的fragment:. 2)在所依托的activity中的onKeyDown方法处理监听事件: 其他地方和普通按键监听一 ...
- Android 4.4沉浸式状态栏的实现
要实现Android 4.4上面的沉浸式状态栏要用到开源项目SystemBarTint(https://github.com/hexiaochun/SystemBarTint) public clas ...
- UIApplication是什么
1.UIApplication对象是应用程序的象征 2.每一个应用都有自己的UIApplication对象,而且是单例的(只有一个) 3.通过[UIApplication sharedAppl ...
- UI控件闪灯
做出点一个控件然后他和他上下左右的4个控件一起变色. #import "ViewController.h" @interface ViewController () @end @i ...
- fir终端打包,亲测可用
1.注册fir.拿到token 2.安装 fir-cli 使用 Ruby 构建, 无需编译, 只要安装相应 gem 即可. $ ruby -v # > 1.9.3 $ gem install f ...
- iOS之 opencv3.0.framework
本文章的目的是从源代码包中编译出opencv2.framework供IOS开发使用. 基本上是按照http://docs.opencv.org/3.0-beta/doc/tutorials/intro ...
- json数组的序列化和反序列化json数组的序列化和反序列化
如题,我就不多说了,自己看代码的,很好理解 using System; using System.Collections.Generic; using System.Web; using System ...