我看到人们说有不同类型的类路径。例如编译时类路径和运行时类路径。
我认为与"-cp"
一起使用时"-classpath"
或javac
选项是编译时类路径。
当与java
命令一起使用时,它应该是运行时类路径。我是对的吗?
这两个类路径可以完全不同吗?
答案 0 :(得分:3)
java
和javac
命令接受-cp
或-classpath
...意思相同。
曾几何时,javac
仅接受-classpath
。
这两个类路径[由java和javac使用]可以完全不同吗?
他们可以。但是,如果使用一个版本的API进行编译并使用另一个版本运行,则可能会遇到"二进制兼容性"导致运行时错误的问题。
因此建议在编译时和运行时使用相同(或等效的)类路径。
为什么两次使用相同的内容?
因为内容(类路径)没有编译到代码中。
更深层次的答案是,Java程序通常由独立编译的组件(例如库)组成,然后在运行应用程序时将它们组合在一起。根据其依赖性,每个组件构建都需要不同的类路径。当你将所有部分组合在一起时,可能需要不同的类路径。因此需要能够在编译和运行时以不同方式指定类路径。
答案 1 :(得分:2)
我想" -cp"或" -classpath"与javac一起使用时的选项是编译时类路径。
完全!
这两个类路径可以完全不同吗?
这两者最好相同。
否则,如果您遇到NoClassDefFoundError
错误,如果某个类在编译时存在(并且实际上已在您的代码中使用),但在运行时丢失了。
只有在编译时将类添加到类路径中时,类路径才能才会有所不同,这些类在源代码中未使用。在这种情况下,您可以跳过将这些添加到Runtime类路径中。
但是,我建议你让classpath(s)清除不需要的类/库。
答案 2 :(得分:1)
我认为与javac一起使用时,“-cp”或“-classpath”选项是 编译时类路径。
是的,这是真的。
来自java Docs:
JDK工具java,jdb,javac和javah具有-classpath选项 它取代了CLASSPATH指定的路径 工具运行时的环境变量。这是推荐的 更改类路径设置的选项,因为每个应用程序都可以 拥有它所需的类路径而不会干扰任何其他类路径 应用
运行时工具java也有一个-cp选项。这个选项是一个 -classpath的缩写。
对于非常特殊的情况,java和javac都有可以让你的选项 改变他们用来查找自己的类库的路径。茫茫 但是,大多数用户永远不需要使用这些选项。
答案 3 :(得分:0)
我想" -cp"或" -classpath"与javac一起使用时的选项是编译时类路径。
yes
这两个类路径可以完全不同吗?
they should be same
任何 给定类,
java
虚拟机将需要找到完全相同的支持javac
编译器在编译时需要找到的类。换句话说, 如果javac
需要访问java.util.HashMap
,则需要java
命令 也可以找到java.util.HashMap
。