Java教程是为JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及其后续版本中更新的语言特性的概述。
请参阅JDK发行说明,了解有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息。
Java平台的许多实现依赖于分层文件系统来管理源代码和类文件,尽管《Java语言规范》并不要求这样做。具体策略如下:
将类、接口、枚举或注解类型的源代码放在一个文本文件中,该文件的名称是类型的简单名称,扩展名为.java
。例如:
//在Rectangle.java文件中 package graphics; public class Rectangle { ... }
然后,将源文件放在一个目录中,该目录的名称反映了类型所属的包的名称:
.....\graphics\Rectangle.java
包成员的限定名称和文件的路径名称是平行的,假设使用Microsoft Windows文件名分隔符反斜杠(对于UNIX,使用正斜杠)。
graphics.Rectangle
graphics\Rectangle.java
正如您应该记得的那样,按照惯例,公司使用反转的互联网域名作为其包名。例如,名为example.com
的公司会在其所有包名之前加上com.example
。包名的每个组件对应一个子目录。因此,如果Example公司有一个包com.example.graphics
,其中包含一个Rectangle.java
源文件,它将被包含在一系列子目录中,如下所示:
....\com\example\graphics\Rectangle.java
当您编译源文件时,编译器会为其中定义的每个类型创建一个不同的输出文件。输出文件的基本名称是类型的名称,其扩展名为.class
。例如,如果源文件如下所示:
//在Rectangle.java文件中 package com.example.graphics; public class Rectangle { . . . } class Helper{ . . . }
那么编译后的文件将位于:
<输出文件的父目录的路径>\com\example\graphics\Rectangle.class <输出文件的父目录的路径>\com\example\graphics\Helper.class
与.java
源文件一样,编译后的.class
文件应该放在一系列反映包名的目录中。然而,.class
文件的路径不必与.java
源文件的路径相同。您可以将源代码和类文件分别放在不同的目录中,如:
<路径一>\sources\com\example\graphics\Rectangle.java <路径二>\classes\com\example\graphics\Rectangle.class
通过这样做,您可以将classes
目录提供给其他程序员,而不会泄露您的源代码。您还需要以这种方式管理源代码和类文件,以便编译器和Java虚拟机(JVM)可以找到程序使用的所有类型。
classes
目录的完整路径<path_two>\classes
称为类路径,并且通过CLASSPATH
系统变量设置。编译器和JVM通过将包名添加到类路径来构建.class
文件的路径。例如,如果
<path_two>\classes
是您的类路径,包名为
com.example.graphics,
那么编译器和JVM将在以下位置查找.class
文件
<path_two>\classes\com\example\graphics。
类路径可以包含多个路径,以分号(Windows)或冒号(UNIX)分隔。默认情况下,编译器和JVM会搜索当前目录和包含Java平台类的JAR文件,以便这些目录自动包含在类路径中。
使用以下命令在Windows和UNIX(Bourne shell)中显示当前CLASSPATH
变量:
在Windows:C:\> set CLASSPATH 在UNIX: % echo $CLASSPATH
要删除CLASSPATH
变量的当前内容,请使用以下命令:
在Windows:C:\> set CLASSPATH= 在UNIX: % unset CLASSPATH; export CLASSPATH
要设置CLASSPATH
变量,请使用以下命令(例如):
在Windows:C:\> set CLASSPATH=C:\users\george\java\classes 在UNIX: % CLASSPATH=/home/george/java/classes; export CLASSPATH