指定类的java.lang.ClassNotFoundException

Avr*_*dis 8 java classnotfoundexception

在我的主要内容中,我有以下声明

Class booki = Class.forName("Book");

这引发了一个java.lang.ClassNotFoundException例外

当我使用完整路径时就好Class booki = Class.forName("javatests.Book");了.

主类和Book类在同一个包中,我也尝试使用import static javatests.Book.*;但如果我没有设置完整路径,它仍会引发异常javatests.Book.有人能解释一下为什么吗?

Hen*_*nry 10

Class.forName将完全限定的类名解析为该类.由于方法不知道它从调用类的包调用到何处,也不知道调用类中的imports扮演任何角色.


Ani*_*rni 5

来自文档Class#forName

 public static Class<?> forName(String className)
                    throws ClassNotFoundException
Run Code Online (Sandbox Code Playgroud)

参数:
className - 所需类的完全限定名称。

所以这不会抛出ClassNotFoundException

Class booki = Class.forName("javatests.Book");  
Run Code Online (Sandbox Code Playgroud)

例如,在java程序中不需要导入包,但要从包中java.lang.*加载类,则需要编写 Threadjava.lang

Class t = Class.forName("java.lang.Thread");
Run Code Online (Sandbox Code Playgroud)

上面的代码片段返回名为的类的运行时类描述符java.lang.Thread