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反射《二》获取构造器的更多相关文章

  1. java反射之获取所有方法及其注解(包括实现的接口上的注解),获取各种标识符备忘

    java反射之获取类或接口上的所有方法及其注解(包括实现的接口上的注解) /** * 获取类或接口上的所有方法及方法上的注解(包括方法实现上的注解以及接口上的注解),最完整的工具类,没有现成的工具类 ...

  2. java反射机制获取自定义注解值和方法

    由于工作需求要应用到java反射机制,就做了一下功能demo想到这些就做了一下记录 这个demo目的是实现动态获取到定时器的方法好注解名称,废话不多说了直接上源码 1.首先需要自定义注解类 /** * ...

  3. Java反射03 : 获取Class的注解、修饰符、父类、接口、字段、构造器和方法

    java.lang.Class类提供了获取类的各种信息对象的静态方法. 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79363921 ...

  4. Java反射机制获取Class文件

    JAVA反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象方法的功能称为 ...

  5. java反射之获取类的基本信息(一)

    一.反射原理. Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据“类的部分已经的信息”来还原“类的全部的信息”.这里“类的部分已经的信息”,可以是“类名”或“类的对象”等信息.“类的全部 ...

  6. java反射之获取枚举对象

    项目中导入大量枚举对象,用来定义常量.随着带来一个问题,就是每个枚举类都需要通过key来获取对应枚举的需求. public enum ExamType { CRAFT(1, "草稿" ...

  7. 深入分析Java反射(二)-数组和枚举

    前提 Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行 ...

  8. Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)

    反射技术其实就是动态加载一个指定的类,并获取该类中的所有内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员,简单来说:反射技术可以对一个类进行解剖,反射大大增强 ...

  9. 通过java反射机制获取该类的所有属性类型、值

    转自:http://blog.csdn.net/sd4000784/article/details/7448221 方法使用了这俩个包下的 field 和method import Java.lang ...

  10. java反射(二)--反射应用案例

    一.反射实例化对象 经过一系列的分析之后发现虽然可以获取Class类的实例化对象,但是依然觉得这个对象的获取意义不是很大,因此可以通过以下几个案例去理解反射的核心意义--反射实例化对象:获取Class ...

随机推荐

  1. HDU 2569(简单的递推)

    彼岸 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  2. Flask请求上下文request

  3. Golang简单日志类

    实现简单的日志写入文件功能运行环境:golang1.4.2+win7x64golang1.4.2+centos6.5×64 package Helper import ( “fmt” “log” “o ...

  4. flex属性的学习

    1.需要记住的属性和值. ------------------------------------------------------------- 方向横和纵 flex-direction: row ...

  5. C# 中 ? 和 ??

    a??2 等价于 a==null?2:a 原文:https://blog.csdn.net/szx1999/article/details/50996495

  6. 记 linux 下面初次使用的convert 工具完成拼长图功能

    今天,遇到了一个需要把大量图片合并到一个长图的功能.本来找了各种图片处理界顶顶大佬.. “PS(手动一张张 的加).光影魔术手(批处理功能没有看到拼图功能).美图秀秀(可以有个拼图,限制30张,而且需 ...

  7. kernel_thread简析

    1.3.100static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags){    lon ...

  8. hihocoder-1407 后缀数组二·重复旋律2 不重合 最少重复K次

    后缀数组不能直接通过Height得出不重合的公共串.我们可以二分k值,这样连续的Height只要都大于等于k,那他们互相间的k值都大于等于k.每个这样的连续区间查找SA的最大最小值,做差判断是否重合( ...

  9. 小程序获取openid 小程序授权

    小程序获取openid 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系. wx.login(Object object) 调用接口获取登录凭证(cod ...

  10. http bass

    1.http 是超文本传输协议,是从万维网服务器传输超文本到本地浏览器的传输协议 2.http是一个基于tcp/ip通信协议来传输数据(html,图片,查询结果等) 3.一个完整的http请求包含7个 ...