27

Thinking in Java プログラムは次のとおりです。

package typeinfo;
import static util.Print.*;

class Candy {
 static { print("Loading Candy"); }
}

class Gum {
 static { print("Loading Gum"); }
}

class Cookie {
 static { print("Loading Cookie"); }
}

public class SweetShop {
 public static void main(String[] args) {  
   print("inside main");
   new Candy();
   print("After creating Candy");
   try {
     Class.forName("Gum");
   } catch(ClassNotFoundException e) {
     print("Couldn't find Gum");
   }
   print("After Class.forName(\"Gum\")");
   new Cookie();
   print("After creating Cookie");
 }
} 

次のような出力が期待されます。

/* Output:
inside main
Loading Candy
After creating Candy
Loading Gum
After Class.forName("Gum")
Loading Cookie
After creating Cookie
*/

しかし、得る

inside main
Loading Candy
After creating Candy
Couldn't find Gum
After Class.forName("Gum")
Loading Cookie
After creating Cookie

明らかに、try ブロックは予期しない ClassNotFoundException をスローしています。予想どおり、コードが Gum クラスを初期化する代わりにこれをスローする理由はありますか?

4

1 に答える 1

68

あなたのクラスはパッケージtypeinfoにあるので、それらの完全修飾名はtypeinfo.Gum,typeinfo.Candytypeinfo.Cookie. Class.forName()完全修飾名のみを受け入れます。

パラメーター:

className- 目的のクラスの完全修飾名。

コードを次のように変更します。

try {
  Class.forName("typeinfo.Gum");
} catch(ClassNotFoundException e) {
  print("Couldn't find Gum");
}
于 2013-03-14T18:24:29.800 に答える