5.3 JDK源码阅读之Constructor

Constructor类简介

Constructor<T>类提供了访问构造器的信息,以及利用构造器创建对象的一系列方法。 
当使用Constructor创建对象时,参数列表支持自动宽化(比如需要int而传入short),不支持自动窄化(比如需要int而传入long)。

Constructor类

Constructor类是描述一个具体类中所有构造方法的类。一个类中可以存在多个构造方法,若想取得类中构造方法,使用的是Class类提供的以下方法:

2.1 取得指定参数类型的构造方法

(1)Class类的getConstructor()方法

该方法取得具体类的指定参数类型的public权限的构造方法。

getConstructor()方法的源代码如下:

public Constructor<T> getConstructor(Class<?>... parameterTypes);

 

Constructor:

  • getConstructors() : 获取 public的 Constructor[](public)
  • getDeclaredConstructors() : 获取 所有的 Constructor[]
  • getConstructor(parameterTypes) : 根据 参数类型(可变参数), 获取具体 Constructor(public)
  • getDeclaredConstructor(parameterTypes):根据 参数类型(可变参数), 获取具体 Constructor

这里

  • getConstructors()方法
    • 是获取 public的构造函数 数组
  • getDeclaredConstructors()方法
    • 是获取所有的构造函数 数组
  • getConstructor(parameterTypes) 方法
    • 是根据 参数类型(可以有多个Class<?>的可变参数),
    • 获取具体public的 Constructor
  • getDeclaredConstructor(parameterTypes) 方法,
    • 是根据 参数类型(可以有多个Class<?>的可变参数),
    • 获取具体的 Constructor

 

getters
(1)构造器上的注解:

//获取指定类型的注解
T getAnnotation (Class<T> annotationClass)

//获取所有注解,但不包括继承得到的
Annotation[] getDeclaredAnnotations ()

//指定的注解类型是否存在于这个构造器上
boolean isAnnotationPresent (Class<? extends Annotation> annotationType)

(2)构造器本身相关:

//获取该构造器所属的类的Class对象
Class<T> getDeclaringClass ()

//获取构造器名称(等于它所属的类名)
String getName ()

//获取访问权限(需要用java.lang.reflect.Modifier类解析)
int getModifiers ()

//是否是一个合成构造器
boolean isSynthetic ()

(3)参数列表相关:

//获取各个参数上的注解,按照声明顺序
Annotation[][] getParameterAnnotations ()

//获取参数数量,变长参数列表整体算一个
int getParameterCount ()

//获取各个参数的类对应的Class对象
Class[]<?> getParameterTypes ()

//是否具有变长参数列表
boolean isVarArgs ()

(4)异常相关:

//获取异常列表
Class[]<?> getExceptionTypes ()

      newInstance()方法接受一个变长Object列表,用于使用Constructor的实例创建相应的对象。 
如果该Constructor的参数列表为空,那么传入的参数列表也应为空。 
如果该Constructor对应的类是一个非静态内部类,那么参数列表的第一个应当是这个类对应的外部类的一个实例。 
如果访问权限和参数检查都通过了,那么就会开始实例化对象。如果该Constructor对应的类尚未被加载,那么会自动加载该类。 
如果对象实例化成功,那么就会返回这个对象。 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值