同上

解决方案 »

  1.   

    类是程序的一部分,每个类都有一个Class对象,即每当编写并且编译了一个新类,就会产生一个Class对象,在运行时,当我们想生成这个类的对象时,运行这个程序的jvm会首先检查这个类的Class对象是否已经加载,如未加载,jvm就会根据类名查找 .class文件,并将其载入.而Class.forName("A")不仅产生class对象而且有个副作用:如果类A没有被加载,就加载它!
      

  2.   

    Class.forName("A");   //如果A没有被加载,加载它,是不是相当于生成一个A的实例。
      

  3.   

    Class.forName("A");   //如果A没有被加载,加载它,是不是相当于生成一个A的实例。不是,只是加载了类,也就是说static初始化这时会进行.
      

  4.   

    没有生成实例,如果要生成实例要用Class.forName("A").newInstance();
      

  5.   

    rumlee(rum-lee)补充的是正确的。我也这样认为。
      

  6.   

    回复人: interhanchi(艰难困苦,玉汝于成!) ( ) 信誉:105  2005-08-28 13:35:00  得分: 0  说得对!副作用倒没有什么,返回的是一个Class 对象,但不同于 实列化一个类
      

  7.   

    Class.forName("A");
    Class.forName("A").newInstance();
    这两种方法经常看到我还看到过一种这样直接加载的(也不知道算不算)
    new A很简单吧 :)
    可是也可以正常运行的啊
      

  8.   

    new A你知道类名是A当然直接new了
    假如有很多类名,需要动态,比如在一个数组里放了很多数组名(string),你怎么new啊
      

  9.   

    "new A你知道类名是A当然直接new了
    假如有很多类名,需要动态,比如在一个数组里放了很多数组名(string),你怎么new啊
    "
    (引用楼上的话)
    我有些不解,如果想NEW一个类的实例的话
    用你说的例子
    如果一个数组 有很多数组名的话,直接NEW 这个数组本身不就可以了么? NEW完数组本身,不就可以调用里面的那些数组名了么?
    请楼上的帮忙回答一下,谢谢~
      

  10.   

    学了设计模式你就知道为什么要运行期动态加载了。
    最常用的例子就是数据库连接
    一般数据库连接是从系统配制文件中加载的,事先不知要加载的是那个数据库,所以要动态加载。
    另外还有其它的法,比如对于一个对象,如果对象属性为a则加载ClassA,属性为B则加载ClassB,用这种方法比用if else可读性与拓展性都强得多。
      

  11.   

    Class.forName("A").newInstance();
    A必须有一个无参构造子
      

  12.   

    Class.forName("A");
    Class.forName("A").newInstance();
    这两种方法有什么不同吗?
    在连接数据库的时候都可以用的呀
      

  13.   

    "new A你知道类名是A当然直接new了
    假如有很多类名,需要动态,比如在一个数组里放了很多数组名(string),你怎么new啊
    "
    (引用楼上的话)
    我有些不解,如果想NEW一个类的实例的话
    用你说的例子
    如果一个数组 有很多数组名的话,直接NEW 这个数组本身不就可以了么? NEW完数组本身,不就可以调用里面的那些数组名了么?
    请楼上的帮忙回答一下,谢谢~-------------------------
    String klasses[] = {"classA","classB","classC","classD"};
    假如你要的是其中一个class的实例,但你不知道具体是哪个,此时可能这样Class.forName(klasses[index]).newInstance();
    这里你不能用new classA()这样,因为哪个是不确定的,也就是动态的
      

  14.   

    若在class A中调用
    Class.forName("B");那么只有当class B可以通过加载A的classloader加载时,才有效。用JVM的术语讲,A和B将处于同一命名空间,否则forName发出ClassNotFoundException, 即使你指定classpath也不行。