您的位置:首页 > 编程语言 > Java开发

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

2015-12-09 11:18 531 查看
今天读代码 读到这个 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


个人看法

如有不对 欢迎批评指出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: