按《Thinking in Java》书中介绍 每个类都有一个Class对象,Class.forName()取得Class的对象
的引用,如果Class.forName()找不到指定要加载的类时,它会抛出ClassNotFoundException 。
可下面的代码(SweetShop.java)让我困惑: class Candy {
   static {
      System.out.println("Loading Canding");
    }
}
class Gum{
      static {
          System.out.println("Loading Gum");
      }
     
}
public class SweetShop {
   
     public static void main(String[] args){
                    Class.forName("Candy");
     }    
}
“ 在使用命令javac SweetShop.java 时却出现
未报告的异常 java.lang.ClassNotFoundException;必须对其进行捕
捉或声明以便抛出 Class.forName("Candy");
  ”“Candy”类是存在的,可以找到的,为什么还会有“ClassNotFoundException”异常呢 ?
请高手指点,谢谢……

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主截止到2008-06-18 00:07:26的汇总数据:
    发帖数:2
    结贴数:0
    结贴率: 0.00%
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    Class.forName("Candy"); 1.要把包名写上 要完整名称。2.这些类不能都放在一个java文件里。建议分开存放。要不可能不行。
      

  3.   

    ClassNotFoundException 是checked(被检查)异常,必须对其进行捕捉或声明以便抛出
    所以这跟有没有Candy这个类没有关系另外还要注意2楼说的
      

  4.   


    请看jdk文档, Class.forName(String className)会抛三个异常,
    LinkageError - 如果链接失败 
    ExceptionInInitializerError - 如果此方法所激发的初始化失败 
    ClassNotFoundException - 如果找不到该类另外请注意className - 所需类的全名。如果你不进行处理(try/c)那么你在main方法中调用的时候继续抛出,当然这种做法不是很好,最好还是捕捉一下异常
      

  5.   

    这个例子主要说明java里面的ClassNotFoundException出现情况,没必要为这困惑。
      

  6.   

    我把上面的程序改成下面这样后
    import java.util.*;
    class Candy {
       static {
          System.out.println("Loading Canding");
        }
    }
    class Gum{
          static {
              System.out.println("Loading Gum");
          }
    }public class SweetShop {
       
         public static void main(String[] args){
              new Candy();
                  
              System.out.println("After creating Candy ");
              
              try{
                 Class.forName("Gum");
                 
              }catch(ClassNotFoundException e){
                  System.out.println("Couldn't find Gum");
              }
          }    
    }用JDK在命令行中运行是结果为:
    Loading Canding
    After creating Candy
    Loading Gum而在eclipse 下运行的结果为 :
    Loading Canding
    After creating Candy 
    Couldn't find Gum结果为什么会一样 ????    五楼能不能说说jdk文档中Class.forName(String className)
    在哪里或把具体该方法具体说明贴一下 ? 我找不到………………
      

  7.   

     
    非常感谢各位高手, 我在JDK 文档中找到说明了  ,
     3Q……