1

我是 Java 编程和 Linux 环境的新手。而且我发现很难理解什么是类路径、JVM 如何定位类以及 JAVA API 和许多其他东西。

例如,今天我写了两个简单的类 1)employee 和 2)employeetest 并将它们放在同一个文件夹中。(employeetest 具有“main”方法并在其代码中使用employee。)我编译了employeetest,然后使用“javac”命令执行它。我看到了,employee.class 也被添加到了文件夹中。那么这是否意味着 JVM 会自动编译执行所需的所有文件?

然后我把employee类放到当前目录之外,然后尝试执行employeetest。现在我收到了一个错误ClassNotFound!为什么会这样?为什么JVM没有在其他目录中搜索员工类?

我放置员工的目录也在我的类路径或我的 linux 中的“PATH”上?从技术上讲,它应该搜索 PATH 中的其他目录吗?

如果我错了,请纠正我,因为我在互联网上阅读了很多东西,我无法清楚地理解这些概念?

那么JVM在哪里搜索类?在“main”类所在的同一目录中?

在我的机器上,当我回显时$JAVA_HOME没有打印任何内容。但我的javajavac命令仍然可以正常执行吗?为什么会这样?是什么意思$JAVA_HOME?JDK在哪里?它的功能是什么?

4

2 回答 2

1

这里有一些java/java编译器的基础知识

您编写java代码---JVM加载类文件,类文件是实际上使java更便携(平台独立)的字节码

  • 你的情况你在一个文件夹中编译了源代码,说“foo”,这样你就可以从任何你应该提供类文件路径的地方编译它

所以 javac -classpath somepathtothatfile

使用 export 命令将路径设置到您现在拥有类文件的位置,然后该错误将被删除

像 export CLASSPATH="pathtosomelocation"

Jvm 在 windows 的 -c://programfiles/java/jdk(version)/bin/ 中查找其 bin 目录中的文件

在Linux中

/usr/lib/jvm/somejavaversion/bin

一探究竟

Java 开发的两件事

JRE——这只是运行时的东西,只是为了运行 JDK——你需要开发代码,才能获得你需要的 API。

于 2013-04-24T05:10:22.667 回答
1

PATH和类路径是两个非常非常不同的东西。PATH 是操作系统(在本例中为 Linux 发行版,但 Windows 使用相同的环境变量)用于查找可执行文件的机器特定环境变量。可执行文件包括 Linux 中的二进制程序和一些脚本文件。除非您指定javacjavac在当前目录中的完整绝对路径,否则PATHLinux 如何查找javac二进制文件。

另一方面,类路径是 Java 特定的。它可以设置为环境变量CLASSPATH或作为java可执行文件的参数,如下所示:

java -classpath /some/dir:/some/other/dir myprogram

这是 JVM 查找类文件或包(具有包含类文件的特定结构的文件夹)的目录集,除了内置 API。

是的,如果 Java 编译器可以找到依赖源文件并确定匹配的类文件丢失或过期,它会编译它们。如果指定,编译器将首先搜索“sourcepath”参数,并且还将搜索类路径。您可能会发现阅读命令的文档很有帮助:javac. (这是版本 6。我找不到版本 7,但我认为所有这些都适用。)这是java.

JDK 和 JVM 的位置取决于它们的安装位置。尝试which javac查找JDK所在的位置并which java找到运行时;这将显示 Linux 在哪里找到这些可执行文件(它可能是通过 进行的PATH)。

在我的大学生涯中,我花了很多时间研究 Java 的文档,并从中收集了很多信息。你可能会发现在自己周围扎根一点是值得的。这是链接:http ://docs.oracle.com/javase/7/docs/ 。

于 2013-04-24T05:15:41.370 回答