获取类中的构造器

需求:通过反射来获取某一个类的构造器:

1):获取该类的字节码对象.

2):从该字节码对象中去找需要获取的构造器.

------------------------------------------------------------------------

Class类获取构造器方法:

Constructor类:表示类中构造器的类型,Constructor的实例就是某一个类中的某一个构造器

publicConstructor<?>[] getConstructors():该方法只能获取当前Class所表示类的public修饰的构造器

publicConstructor<?>[] getDeclaredConstructors():获取当前Class所表示类的所有的构造器,和访问权限无关

publicConstructor<T> getConstructor(Class<?>... parameterTypes):获取当前Class所表示类中指定的一个public的构造器

      参数:parameterTypes表示:构造器参数的Class类型

      如:public User(String name)

        Constructor c =  clz.getConstructor(String.class);

publicConstructor<T> getDeclaredConstructor(Class<?>...parameterTypes) :获取当前Class所表示类中指定的一个的构造



练习代码:

package com.test;import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.Date;
import java.util.Scanner;public class Main {//获取指定的一个构造器public Main(){System.out.println("我是Main类无参的构造器");}private Main(String statement){System.out.println("我是带有一个String类型的参数的构造器");}private Main(String str, int num){System.out.println("我是带有两个参数的构造器");}private static void getAll(){//1:获取构造器所在类的字节码对象Class<Main> clz = Main.class;//2:获取clz对象中所有的构造器Constructor<?>[] cs = clz.getConstructors();System.out.println(cs.length);for (Constructor<?> c : cs) {System.out.println(c);}cs = clz.getDeclaredConstructors();System.out.println(cs.length);for(Constructor<?> c : cs){System.out.println(c);}}private static void getOne() throws NoSuchMethodException, SecurityException{//1:获取构造器所在类的字节码对象Class<Main> clz = Main.class;//2:获取clz对象中所有的构造器//需求1:获取public Main()Constructor<Main> con = clz.getConstructor();System.out.println(con);//需求2:获取public Main(String statement)con = clz.getDeclaredConstructor(String.class);System.out.println(con);//需求3:获取private Main(String str, int num)con = clz.getDeclaredConstructor(String.class, int.class);System.out.println(con);}public static void main(String[] args) throws Exception {System.out.println("---------类的实例------------------");//需求1:获取java.util.Date类的字节码对象//方式1:使用class属性Class<java.util.Date> clz1 =java.util.Date.class;//方式2:通过对象的getClass方法获取,getClass是Object类中的方法java.util.Date date = new java.util.Date();Class<?> clz2 = date.getClass();//方式3:通过Class类中的静态方法foeName(String className)Class<?> clz3 = Class.forName("java.util.Date");System.out.println(clz1+"\n"+clz2+"\n"+clz3+"\n");System.out.println("----------获取类的构造器-----------------");getOne();System.out.println("-----------获取类的所有的构造器----------------");getAll();}
}

OutPut:

---------类的实例------------------
class java.util.Date
class java.util.Date
class java.util.Date


----------获取类的构造器-----------------
public com.test.Main()
private com.test.Main(java.lang.String)
private com.test.Main(java.lang.String,int)
-----------获取类的所有的构造器----------------
1
public com.test.Main()
3
private com.test.Main(java.lang.String,int)
private com.test.Main(java.lang.String)
public com.test.Main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maxwell读取MySQL数据

文章目录Maxwell 概述1.1 Maxwell 定义1.2 Maxwell工作原理1.2.1 MySQL主从复制过程1.2.2 Maxwell的工作原理1.2.3 **MySQL** **的** binlog1.3 Maxwell和Canal的对比Maxwell使用2.1 Maxwell安装2.1.1 安装地址2.1.2 安装部署2.1.3 MySQL环境准备2.1.4 初始化Maxwell元数据库2.…

Linux-(C/C++)动态链接库生成以及使用(libxxx.so)

Linux中so文件为共享库&#xff0c;与windows下dll类似&#xff0c;不过实现要简单。 so可以供多个进程使用&#xff0c;不同进程调用同一个so文件&#xff0c;所使用so文件不同。 so文件源程序不需要main函数&#xff0c;有也不会被执行。 下面通过一个简单例子&#xff0c;来…

IO之打印流

打印流,打印数据的,打印流只能是输出流: PrintStream: 字节打印流 PrintWriter: 字符打印流 -对于PrintWriter来说,当启用字段刷新之后, 调用println或者printf或者format方法,便会立马刷新操作. 如果没有开启自动刷新,则需要手动刷新或者当缓冲区满的时候,再自动刷新. 使…

IO之 Properties类加载文件

配置文件:资源文件(以.properties作为拓展名的文件)/属性文件: 做项目开发,为何使用配置文件? 把所有的数据存储在代码中,写死了,”硬编码”. 比如:在Java中需要连接数据库,必须拥有数据的账号和密码. 此时我们就得在Java代码中编写,类似的代码: String username”root”…

IO之数据流

