class cum {}
Class c=Class.forName("cum");这样写是获取 cum类的Class对象.
我有一点不明白 既然c以经是对象了,为什么还要使用 .newInstance()对c来实例化呢?
一般的说法不是 创建类的对象就是对该类实例化吗? c以经是个Class对象了,那为什么还要实例化?
以我的理解方式我只是不明白 c倒底是个类还是个对象?  请高手指教,最好说详细点,谢谢!

解决方案 »

  1.   

    我有一点不明白 既然c以经是对象了,为什么还要使用 .newInstance()对c来实例化呢? 
    c还不是  cum类 的 实例 。只是获得了这个类的类对象。 .newInstance()才能转化为真正的实例 
    就是可以cum obj = (cum )(Class.forName("cum").newInstance());  
       如果 cum obj =(cum)Class.forName("cum") 这样是不行的。 
      

  2.   

    Class.forName("cum");
    这一行是告诉java虚拟机从路径中找cum.class文件,并加载到虚拟机内存中。
    c.newInstance()才是调用类cum的默认构造函数,获得类实例。
      

  3.   

    cum obj = Class.forName("cum").newInstance(); 
    这样获得的是这个对象的Class对象  cum obj = Class.forName("cum");
    这样获得的是这个类的Class对象!两码事! 
      

  4.   

    Class 是负责加载类对象的类,也就是负责管理类事例的类对象
    Class.forName("cum").获得的就是这个类对象
    Class.forName("cum").newInstance(); 才是真正的的类对象
      

  5.   

    1,Class.forName("cum").获得的就是这个类对象 
    2,Class.forName("cum").newInstance(); 才是真正的实例化后的类对象
      

  6.   

    Class.forName("xyz")获得的是Class这个类的对象,该对象负责管理xyz这个类.
    Class.forName("xyz").newInstance(); 通过Class的一个特定对象,生成xyz这个类的对象.
      

  7.   

    java里Class类是专门存储一个类的类型等信息的类,clss.forName("")返回的是Class这个类的对象,实力化后才是你真正的我们所需要创建的对象.Core java 里反射将的很清楚的,建议去看看.
      

  8.   

    其实在java里面,任何东西都是对象,类是对象,构造器是对象,方法也是对象。所有的东西都是用对象的思想去处理的,所要注意的只是它是什么对象而已。这也就是为什么java是纯面向对象语言了,吧所有东西都对象化。
    虽然一些基础数据类型不是对象,但是他们可以变成对象,例如int可以变成Integer对象,double可以变成Double对象。Class c=Class.forName("java.lang.String");
    这个是一个Class对象。
    而c c1=c.newInstance;这是一个String类的对象。
      

  9.   

    Class.forName("java.lang.String");  
    只是将String类加载到内存中而已,并没有创建实例,虚拟机默认给每个加载到内存中的类一个class引用,来作为该类的操作句柄,用这个句柄来创建对象。
      

  10.   

    最简单的理解
    package hellomyworld;public class Test {
        public Test() {
            System.out.println("hello world");
        }
    }
    此时在cmd下运行 javac Test.java就会产生一个Test.class的文件另一个类Test2.class如何使用这个文件呢?首先通知虚拟机从硬盘加载这个Test.class到内存中 Class testclass = Class.forName("hellomyworld.Test");  //test.Test代表路径
    或者  Class testclass = hellomyworld.Test.classtestclass代表这个类的所有信息,注意他代表的是类的信息 不是类本身!1 我想知道这个类叫什么? testclass.getName()
    2 它有多少个方法呢?testclass.getDeclaredMethods()
    3 它有多少个字段? testclass.getDeclaredFields()
    以上的这3步就叫反射,当然还可以做更多的反射
    然后告诉虚拟机初始化这个类 Object obj= testclass.newInstance(); 因为我先在想用了
    Test test = (Test)obj;上面的用法太麻烦的有没有更简单一点的使用办法呢?ok
    hellomyworld.Test mytest = new hellomyworld.Test()
    但是我还是想的到这个类的信息怎么办????
    mytest.getClass()