第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
可以 cd 到 bin 中然后再 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 IDE 有 IDEA、Eclipse 等,使用 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-10-05