Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Class.forName()抛出ClassNotFoundException_Java - Fatal编程技术网

Java Class.forName()抛出ClassNotFoundException

Java Class.forName()抛出ClassNotFoundException,java,Java,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 { publi

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
*/
我期望输出如下:

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
。仅接受完全限定名:

参数:

className
-所需类的完全限定名

将代码更改为:

try {
  Class.forName("typeinfo.Gum");
} catch(ClassNotFoundException e) {
  print("Couldn't find Gum");
}

我喜欢这个,但为了进一步扩展它,有没有一种方法可以在没有fqn的情况下迭代我的程序包来尝试查找它?@Enjoy87:据我所知,不是以可移植的方式。(如果您有一个特定的jar文件或目录,您可以在其中查找,但这是另一回事。)