为什么我必须导入 InvocationTargetException 因为它在 java.lang 中?

why must I import InvocationTargetException since it's in java.lang?

我试图在我的文件中捕获 InvocationTargetException,但如果我没有明确地为它编写导入语句,我会收到此错误。

因为是java.lang的子包,不知道为什么要导入。

//this is the import statement that worked

import java.lang.reflect.InvocationTargetException;

这是错误信息:

source\DatabaseDemo.java:38: error: cannot find symbol
        }catch (NoSuchMethodException | InstantiationException | SQLException | ClassNotFoundException | IllegalAccessException | InvocationTargetException e ){
                                                                                                                                  ^
  symbol:   class InvocationTargetException
  location: class DatabaseDemo

Java中没有子包的概念。为了方便起见,我们人类将包视为分层的,因为源代码通常被结构化为目录层次结构。但是,在语言级别上不存在这样的层次结构。换句话说,java.lang.reflect 不是 java.lang 的 "sub-package"。由于只有 java.lang 包的 类 是自动导入的,所以您必须显式导入 InvocationTargetException.

补充一下@Slaw, java.

中没有隐含的子包导入
package a;
class A{}

package a.b;
   class B{}

如果您想在 A 中使用 B,您必须将其显式导入为:import a.b.B;import a.b.*;

希望能有所帮助