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 ...
随机推荐
- C++之初体验
#include<iostream> using namespace std; int main() { cout<<" Hello imooc "< ...
- (转)C# 的三种序列化方法
序列化是将一个对象转换成字节流以达到将其长期保存在内存.数据库或文件中的处理过程.它的主要目的是保存对象的状态以便以后需要的时候使用.与其相反的过程叫做反序列化. 序列化一个对象 为了序列化一个对象, ...
- 如何通过ssh远程登录内网的Mac和Linux系统?
神器:ngrok 用法很简单,安装后 验证授权: ./ngrok authtoken 3WWujp1TEtHRo6rphEi5Y_7MBqGWm9yThCSFyqEHgip 在内网开启tcp服务 ng ...
- java ----> 基础之位运算
package test.ant; import java.util.Arrays; import java.io.UnsupportedEncodingException; public class ...
- EntityFramework的安装
关于EntityFramework在vs2012无法引用的问题 这段时间学习MVC,发现一个问题,我公司的电脑可以直接引用EntityFrameWork这个命名空间,但我家里面的电脑就不能直接引用,刚 ...
- POJ-3107 Godfather 求每个节点连接的联通块数量
dp[n][2],维护儿子的联通块数量和父亲的联通块数量. 第一遍dfs求儿子,第二遍dfs求爸爸. #include<iostream> #include<cstring> ...
- wdcp环境redis的位置
- Sonya and Matrix CodeForces - 1004D (数学,构造)
http://codeforces.com/contest/1004/problem/D 题意:网格图给定到中心点的曼哈顿距离数组, 求该图n,m及中心点位置 首先可以观察到距离最大值mx一定在某个角 ...
- 串的模式匹配算法 ------ KMP算法
//KMP串的模式匹配算法 #include <stdio.h> #include <stdlib.h> #include <string.h> int* get_ ...
- spring boot 创建web项目并使用jsp作前台页面
参考链接:https://www.cnblogs.com/sxdcgaq8080/p/7712874.html