String className="Manager"
1.Class.forName(className)可以获得一个Manager对应的对象?
 问题:这个对象是否已经分配空间?是否和new一样呢?
      也有说可以加载一个Manager对象,加载的意思是什么?(在很多数据库连接的例子中都使用Class.forName来加载数据库接口类)
2.任何类T都可以使用T.class得到一个对应的Class对象,那Object中为什么没有定义class成员变量?
  为什么不能用 
        T t=new T();
        t.class来获得一个Class对象?

解决方案 »

  1.   

    1、你返回的是一个Class,而不是一个对象。所以还没有new、分配空间
       数据库连接上这样做是因为Class.forName后,JVM会加载这个类,加载其中的静态方法,根据JDBC规范,在类的静态代码中需要向DriverManager注册自己,这样做后DriverManager才可以在调用getConnection时逐个问已经注册的Driver类是否接受用户传入的URL   所以一般我们调用Class.forName后才可以连接数据库2、你的代码有误:
    应该是 Class clz = T.class,是无需new T的,所以这个class不是Object的成员
      

  2.   

    第一个问题明白了,谢谢
    第二问题我想问的是如果T.class中的class 是静态变量,那为什么T的实例却不能调用这个静态变量呢?如果class不是静态变量,那是什么呢?
      

  3.   

    forName方法返回一个对象,这个对象的类型是Class得到任意对象的类型,Object类中有个方法getClass可以实现
      

  4.   

    Class.forName获得的当然是一个实例,不过是Class的一个实例,而不是你加载的类的实例。.class是一个类的字面量写法,被编译器处理后相当于在你的类定义了一个静态变量,
    使用Class.forName加载的
    static Class class$0
    static Class class$1 ....
      

  5.   

    旗鲁特:.class是一个类的字面量写法,被编译器处理后相当于在你的类定义了一个静态变量,
    使用Class.forName加载的
    static Class class$0
    static Class class$1 ....大哥能不能再说的仔细些?什么是字面量?
      

  6.   

    java语言规范中有这种说明
    直接用就OK
    知道他是一种类加载快捷方式而已,实际上是调用Class.forName
    不过是这样更简洁,让编译器去处理了。