关于 Constructor[] java.lang.Class.getConstructors() API 的使用

今天读代码 读到这个 API 

难以理解

计划写个 demo 看看

先留个问题

写完就把 demo 贴出来


/

Demo 代码


代码参考

http://www.yiibai.com/javalang 网站的例子 自己再添一些理解


public class A {
public static void main(String[] args) {


    try {

//使用 Class 类的 forName 静态方法 获取 String 类的全部信息
       Class cls = Class.forName("java.lang.String");
       System.out.println("String Constructors =");

//以 Constructor 类型数组的形式 返回这个类中的所有 public 方法
       /* returns the array of Constructor objects representing the public 
       constructors of this class */


       Constructor c[] = cls.getConstructors();

//把返回的数组信息 全部打印出来
       for(int i = 0; i < c.length; i++) {
          System.out.println(c[i]);
       }

//调用 Constructor 类中的 newInstance 方法实例化 c[9] 的对象

//这里 c[9] 是 public java.lang.String()

       String str = (String) c[9]
.newInstance(new Object[] {});

//给对象赋值 测试对象是否成功实例化
        str = "aaaaa";
       System.out.println(str);
    }
    catch (Exception e) {
       System.out.println("Exception: " + e);
   }
    

 }
}


结果:


String Constructors =
public java.lang.String(byte[],int,int)
public java.lang.String(byte[],java.nio.charset.Charset)
public java.lang.String(byte[],java.lang.String) throws java.io.UnsupportedEncodingException
public java.lang.String(byte[],int,int,java.nio.charset.Charset)
public java.lang.String(byte[],int,int,java.lang.String) throws java.io.UnsupportedEncodingException
public java.lang.String(java.lang.StringBuilder)
public java.lang.String(java.lang.StringBuffer)
public java.lang.String(byte[])
public java.lang.String(int[],int,int)
public java.lang.String()
public java.lang.String(char[])
public java.lang.String(java.lang.String)
public java.lang.String(char[],int,int)
public java.lang.String(byte[],int)
public java.lang.String(byte[],int,int,int)
aaaaa


补充


关于 newInstance() 方法中的 new Object[] {}; Object 类型的数组

 String str = (String) c[9]
.newInstance(new Object[] {});


这里个人认为写成 new String[]{}; 构造一个String 类型的数组更贴切

 String str = (String) c[9]
.newInstance(new String[]{});


当然 newInstance() 方法中不写参数也是可以的

 String str = (String) c[9]
.newInstance();


以上三种输出结果一致


毕竟 API 里面写的默认 Object 适应各种类型构造方法 使他们顺利实例化

public T newInstance(Object... initargs)
              throws InstantiationException,
                     IllegalAccessException,
                     IllegalArgumentException,
                     InvocationTargetException

个人看法

如有不对 欢迎批评指出

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值