Java反射《二》获取构造器
package com.study.reflect; import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException; /**
* 通过类来反射出构造器。
* @ClassName: ConstructorDemo
* @author BlueLake
* @date 2015年8月13日 下午5:16:07
*/
public class ConstructorDemo { public static void main(String[] args) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Class c = Student.class; //getConstructors()public修饰的构造方法
Constructor[] cons = c.getConstructors();
for(Constructor con:cons){
System.out.println(con);
/*
* public com.study.reflect.Student(java.lang.String,int)
public com.study.reflect.Student()
*/
} System.out.println("---------------------------------"); //getDeclaredConstructors()包括私有的方法
Constructor[] cons2 = c.getDeclaredConstructors();
for(Constructor con:cons2){
System.out.println(con);
/*
* private com.study.reflect.Student(java.lang.String)
public com.study.reflect.Student(java.lang.String,int)
public com.study.reflect.Student()
*/
}
System.out.println("------****************-----------");
//获取指定参数的构造器
Constructor one = c.getConstructor(int.class);
System.out.println(one);//public com.study.reflect.Student(int)
Class[] cls = one.getParameterTypes();
for(Class cl:cls){
System.out.println(cl);//int
System.out.println(cl.getName());//int
System.out.println(cl.getSimpleName());//int
} Constructor two = c.getDeclaredConstructor(String.class,int.class);
Class[] cls2 = two.getParameterTypes();
for(Class cl:cls2){
//输出类class标识和类全名。
System.out.println(cl);//class java.lang.String
//输出参数的类全名
System.out.println(cl.getName());//java.lang.String
//输出参数的类简化名
System.out.println(cl.getSimpleName());//String
} //通过参数数组来获得构造器
Class[] params = new Class[2];
params[0] = String.class;
params[1] = int.class;
Constructor three = c.getDeclaredConstructor(params ); /**
* 通过获得的构造器来创建对象
*/
Object objone = one.newInstance(18);
if(objone instanceof Student){
Student stu = (Student)objone;
System.out.println(stu.getAge());
} Object objtwo = two.newInstance("项羽",27);
if(objtwo instanceof Student){
Student stu = (Student)objtwo;
System.out.println(stu.getName()+"..."+stu.getAge());//项羽...27
} Object objthree = three.newInstance("曹操",56);
if(objthree instanceof Student){
Student stu = (Student)objthree;
System.out.println(stu.getName()+"..."+stu.getAge());//曹操...56
}
}
}
Java反射《二》获取构造器的更多相关文章
- java反射之获取所有方法及其注解(包括实现的接口上的注解),获取各种标识符备忘
java反射之获取类或接口上的所有方法及其注解(包括实现的接口上的注解) /** * 获取类或接口上的所有方法及方法上的注解(包括方法实现上的注解以及接口上的注解),最完整的工具类,没有现成的工具类 ...
- java反射机制获取自定义注解值和方法
由于工作需求要应用到java反射机制,就做了一下功能demo想到这些就做了一下记录 这个demo目的是实现动态获取到定时器的方法好注解名称,废话不多说了直接上源码 1.首先需要自定义注解类 /** * ...
- Java反射03 : 获取Class的注解、修饰符、父类、接口、字段、构造器和方法
java.lang.Class类提供了获取类的各种信息对象的静态方法. 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79363921 ...
- Java反射机制获取Class文件
JAVA反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象方法的功能称为 ...
- java反射之获取类的基本信息(一)
一.反射原理. Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据“类的部分已经的信息”来还原“类的全部的信息”.这里“类的部分已经的信息”,可以是“类名”或“类的对象”等信息.“类的全部 ...
- java反射之获取枚举对象
项目中导入大量枚举对象,用来定义常量.随着带来一个问题,就是每个枚举类都需要通过key来获取对应枚举的需求. public enum ExamType { CRAFT(1, "草稿" ...
- 深入分析Java反射(二)-数组和枚举
前提 Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行 ...
- Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)
反射技术其实就是动态加载一个指定的类,并获取该类中的所有内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员,简单来说:反射技术可以对一个类进行解剖,反射大大增强 ...
- 通过java反射机制获取该类的所有属性类型、值
转自:http://blog.csdn.net/sd4000784/article/details/7448221 方法使用了这俩个包下的 field 和method import Java.lang ...
- java反射(二)--反射应用案例
一.反射实例化对象 经过一系列的分析之后发现虽然可以获取Class类的实例化对象,但是依然觉得这个对象的获取意义不是很大,因此可以通过以下几个案例去理解反射的核心意义--反射实例化对象:获取Class ...
随机推荐
- angular7 + d3 显示svg
汇总一些之前没有注意到的问题 总体思路: app只是显示svg为主,接收后端推送的数据改变,显示变化后的svg. 因此,只用d3的数据绑定更新组件里<svg></svg>节点. ...
- centos7在upgrade的时候显示:Delta RPMs disabled because /usr/bin/applydeltarpm not installed
前面安装信息,太多,省略 总计:113 MIs this ok [y/d/N]: yDownloading packages:Delta RPMs disabled because /usr/bin/ ...
- 虚拟机vmnet0、vmnet1和vmnet8的区别
vmnet0,实际上就是一个虚拟的网桥 vmnet0,实际上就是一个虚拟的网桥,这个网桥有很若干个端口,一个端口用于连接你的Host,一个端口用于连接你的虚拟机,他们的位置是对等的,谁也不是谁的网关. ...
- HG255D 刷机备忘
<该死的系统,就是不重启.这文章也没意义了> 1.前期固件准备:①软件:XXXXX.bin②openwrt固件:XXXX.bin(我用的是shcl版的,感觉还不错,你也可以刷其他版本的) ...
- Spring 拦截器实现+后台原理(MethodInterceptor)
MethodInterceptor MethodInterceptor是AOP项目中的拦截器(注:不是动态代理拦截器),区别与HandlerInterceptor拦截目标时请求,它拦截的目标是方法. ...
- ERROR org.redisson.client.handler.CommandDecoder - Unable to decode data. channel
一.异常出现的场景 某一天下午,测试突然跑过来说,IOS系统APP访问500,Android没问题.我的第一反应是那就奇怪了,调的接口都是一样的,莫非和系统有关系.而且这个错误重启服务后,过一段时间才 ...
- LeetCode--006--Z字型变换(java)
将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R E T ...
- linux文件管理之查找
1 文件查找 1.1 which 查找可执行文件的路径which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件[root@www ~]# which [-a] com ...
- caffe---mnist数据集训练与测试
1.数据.mnist_test_lmdb和mnist_train_lmdb数据 2.路径. (1)修改lenet_train_test.prototxt文件,训练和测试两处 source: " ...
- Robot Movement(机器人移动)
中文标题[机器人移动] 这个题目是 Kayak 发布的代码挑战题目. 我认为题目本身描述的不是十分清楚,方法需要返回结果,但是结果没有说明是机器人最后的坐标位置,还是最后的坐标位置距离原点的距离.同时 ...