首先,java.lang是JDK自动import的。public final class Class extends Object implements Serializable { ... static Class forName(String className) { } ... }Class本身是final的,不能显式extands。forName是static的,所以你要用的话,直接Class.forName("ClassName");就行了。
又有一个问题: test t = new test(); Object t1 = new Object(); System.out.println("t:getClass() = " + t.getClass()); System.out.println("t1:getClass() = " + t1.getClass());输出结果: t:getClass() = class test t1:getClass() = class Object这里是发生了“上溯造型”吗?
t是Class test的reference. t1是Class Object的reference.你试试: test t = (test)new Object();
和 Object obj = (Object)new test();然后打印出来看看。
你试试: test t = (test)new Object(); ---------------------------------------- 我试了不行呀,另外“reference.”在这里是什么意思?
{
...
static Class forName(String className) {
}
...
}Class本身是final的,不能显式extands。forName是static的,所以你要用的话,直接Class.forName("ClassName");就行了。
test t = new test();
Object t1 = new Object();
System.out.println("t:getClass() = " + t.getClass());
System.out.println("t1:getClass() = " + t1.getClass());输出结果:
t:getClass() = class test
t1:getClass() = class Object这里是发生了“上溯造型”吗?
t1是Class Object的reference.你试试: test t = (test)new Object();
Object obj = (Object)new test();然后打印出来看看。
----------------------------------------
我试了不行呀,另外“reference.”在这里是什么意思?
这个可以,能解释一下“(Object)new test()”是什么意思吗
例如:Object obj = (Object)new test()
这是安全的,可以把类test看作是Object的一个超集。
可以写为Object obj = new test();即在java中上溯造型是自动完成的下溯造型:
test t = (test)new Object();
需要强制类型转换
test t = (test)obj;下溯造型是不安全的,除非保证基类是从子类上溯而来
class test2_a{
public static void main(String[] arge) {
Object obj = new test2_a(); //如果换成Object obj = new Object()就不行
test2_a t = (test2_a)obj;
System.out.println(obj.getClass());
System.out.println(t.getClass());
}
}
证实了“下溯造型是不安全的,除非保证基类是从子类上溯而来”
应该是:
Object obj = new Object();
test t = (test)obj;原因:
Object本身不能直接引用,必须创建一个实例。