这个 Project 中你将动手搭建 Java 的编译和运行环境. 同时将编写第一个 Java 程序. 在实验内容中, 你会和这个程序做一些互动. 将看到第一个 Java 编译错误, 第一个 Java 运行时错误以及第一个Bug. 对这些 Java 程序和实验结果你一定会有很多疑惑和问题. 可以尝试自己查资料解决, 也可以把它们记录下来. 在今后的课程中, 我们会逐步找到这些问题的答案. 无论如何, 现在最值得庆祝的是你已经能用 Java 输出那句振奋人心的话: Hello world!
我们将使用命令 javac
来编译 Java 程序, 用命令java
运行编译好的 Java 程序. 这两个命令包含在 JDK (Java Development Kit) 中. JDK 有不同的实现, 其中比较常见的是 Oracle JDK 和 OpenJDK.
安装 JDK 之后可能仍然不能编译 Java 程序. 需要设置的环境变量. 环境变量可以简单的理解为一种"全局变量". 运行在 Windows 下的任何程序可以通过 Windows 提供的函数访问这些变量. 在这里需要通过设置三个环境变量: JAVA_HOME, classpath, path
来完成 Java 环境的搭建.
JAVA_HOME
的变量. 变量值为 jdk 安装时指定的安装目录, 比如 D:\Java\jdk1.8.0_20
.仍在"系统变量"下, 新建名为 classpath
的变量, 变量值为
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
注意: 第一个分号前有一个点号".". Java 在编译和运行时往往依赖一些特定的"库"文件(类似于 C 语言中的 stdio.h
等). 这些库文件被放在磁盘上的特定位置 (这里就是JDK在安装时指定的路径). 环境变量 classpath
的作用在于告诉 Java 这些库文件所在的位置. 在设置了这个变量之后, 编译和运行 Java 程序就可以通过访问 classpath
找到相应的"库". 以上的变量设置具体解释如下:
.
, %JAVA_HOME%\lib
以及 %JAVA_HOME%\lib\tools.jar
. 它们用分号";"隔开.%JAVA_HOME%
表示取环境变量 JAVA_HOME
的值. 根据之前的设置, 它的值为 D:\Java\jdk1.8.0_20
. 因此, %JAVA_HOME%\lib
实际就是 D:\Java\jdk1.8.0_20\lib
. 对%JAVA_HOME%\lib\tools.jar
同理..
有一个固定含义: 表示程序运行的目录.D:\Java\jdk1.8.0_20\lib
, D:\Java\jdk1.8.0_20\lib\tools.jar
, 以及程序所在的目录中查找相应的库函数".仍在系统变量下, 找到 path
变量进行编辑. 在变量值末尾添加
;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
path
变量是为了帮助系统能够找到已经安装好的 javac
和 java
命令. 与 classpath
变量类似, 系统在运行一个命令时, 需要知道这个命令的二进制文件所在的位置. 通过在path
后添加这两个目录, 当系统直接运行 javac
或 java
时就能在指定位置找到这两个命令.
完成上述配置后, 可检测是否配置成功: 在开始菜单中打开 cmd
, 进入命令行, 分别输入 java
和 javac
进行测试.
在 Linux 上安装 JDK 同样比较容易. 这里将以 Ubuntu 为例, 其他发行版本请查阅相关文档. 在终端下执行 javac
与 java
, 确认是否已经安装 JDK. 若否, 则执行如下两条命令进行安装:
sudo apt-get update
sudo apt-get install openjdk-8-jdk
完成你的第一个 Java 程序需要三个步骤: 编写源代码, 编译, 运行. 下面以 Windows 为例.
打开一个文本编辑器 (例如记事本), 写入下面的程序
public class HelloWorld {
public static void main (String args[]) {
System.out.println("Hello World!");
}
}
将其保存为HelloWorld.java. 假设保存路径为"D:\HelloWorld\"
打开 cmd
, 进入 HelloWorld.java 所在的目录
D:
cd D:\HelloWorld\
输入以下命令进行编译
javac HelloWorld.java
若编译错误, 将会输出编译错误信息. 若编译成功, 则没有信息输出, 同时生成一个 HelloWorld.class 文件 ( .class 文件为编译好的 Java ByteCode, 执行时由 Java 虚拟机执行其中代码).
打开 cmd
, 进入 HelloWorld.java 所在的目录
D:
cd D:\HelloWorld\
输入以下命令运行程序
java HelloWorld
若运行正确, 将在屏幕输出 Hello World!
. 否则将输出运行错误信息.
~/HelloWorld/
.编译: 打开终端, 执行以下两条命令
cd ~/HelloWorld
javac HelloWorld.java
运行: 打开终端, 执行以下两条命令
cd ~/HelloWorld
java HelloWorld
public static void main()
会发生什么?编写程序 Hi.java
public class Hi {
public static void main(String[] args) {
System.out.print("Hi, ");
System.out.print(args[0]);
System.out.println(". How are you?");
}
}
执行以下命令分别会发生什么? 你能理解 args 的含义吗?
java Hi
java Hi @#$%
java Hi 1024
java Hi Bob
java Hi.java Bob
java Hi.class Bob
java Hi Alice Bob
修改以上程序, 使它能够接收3个命令行参数, 并倒序输出它们. 比如执行 java Hi Alice Bob Carol
, 输出 Hi Carol, Bob, Alice.
.
Java 语言的变量类型 (int, float, double), 表达式(运算符, 逻辑表达式等)以及控制结构 (条件语句, 循环语句等) 和 C 语言比较相似. 你能否用使用 C 语言的知识写一些稍微复杂的 Java 程序呢?