@SuppressWarnings("unchecked") public void func() throws InstantiationException, IllegalAccessException, ClassNotFoundException{ Class<String> obj = (Class<String>) Class.forName("java.lang.String"); String str = obj.newInstance(); str = "123"; System.out.println(str); }
Class类在java.lang包,本身是public final class Class<T>,说明是一个泛型类,有一个类型参数T,它就是这个T类型的类型标识。Final类是不能被继承的。
这是Class类的toString方法,写得比较有艺术:
public String toString() { return (isInterface() ? "interface " : (isPrimitive() ? "" : "class ")) + getName(); }
反正都打印出getName(),不过接口会加上interface,类会加上class,原始类型不加东西。
Class里面的forName类是static的,内部用ClassLoader加载String参数指明的类,加载完成后,返回值正是Class<?>。
第一段代码里的obj.newInstance相当于new String();
未完待续