Class.forName()抛出ClassNotFoundException
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类?
您的类在包typeinfo
,因此它们的完全限定名称是typeinfo.Gum
, typeinfo.Candy
和typeinfo.Cookie
。 Class.forName()
只接受完全限定名称:
参数:
className
– 所需类的完全限定名称。
将您的代码更改为:
try { Class.forName("typeinfo.Gum"); } catch(ClassNotFoundException e) { print("Couldn't find Gum"); }