数据流,提供了可以读/写任意数据类型的方法: DataOutputStream: 提供了 writeXxx(xxx value)方法. DataInputStream: 提供了 readXxx()方法. 注意: writeXxx和readXxx必须要对应起来, writeByte写出的数据,此时只能使用readByte读取回来.

可视化的状态机(FSM)

状态机这个概念已经在网上的博客和论坛中都已经说烂了&#xff0c;随便一搜都有一大堆。相关的废话就不多说了&#xff0c;在这里主要是分享一下如何可视化的设计状态机&#xff0c;如何增强项目的灵活性。这里通过一个生活中的电梯来了解一下状态机。 电梯逻辑如下图&#xf…

IO之 随机访问文件(RandomAccessFile)

随机访问文件(RandomAccessFile): 表示可以在该文件的任何位置写出和读取数据. API中文解释&#xff1a; 此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引&#xff0c;称为文件指针&…

IO之 管道流

管道流: 实现两个线程之间的数据交互. PipedInputStream PipedOutputStream PipedReder PipedWriter 中文API解释&#xff1a; PipedInputStream public class PipedInputStreamextends InputStream管道输入流应该连接到管道输出流&#xff1b;管道输入流提供要写入管道输出流的…

AOE网上的关键路径

题目描述 一个无环的有向图称为无环图&#xff08;Directed Acyclic Graph&#xff09;&#xff0c;简称DAG图。 AOE(Activity On Edge)网&#xff1a;顾名思义&#xff0c;用边表示活动的网&#xff0c;当然它也是DAG。与AOV不同&#xff0c;活动都表示在了边上&#xff…

IO之NIO

NIO:New IO: 从JDK1.4开始提出的,新的IO,可以把一块磁盘文件映射到内存中,我们再去读取内存中的数据. 存放在java.nio包中. Java NIO&#xff08;New IO&#xff09;是从Java 1.4版本开始引入的一个新的IO API&#xff0c;可以替代标准的Java IO API 现在主要运用于服务器中…

IO流总结

四大基流: InputStream—- OutputStream Reader —- Writer IO流的总结和梳理: 文件流: FileInputStream FileOutputStream FileReader FileWriter 缓冲流: BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter 转换流(把字节转换为字符): …

C++异常处理类与自定义异常处理类

转自&#xff1a;http://blog.csdn.net/makenothing/article/details/43273137 例1&#xff1a;自定义一个继承自excepton的异常类myException C标准中&#xff0c;定义在<stdexcept>中的任何异常类都派生自exception Class&#xff0c;本例也只是简单地由exception继承&…

网络编程概念总结

计算机网路: 计算机网络&#xff0c;是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统。 从逻辑…

数据结构实验之图论八:欧拉回路

题目描述 在哥尼斯堡的一个公园里&#xff0c;有七座桥将普雷格尔河中两个岛及岛与河岸连接起来。 能否走过这样的七座桥&#xff0c;并且每桥只走一次&#xff1f;瑞士数学家欧拉最终解决了这个问题并由此创立了拓扑学。欧拉通过对七桥问题的研究&#xff0c;不仅圆满地回答…

socket阻塞与非阻塞,同步与异步

转自&#xff1a;http://blog.csdn.net/hguisu/article/details/7453390 socket阻塞与非阻塞&#xff0c;同步与异步 作者&#xff1a;huangguisu 1. 概念理解 在进行网络编程时&#xff0c;我们常常见到同步(Sync)/异步(Async)&#xff0c;阻塞(Block)/非阻塞(Unblock)四种调…

多线程笔记补充之线程通信wait和notify方法以及Lock和Condition接口的使用

线程通信-wait和notify方法介绍: java.lang.Object类提供类两类用于操作线程通信的方法. wait():执行该方法的线程对象释放同步锁,JVM把该线程存放到等待池中,等待其他的线程唤醒该线程. notify:执行该方法的线程唤醒在等待池中等待的任意一个线程,把线程转到锁池中等待. notif…

CRT

当C Runtime函数库于20世纪70年代产生出来时&#xff0c;PC的内存容量还很小,多任务是个新奇观念&#xff0c;更别提什么多线程了。因此以当时产品为基础所演化的C Runtime函数库在多线程&#xff08;multithreaded&#xff09;的表现上有严重问题&#xff0c;无法被多线程程序…

java多线程笔记补充之线程的生命周期

多线程通信的时候很容易造成死锁,死锁无法解决,只能避免: 当A线程等待由B线程持有的锁,而B线程正在等待A线程持有的锁时,发生死锁现象,JVM不检测也不试图避免这种情况,所以程序员必须保证不导致死锁. 避免死锁法则: 当多个线程都要访问共享的资源A,B,C时,保证每一个线程都按照…

java多线程笔记补充之 线程控制操作

线程休眠:让执行的线程暂停一段时间&#xff0c;进入计时等待状态。 方法:staticvoid sleep(long millis) 调用sleep后&#xff0c;当前线程放弃CPU,在指定时间段之内&#xff0c;sleep所在线程不会获得执行的机会。 此状态下的线程不会释放同步锁/同步监听器. 该方法更多的用…