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. Java HashMap 遍历、删除、排序

    首先创建一个map对象,并依次放入几个测试数据 HashMap<String, Integer> map = new HashMap<String, Integer>(); m ...

  2. 06-python-生成器、循环器

    生成器 生成器(generator)的主要目的是构成一个用户自定义的循环对象. 生成器的编写方法和函数定义类似,只是在return的地方改为yield.生成器中可以有多个yield.当生成器遇到一个y ...

  3. Unity---资源管理中不同资源的路径获取方式

    1.首先需要先了解两个知识点: Unity内置的文件路径获取方式.windows的Directory.GetFiles文件获取方式:   1>Unity内置的文件路径获取方式,一下是官方解释:h ...

  4. Netty实现简易http_server

    Netty可以通过一些handler实现简单的http服务器.具体有三个类,分别是HttpServer.java.ServerHandlerInit.java.BusiHandler.java. 具体 ...

  5. fiddler学习笔记&&基本使用

    周末在网上找了些fiddler相关的资料来看,学习下如何使用这个工具(平时接口测试用得比较多,在没有接口文档的情况下,可以通过抓包工具来提取需要测试的接口,ps.好久没写博客了,争取5月结束前再写2篇 ...

  6. GROUP by 方法  C#

    1.用两层循环计算,前提条件是数据已经按分组的列排好序的. DataTable dt = new DataTable(); dt.Columns.AddRange(new DataColumn[] { ...

  7. English trip V1 - B 4.How Do You Make a Salad? 请给我一间房? Teacher:Julia Key:imperatives 祈使句

    In this lesson you will learn to give instructions. 这节课你将将学会给出指示. 课上内容(Lesson) 词汇(Key Word ) bell pe ...

  8. python全栈开发,Day1(python介绍,变量,if,while)

    python基础一 一,Python介绍 python的出生与应用 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为 ...

  9. mysql知识点总结

    一.mysql_connect(),在php7已移除,有mysqli_connect(),pdo,代替. <?php header("Content-type:text/html;ch ...

  10. QQ企业邮箱接口

    我推荐的这篇文章很好:http://wenku.baidu.com/link?url=KQIMyrECGb8GS_0fag4PRG64M8Z7wOLbsU1f3BhydXAyYJDC2JMHEuVcy ...