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

时间:2010-06-22 03:22:18

标签: java netbeans

赞成使用其中任何一个的概念是什么?

我实际上在项目属性>下的Netbeans中看到了它。 Java应用程序库。我们有两个选项卡,一个用于编译时库和运行时库,看起来我们可以将库添加到彼此独立的

4 个答案:

答案 0 :(得分:11)

没有编译时库运行时库

这样的东西

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

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

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

但是编译器没有链接或对该库做任何事情,你仍然需要它在运行时。因此,当您的代码执行时,Java运行时会再次搜索该类,并调用编译器验证的方法。

那是什么。

答案 1 :(得分:7)

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

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

编译时库列表可能是运行时库列表的一个子集。

考虑这种情况......

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

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

答案 2 :(得分:1)

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

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

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

如果我错了,请纠正我。

答案 3 :(得分:0)

正如其他人所说,你是一个令人困惑的概念。我认为你真正想要理解的是Maven所指的dependency scope。有时您只需要在编译时使用依赖项,因为您希望它在运行时提供,有时您需要在运行时但不需要编译时。