跳转至

第2章 Java程序设计环境

下载JDK

这篇博客 介绍了各个版本的区别。

我安装的版本是 Install Eclipse Temurin™ | Adoptium

设置环境变量

如果按照上面的教程安装,不用设置环境变量。

export JAVA_HOME=/usr/local/jdk-11.0.20.1+1 #jdk包的位置
export PATH=$JAVA_HOME/bin:$PATH #添加命令行工具

# 这个变量是用于全局的寻找CLASS的路径 不建议开启
# export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 java --version
openjdk 11.0.20.1 2023-08-24
OpenJDK Runtime Environment Temurin-11.0.20.1+1 (build 11.0.20.1+1)
OpenJDK 64-Bit Server VM Temurin-11.0.20.1+1 (build 11.0.20.1+1, mixed mode)

编译运行

通常认为 java 是介于 编译型解释型 之间的编程语言。具体来说,可以使用 javac 命令将 .java 文件编译成 .class 文件, .class 是字节码,不是二进制可执行文件,而是要使用 java 命令,将 .class 交给 JVM 解释执行。

新建一个 Hello.java 文件:

public class Hello {
    public static void main(String[] args) 
    {
        System.out.println("Hello, World!");
    }
}

执行以下指令:

 javac Hello.java
❯ ls
Hello.class  Hello.java
❯ java Hello      
Hello, World!

CLASSPATH

上面的程序虽然可以直接使用 java 命令直接运行:

 ls
Hello.java
❯ java Hello.java                   
Hello, World!

但是,只有包含main函数、且类依赖关系非常简单的文件才可以这样做。大多数情况下,都是使用 javac 命令生成 .class 文件,然后用 java 命令执行。

在使用 javac 命令而不指定 -d 参数时,生成的 .class 文件会默认生成在当前目录下。比较好的习惯是将项目的源代码和二进制文件分开存放,可以用 -d 参数指定 .class 文件的存放的路径,例如这个项目路径:

.
├── bin
├── lib
└── src
    └── Hello.java

在这个项目结构中,src 存放所有源代码文件,bin 存放所有 .class 文件。

使用 javac -d 在指定目录中生成 .class 文件:

 javac src/Hello.java -d bin/ 

此时文件结构变成

.
├── bin
│   └── Hello.class
├── lib
└── src
    └── Hello.java

可以 cdbin 中然后再 java 执行(注:可以尝试一下,是不能直接在外面 java bin/Hello 的,原因是 java 命令严格按照 1级包名/2级包名/.../类名 的格式解析,所以这条命令会将bin/解析为一个包(package)的名字, 而Hello.java 中并没有没有指定任何package ):

 cd bin
❯ java Hello
Hello, World!

另一种方法是指定 CLASSPATH,只需要在执行 java 命令时增加 -cp 参数:

❯ java -cp bin Hello  
Hello, World!

上述指令指定了 bin 作为 CLASSPATH , 这样就会在 bin 目录下寻找 .class 文件,咋一看这种方式和 cd 没有区别,但是, -cp 可以指定多个路径作为 CLASSPATH,(在Linux中可以用 : 将多个路径隔开),并且可以设置全局的 CLASSPATH 环境变量(但不推荐这样做)。

IDE 如何简化以上流程?

许多现代的 IDE 可以简化上述的流程,例如,为每个项目添加 CLASSPATH,并且随着文件的改动 自动编译,相当于帮我们动态的执行 javac -d bin ... ,也能 自动管理文件 ,例如清理不再依赖的类等。我们只需要点击 run 按钮,就会自动执行 java -cp bin ... 的命令。当然,IDE 能做的不止这些,常见的 java IDEIDEAEclipse 等,使用 VSCode 并配置一些插件也可以达到 IDE 的开发体验。

JShell

Java 9 开始,在命令行输入 jshell 即可进入交互式编程环境:

 jshell
jshell> "Core Java".length()
$1 ==> 9
jshell> 5 * $1 - 3
$2 ==> 42
jshell> int answer = 5 * $1 - 3
answer ==> 42
jshell> Math.log10(0.001)
$4 ==> -3.0

最后更新: 2023-12-03
创建日期: 2023-10-05