这里无非是说 Java 标准对 Candy, Cookie 何时被载入没有强制性的规定,只要在使用之前被载入就可以了。而每个 JVM 的缺省ClassLoader载入类的时机有所不同。不过我现在没装 JB9,所以没法验证那个异常。

解决方案 »

  1.   

    我也用的JB9,运行正常,检查一下你是否加了package
      

  2.   

    package mypackage;class Candy {
        static {
            System.out.println("Loading Candy");
        }
    }class Gum {
        static {
            System.out.println("Loading Gum");
        }
    }class Cookie {
        static {
            System.out.println("Loading Cookie");
        }
    }public class SweetShop {
        public static void main(String[] args) {
            System.out.println("inside main");
            new Candy();
            System.out.println("After creating Candy");
            try {
                Class.forName("mypackage.Gum");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            System.out.println("After Class.forName(\"Gum\")");
            new Cookie();
            System.out.println("After creating Cookie");
        }
    }这样就对了
      

  3.   

    我用 JB7,把源文件保存到 project/src目录,而不是其子目录下,然后配置 run的main class 即可。原文件不用做任何修改。
      

  4.   

    tij 这一段代码有错!
    Class.forName("")里的类名必须是带包路径的!
      

  5.   

    这样的问题就是Classpath的问题,在jbuilder9里,在class前添加 package packageName;
    就能解决这样的问题。
      

  6.   

    scathelloworldofjava 是包名。
    改造一下:
    try {
          Class.forName("scathelloworldofjava.Gum");
        } catch(ClassNotFoundException e) {
          e.printStackTrace() ;
        }我的输出结果:
    scathelloworldofjava.SweetShop inside mainLoading CandyAfter creating CandyLoading GumAfter Class.forName("Gum")Loading CookieAfter creating Cookie