Java7入门指南
立即解锁
发布时间: 2025-08-18 02:24:29 阅读量: 2 订阅数: 13 

### Java 7 入门指南
#### 1. 配置 CLASSPATH
在开发 Java 应用程序时,有时需要将多个目录或 JAR 文件加载到 CLASSPATH 中,特别是当依赖项位于多个位置时。可以使用操作系统的分隔符(在 UNIX 系统中为 `:`,在 Windows 系统中为 `;`)来分隔 CLASSPATH 中的不同位置。
例如,在 UNIX 系统中,可以使用以下命令设置 CLASSPATH:
```bash
export CLASSPATH=/JAVA_DEV/some-jar.jar:/JAVA_LIB/myjar.jar
```
或者在使用 `javac` 工具时指定类路径:
```bash
javac –classpath /JAVA_DEV/some-jar.jar:/JAVA_LIB/myjar.jar
```
JVM 在加载 Java 应用程序的资源时,会按照指定的顺序依次加载各个位置的类和包,加载顺序在某些情况下可能会产生影响。
如果要添加指定目录下的所有 JAR 文件,可以在目录后面使用通配符 `*`。例如:
```bash
javac –classpath /JAVA_DEV/*:/JAVA_LIB/myjar.jar
```
需要注意的是,使用通配符只会加载 JAR 文件,不会加载目录中的类文件。如果要包含目录中的 Java 类文件,则不要使用通配符。例如,要加载 `/JAVA_DEV` 目录下的所有 JAR 文件和类文件,可以这样指定:
```bash
javac –classpath /JAVA_DEV/*:/JAVA_DEV
```
CLASSPATH 中包含的子目录默认不会被加载。如果要加载子目录中的文件,必须在 CLASSPATH 中明确列出这些目录和/或文件。不过,与子目录结构对应的 Java 包会被加载,因此位于这些包中的 Java 类也会被加载。
#### 2. 编写可执行的 Java 类
##### 问题
想要开发一个可以从命令行或终端运行的可执行 Java 程序。
##### 解决方案
创建一个包含 `main()` 方法的 Java 类。包含 `main()` 方法的类是可执行的,因为在应用程序执行时会加载该方法。以下是一个简单的示例,当执行该类时,会在命令行打印 “Hello World” 消息:
```java
public class MainTest {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
```
##### 工作原理
要使 Java 类可执行,只需在类中添加一个 `main()` 方法,该方法将在类运行时执行。`main()` 方法应该负责应用程序的任何设置或实例化操作,以便程序能够运行。它类似于应用程序的 “驱动程序”,其定义应该始终保持一致,包括使用 `static` 修饰符,这样就可以在不创建类实例的情况下调用它。方法的返回类型应该始终为 `void`,表示该方法不会返回任何值。最后,`main()` 方法的签名应该包含一个 `String` 数组作为参数,这个数组允许在运行时将参数传递给程序,参数之间用空格分隔。
以下示例展示了如何在 `main()` 方法中打印传递给程序的参数:
```java
public class MainTestArguments {
public static void main(String[] args) {
if (args.length > 0) {
System.out.println("Arguments that were passed to the program: ");
for (String arg : args) {
System.out.println(arg);
}
} else {
System.out.println("No arguments passed to the program.");
}
}
}
```
在这个示例中,首先检查 `args` 数组的长度是否大于 0。如果是,则使用 `for` 循环遍历数组并打印每个参数;如果没有传递参数,则打印相应的提示信息。
#### 3. 编译和执行 Java 类
##### 问题
已经编写了一个 Java 类,想要编译并执行它。
##### 解决方案
首先,如果计划使用 CLASSPATH 环境变量,需要设置好 CLASSPATH,使其包含运行 Java 类所需的所有资源。然后,使用 JDK 自带的 `javac` 工具编译 Java 类。例如,要编译在前面示例中创建的 `MainTestArguments.java` 类,可以在命令行或终端中使用以下语法:
```bash
javac MainTestArguments.java
```
需要注意的是,编译 Java 源文件时,必须位于包含源文件的目录中,或者在执行 `javac` 命令时指定源文件的完整路径。使用命令行可以方便地切换到包含要编译代码的目录。
使用 `javac` 工具编译后,会在同一目录下生成一个名为 `MainTestArguments.class` 的文件。要执行这个类,可以使用 JDK 自带的 `java` 工具:
```bash
java –cp .org/java7recipes/chapter1/recipe1_03/MainTestArguments
```
执行类时,不需要在类名后面加上 `.java` 或 `.class` 后缀,但需要在类名前面加上 Java 包的目录结构,并使用 `-cp` 标志设置 CLASSPATH。执行上述命令后,应该会看到以下输出:
```
No arguments passed to the program.
```
##### 工作原理
编译 Java 类时,所有必需的类和库都必须在 CLASSPATH 中。可以通过设置 CLASSPATH 环境变量或使用 `javac` 工具的 `-classpath` 选项来实现这一点。当所有依赖资源都在 CLASSPATH 中指定后,使用 `javac` 工具将源文件编译成类文件。
使用 `javac` 工具时,需要在命令行或终端中操作,除非使用集成开发环境(IDE)。可以在 Java 源文件所在的目录中执行命令,或者指定源文件的完整路径和文件名。例如,如果 `MainTestArguments.java` 源文件位于 `/JAVA_DEV/org/java7recipes/chapter1/recipe1_03` 路径下,可以切换到该目录或指定完整路径进行编译:
```bash
javac /JAVA_DEV/org/java7recipes/chapter1/recipe1_03/MainTestArguments.java
```
`javac` 工具编译代码后,会生成一个同名的 `.class` 文件。可以使用 `java` 命令在 JVM 上运行这个类文件。要运行已经编译好的可执行 Java 类文件,只需在 `java` 命令后面跟上类名:
```bash
java –cp /JAVA_DEV/org/java7recipes/chapter1/recipe1_03/MainTestArguments
```
为了保持示例的一致性,这里展示的命令是从不同的目录运行编译后的 Java 类文件。`java` 命令的使用规则与 `javac` 工具类似,可以在 Java 类文件所在的目录中使用 `java` 命令(如果 Java 类不包含在任何 Java 包中),或者从其他目录使用 `-cp` 标志指定文件的完整路径和文件名(或从当前目录到文件的路径)。`-cp` 标志将为 `java` 命令设置 CLASSPATH。
当引入 Java 包时,使用 `java` 命令会变得稍微复杂一些。Java 包实际上是一个可以包含 Java 源文件的目录,大多数 Java 应用程序使用包来组织代码,并且包通常会相互嵌套形成一个有组织的代码文件系统。由于包是目录,可能会认为可以在包中进行遍历以执行 `java` 命令,但这是不正确的。要运行包含在 Java 包中的 Java 类,必须遍历到应用程序源结构的根目录(最外层包之外),并指定包路径和文件名。另一种方法是将最外层包的父目录包含在 CLASSPATH 中,就像前面示例中使用 `-cp` 标志那样。
#### 4. 打印输出
##### 问题
想要将 Java 程序的输出打印到命令行或终端。
##### 解决方案
在类中的任何位置将需要输出的内容以字符串格式传递给 `System.out.println()` 方法。例如,要显示 “I love Java 7” 消息,可以这样做:
```java
System.out.println("I love Java 7");
```
##### 工作原理
`System` 类是 Java 应用程序开发人员的实用工具类,它不能被实例化,包含了许多字段和方法,用于帮助开发人员执行常用任务。将消息打印到命令行是向应用程序用户显示消息或打印错误代码和消息进行调试的常见方式。
`System.out` 是 Java 语言的标准输出流,默认情况下已经打开,可以直接使用,无需进行任何设置。调用 `System.out.println()` 方法时,实际上是使用了一个 `PrintStream` 对象,该对象的 `println()` 方法会显示传递给它的文本。
对于任何基于命令行的应用程序,使用 `System.out` 流将消息打印到命令行是必不可少的。不过,很多 Java 应用程序并不在命令行中使用,在这种情况下,除非应用程序经过编码将该流显示给用户,否则用户无法看到 `System.out` 流的输出。但无论如何,`System.out` 仍然可以用于显示消息,因为发送给它的任何消息都会在 Web 应用程序的服务器日志中打印出来。对于 Swing、JavaFX 或其他基于 GUI 的应用程序,`System.out` 也可以用于许多任务,包括调试。
#### 5. 通过命令行传递参数
##### 问题
想要通过命令行或终端向 Java 应用程序传递参数。
##### 解决方案
使用 `java` 命令行工具运行应用程序,并在应用程序名称后面指定要传递的参数。例如,要将参数 “one” 和 “two” 传递给前面创建的 `MainTestArguments` 类,可以先进入包含最外层包 `org` 的目录,然后执行以下命令:
```bash
java org/java7recipes/chapter1/recipe1_03/MainTestArguments one two
```
执行上述命令后,应该会看到以下输出:
```
Arguments that were passed to the program:
one
two
```
##### 工作原理
所有可以从命令行或终端执行的 Java 类都包含一个 `main()` 方法。`main()` 方法的签名接受一个 `String[]` 类型的参数,这意味着可以将一个 `String` 数组传递给该方法。因此,当运行 Java 类时,传递给该类的任何参数都会存储在这个 `String` 数组中,以便在应用程序中使用。
通常会将一系列字符串或数字传递给可执行的 Java 类,然后方法会遍历 `String` 数组的元素并进行一些处理。在前面的示例中,将两个 `String` 值传递给 `main()` 方法并打印出来。实际上,传递的参数还可以用于更复杂的操作。如果尝试将一个数字传递给 `main()` 方法,它会自动将数字转换为字符串,并将其视为一串数字字符,而不是数值。如果需要处理数值进行计算,可以进行字符串到整数的转换。
#### 6. 获取和设置环境变量值
##### 问题
开发的应用程序需要使用一些操作系统环境变量,并且希望在 Java 应用程序中设置环境变量的值。
##### 解决方案
可以使用 Java 的 `System` 类来检索操作系统环境变量的值。`System` 类有一个 `getenv()` 方法,接受一个 `String` 类型的参数,该参数对应于系统环境变量的名称,它会返回该变量的值。如果没有匹配的环境变量,则返回 `NULL` 值。
以下是一个示例,`EnvVars` 类接受一个环境变量名并打印其值:
```java
public class EnvVars {
public static void main(String[] args) {
if (args.length > 0) {
String value = System.getenv(args[0]);
if (value != null) {
System.out.println(args[0].toUpperCase() + " = " + value);
} else {
System.out.println("No such environment variable exists");
}
} else {
System.out.println("No arguments passed");
}
}
}
```
如果想要获取系统上定义的所有环境变量的列表,可以不向 `System.getenv()` 方法传递任何参数。获取到变量的 `Map` 后,可以遍历它。以下示例展示了如何实现:
```java
public class EnvVarsAll {
public static void main(String[] args) {
if (args.length > 0) {
String value = System.getenv(args[0]);
if (value != null) {
System.out.println(args[0].toUpperCase() + " = " + value);
} else {
System.out.println("No such environment variable exists");
}
} else {
Map<String, String> vars = System.getenv();
for (String var : vars.keySet()) {
System.out.println(var + " = " + vars.get(var));
}
}
}
}
```
##### 工作原理
`System` 类包含许多不同的实用工具,其中 `getenv()` 方法用于返回给定系统环境变量的值。环境变量存储在一个 `Map` 中,这是一个键值对的集合。`getenv()` 方法用于传递环境变量的名称,并返回该变量的值。如果传递给 `getenv()` 方法的环境变量名称没有匹配的变量,则返回 `NULL` 值。
如果想要获取所有环境变量的完整列表,不向 `System.getenv()` 方法传递任何 `String` 值。当不传递值时,会返回一个包含所有系统环境变量的 `Map`。可以遍历这个 `Map`,读取、显示和使用其中的键值对。
#### 7. 使用 Javadoc 记录代码
##### 问题
想要对一些 Java 类进行文档记录,以便将来维护。
##### 解决方案
使用 Javadoc 在要记录的类、方法和字段之前添加注释。注释以 `/**` 开头,后续每行以 `*` 开头,最后以 `*/` 结尾。以下是一个使用 Javadoc 注释的方法示例:
```java
/**
* Accepts an unlimited number of values and
* returns the sum.
*
* @param nums
* @return Sum of numbers
*/
public static BigInteger addNumbers(BigInteger[] nums) {
BigInteger result = new BigInteger("0");
for (BigInteger num : nums) {
result = result.add(num);
}
return result;
}
```
可以以同样的方式在类和字段的开头添加这样的注释。这样做不仅有助于查看代码,还能提供标准的 HTML 格式文档。
JDK 提供了一个名为 Javadoc 的实用工具,它可以解析指定的 Java 源文件,并根据定义的类元素和 Javadoc 注释生成 HTML 文档。如果源文件中没有 Javadoc 注释,也会自动生成一些默认文档。以下命令将为名为 `DeprecationExample.java` 的 Java 源文件创建 Javadoc 文档:
```bash
javadoc java7recipes/chapter1/recipe1_08/DeprecationExample.java
```
执行该命令后,会生成几个包含类、方法和字段文档的 HTML 文件。
##### 工作原理
为应用程序生成文档可能非常繁琐,维护文档更是麻烦。JDK 自带了一个名为 Javadoc 的广泛的文档系统。在代码源中添加一些特殊注释并运行一个简单的命令行工具,就可以轻松生成有用的文档并保持其最新状态。而且,即使应用程序中的某些类、方法或字段没有专门为 Javadoc 实用工具添加注释,也会为这些元素记录默认文档。
创建 Javadoc 注释时,注释行以 `/**` 开头。从 Java 1.4 开始,在注释的每一行开头包含一个 `*` 是一种常见的做法,但这不是必需的。另一个好习惯是缩进注释,使其与要记录的代码对齐。最后,用 `*/` 结束注释。
Javadoc 注释应该以类或方法的简短描述开头,很少使用 Javadoc 注释字段。注释可以有几行甚至包含多个段落,如果要将注释分成段落,可以使用 `<p>` 标签。注释可以包含几个标签,用于指示被注释的方法或类的各种详细信息。Javadoc 标签以 `@` 开头,一些常见的标签如下:
- `@param`:参数的名称和描述
- `@return`:方法返回的内容
- `@see`:对其他代码的引用
还可以在 Javadoc 中包含内联链接,引用不同的 URL。要包含内联链接,可以使用 `{@link My Link}` 标签,其中 `link` 是实际要指向的 URL,`My Link` 是要显示的文本。Javadoc 注释中还可以使用许多其他标签,如 `{@literal}`、`{@code}`、`{@value org}` 等。完整的标签列表可以在 Oracle 网站的 Javadoc 参考文档中查看。
Javadoc 实用工具用于为给定的类创建实际的文档集,它随 JDK 一起提供,位于 JDK 安装目录的 `bin` 目录中。运行 Javadoc 实用工具与运行 `javac` 类似,必须位于要运行该工具的源文件所在的目录中,或者在文件名前加上源文件的完整路径。启动后,Javadoc 会生成几个 HTML 文件,记录给定类的所有特性。该工具足够智能,即使没有手动提供 Javadoc 注释,也会为每个类、方法和字段提供一些默认文档。不过,强烈建议在每个类和方法前添加 Javadoc 注释,以说明其功能。
Javadoc 工具还可以对整个包或源文件运行。只需将整个包名传递给 Javadoc 工具,而不是单个源文件名。例如,如果应用程序包含一个名为 `org.juneau.beans` 的包,可以通过以下命令为该包中的所有源文件生成文档:
```bash
javadoc org.juneau.beans
```
要同时为多个包生成 Javadoc,可以用空格分隔包名:
```bash
javadoc org.juneau.beans org.juneau.entity
```
还可以使用 `-sourcepath` 标志指定源文件的路径:
```bash
javadoc –sourcepath /java/src
```
需要注意的是,默认情况下,Javadoc 工具会将生成的 HTML 文件放在与代码相同的包中。如果希望将源文件和文档分开,这可能会导致混乱。可以通过向 Javadoc 工具传递 `-d` 标志来设置生成文档的目标位置。还有许多其他标志可以传递给该工具,以自定义文档。以下是一些最常用的标志:
| 标志 | 描述 |
| ---- | ---- |
| `-sourcepath` | 设置源文件的路径 |
| `-d` | 设置生成文档的目标位置 |
| `-overview` | 提供概述文本的文件 |
| `-windowtitle` | 添加窗口标题 |
| `-doctitle` | 添加文档标题 |
| `-header` | 提供运行时的标题文本 |
| `-bottom` | 为生成的文档页面底部提供文本 |
| `-use` | 添加 “Use” 文件 |
Javadoc 工具包含许多选项,是记录应用程序源文件的好方法。最好的一点是,如果对源文件进行了更改,只需再次运行 Javadoc 工具即可更新文档。本指南只是简单介绍了 Javadoc 的许多可用选项,如果想了解更多信息,可以查看 Oracle 网站上的文档。
### Java 7 入门指南
#### 8. 总结与流程梳理
在前面的内容中,我们学习了 Java 7 开发中的多个重要方面,下面通过流程图和总结来梳理整个开发流程。
```mermaid
graph LR
A[配置 CLASSPATH] --> B[编写可执行 Java 类]
B --> C[编译 Java 类]
C --> D[执行 Java 类]
E[打印输出] --> F[通过命令行传递参数]
G[获取和设置环境变量值] --> H[使用 Javadoc 记录代码]
B --> E
B --> F
B --> G
B --> H
```
这个流程图展示了 Java 开发的基本流程:首先配置好 CLASSPATH,为后续的开发提供必要的资源路径;接着编写包含 `main()` 方法的可执行 Java 类;然后使用 `javac` 工具编译类文件;最后使用 `java` 工具执行编译后的类。在开发过程中,还可以进行打印输出、传递参数、获取和设置环境变量值以及使用 Javadoc 记录代码等操作。
#### 9. 常见问题与解决方案
在 Java 开发过程中,可能会遇到一些常见问题,下面是一些问题及对应的解决方案:
| 问题 | 解决方案 |
| ---- | ---- |
| 编译时提示找不到类 | 检查 CLASSPATH 是否配置正确,确保所需的类和库都在 CLASSPATH 中。可以使用 `export CLASSPATH` 命令或 `javac -classpath` 选项来设置。 |
| 执行时提示找不到主类 | 确认类名是否正确,并且类中包含 `main()` 方法。执行时不要添加 `.java` 或 `.class` 后缀,同时要正确设置包路径和 CLASSPATH。 |
| Javadoc 生成的文档不符合预期 | 检查 Javadoc 注释是否正确,标签使用是否规范。可以使用不同的标志来定制文档,如 `-sourcepath`、`-d` 等。 |
#### 10. 代码示例回顾与拓展
##### 配置 CLASSPATH 示例拓展
在配置 CLASSPATH 时,如果需要添加多个目录和 JAR 文件,可以使用以下示例:
```bash
export CLASSPATH=/JAVA_DEV/some-jar.jar:/JAVA_DEV/another-jar.jar:/JAVA_LIB/myjar.jar:/JAVA_LIB/other-lib.jar
```
这样就可以将多个依赖项添加到 CLASSPATH 中。
##### 可执行 Java 类示例拓展
在 `MainTestArguments` 类的基础上,我们可以进一步拓展功能,例如对传递的参数进行计算:
```java
public class MainTestArgumentsExtended {
public static void main(String[] args) {
if (args.length > 0) {
int sum = 0;
System.out.println("Arguments that were passed to the program: ");
for (String arg : args) {
try {
int num = Integer.parseInt(arg);
sum += num;
System.out.println(arg);
} catch (NumberFormatException e) {
System.out.println(arg + " is not a valid number.");
}
}
System.out.println("Sum of valid numbers: " + sum);
} else {
System.out.println("No arguments passed to the program.");
}
}
}
```
这个示例中,我们尝试将传递的参数转换为整数并求和,如果参数不是有效的数字,则会输出相应的错误信息。
#### 11. 学习建议
- **多实践**:通过编写代码、编译和执行程序,加深对 Java 开发流程的理解。可以尝试不同的参数和配置,观察程序的运行结果。
- **阅读文档**:JDK 文档是学习 Java 的重要资源,特别是 Javadoc 的相关文档,可以帮助你更好地使用 Javadoc 记录代码。
- **参与社区**:加入 Java 开发社区,与其他开发者交流经验,分享遇到的问题和解决方案。
#### 12. 总结
通过本文的学习,我们掌握了 Java 7 开发的基础知识,包括配置 CLASSPATH、编写可执行 Java 类、编译和执行类、打印输出、传递参数、获取和设置环境变量值以及使用 Javadoc 记录代码等。这些知识是 Java 开发的基础,希望大家能够熟练掌握,并在实际开发中灵活运用。在后续的学习中,可以进一步深入学习 Java 的高级特性和框架,提升自己的开发能力。
0
0
复制全文
相关推荐









