java中编译时库和运行时库的区别是什么?

什么是专业人士使用的?

我实际上是在Project Properties> Libraries for Java Applications中的Netbeans中看到它。 我们有两个选项卡,一个用于编译时库和运行时库,看起来我们可以将库添加到彼此独立的

“库”属性对话框的UI和术语非常混乱。

该对话框上的“帮助”按钮将为您提供相关信息。

编译时库列表可以是运行时库列表的子集。

考虑这种情况……

您有源代码从库’widgets.jar’导入类。 widgets.jar中的类文件引用jar文件’xml.jar’中的符号。 如果源代码不从xml.jar导入类,则可以将编译时库列表定义为仅包含widgets.jar。

当您尝试运行项目时,可能需要在运行时库列表中包含xml.jar以防止ClassNotFoundException。

没有编译时库运行时库这样的东西

也许你正在混合一些概念。

在Java中,要使用的库在编译时进行静态validation,并在运行时进行validation。

例如,如果要使用Apache Collections库中指定的IterableMap 。 编译器validation“在编译时”您正在调用该类中存在的方法。

但是编译器不会与该库链接或执行任何操作,您仍然需要在运行时使用它。 因此,当您的代码执行时,Java运行时再次搜索该类,并调用编译器validation存在的方法。

那是什么。

也许,当您想要动态加载库,或者检查库是否存在然后执行代码时,这就会发挥作用。

在编译期间,编译器需要知道方法,类等的签名,以了解您的代码是否正确。 因此,您添加编译时库。

在运行时,JVM仍然需要库来运行该特定代码。 但是你可以通过检查库是否存在来放置逻辑以避免代码,例如通过执行Class.for()方法。 某些库可能已经存在于系统中(例如qt.jar)或者可能不存在,您可以相应地检查和执行您的代码。

如果我错了,请纠正我。

正如其他人所说的那样,你会混淆概念。 我认为你真正想要了解的是Maven所指的依赖范围 。 有时您在编译时只需要一个依赖项,因为您希望它在运行时提供,有时您需要在运行时但不需要编译时。