图源:
发现Java环境这块还是应该说一下的,回来补一篇。
传统方式
现在有多种不同的公司出品的JDK(比如微软的基于OpenJDK出了一款),但学习的话还是推荐Oracle自家的:
安装没啥好说的,装好后可以在命令行下验证:
❯ java --version
openjdk 16.0.1 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-16.0.1+9 (build 16.0.1+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-16.0.1+9 (build 16.0.1+9, mixed mode, sharing)
可以使用java --help
命令查看相关可用参数,如果输出结果包含乱码,可以通过添加用户环境变量JAVA_TOOL_OPTIONS
,值设置为-Dfile.encoding=UTF-8
的方式解决。
编写一个测试程序:
class Hello{
public static void main(String[] args){
System.out.println("Hello world!");
}
}
命令行执行:
❯ java Hello.java
Hello world!
对于简单的代码这样做没有问题,但有时候我们需要使用标准库或其它第三方库,比如:
import ch1.cast2.Main;
class Reference1
{
public static void main(String[] args)
{
System.out.println("Hello World!");
Main.main(new String[]{});
}
}
当然,要引用的目标代码需要先编译成字节码(.class文件):
❯ javac ..\ch1\cast2\Main.java Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
如果直接运行:
❯ java .\Reference1.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
.\Reference1.java:1: 错误: 程序包ch1.cast2不存在
import ch1.cast2.Main;
^
.\Reference1.java:7: 错误: 找不到符号
Main.main();
^
符号: 变量 Main
位置: 类 Reference1
2 个错误
错误: 编译失败
如果出现乱码,见上面给出的乱码解决方案。
提示很明确,找不到包ch1.cast2
,默认情况下,java程序会通过环境变量CLASSPATH
中的路径来查找源码中引用的包。所以将目录代码所在的目录添加到环境变量CLASSPATH
就可以解决。
这里添加的内容为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;D:\workspace\java\java-notebook
。
CLASSPATH
的值包含多个路径,用;
分隔,最前边的.
表示当前路径,之后的dt.jar
和tools.jar
代表标准库和相关工具,最后是我们要引用的代码所在的目录。
在JavaSE5之前安装JDK就必须配置
CLASSPATH
,但现在已经不用了,即使没有CLASSPATH
,java也会自动检索当前路径和JAVA_HOME
下的相关工具。
再次执行:
❯ java .\Reference1.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Hello World!
Ã
2
2
当然,这么做很不方便,实际上除了教学用途外,很少有人直接用这种方式编译和执行Java程序,一般情况下我们都是使用IDE来开发和运行Java程序。
IDE
Java的IDE有很多,比如老牌的Eclipse(我许多年前用的这个)。不过现在喜欢用VSCode,所以就用VSC来举例。
如果编写简单代码,摸索着就能上手,很简单,如果遇到麻烦可以去官网:
用VSC编写简单Java代码也要求你使用
package
设置包名,否则不能编译通过,我不清楚这是为啥...
除了直接在目录中创建单个Java文件的“简单方式”以外,还可以利用插件创建“Java工程”:
使用Ctrl+shift+P
打开命令行,输入java
,选取“创建Java项目”,然后选择一个目录后输入项目名称即可。
VSC会打开一个新的窗口,在原窗口中可以看到,项目以指定目录中以项目名作为子目录名的方式创建:
Java项目中会自行创建三个目录:
-
bin,生成的字节码
-
lib,引用的第三方包
-
src,源码
之所以要使用这种方式编写Java程序,就是因为提供一些额外的辅助工具,可以方便地管理第三方包和自己的包。
比如如果要创建自己的包,一般情况下可能需要在CLASSPATH
中的某个目录下创建xyz/icexmoon/java/notes/
这样一层一层的目录,很麻烦。
如果要在Java工程中创建,只需要在左下的JAVA PROJECTS
工具栏中右键->创建包:
在包名输入框中输入xyz.icexmoon.java.notes
:
然后就能看到JAVA PROJECTS
中生成相应的包,以及上方的资源管理器中生成相应的目录。
点击包名上的+
就可以给包添加类。
这里添加一个简单的:
package xyz.icexmoon.java.notes;
public class Add {
public static int execute(int a, int b) {
return a + b;
}
}
src
目录下的App.java
是"java工程"的入口文件,可以在该文件中使用刚才创建的类:
import java.util.Random;
import xyz.icexmoon.java.notes.Add;
public class App {
public static void main(String[] args) throws Exception {
System.out.println("Hello, World!");
Random rand = new Random();
int a = rand.nextInt(10);
int b = rand.nextInt(10);
System.out.println(a+"+"+b+'='+Add.execute(a, b));
}
}
JAVA PROJECTS
还提供一个工具,可以将当前的工程导出为Jar包:
点击后会自动生成,生成好后会有弹窗提示,点击后会打开jar包所在目录。
命令行执行:
❯ java -jar .\test.jar
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Hello, World!
0+3=3
文章评论