今天读代码 读到这个 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
个人看法
如有不对 欢迎批评指出