Java | 掌握 java 和 javac 的使用

1,731 阅读3分钟

通过安装 Java 环境的时候,我们知道了 java 和 javac 各自的功能:

java 用于执行。如果只是运行外部程序不开发,安装 jre 即可;

javac 用于编译及运行。这个只有 jdk 目录下才有的命令,开发者如果要开发就一定得先将 .java 文件编译成 .class 文件。这种情况就是安装后者。

详见 Java | 为什么安装环境时需要两个 JRE

知道了 java 和 javac 的作用之后,接下来投入使用。

1、不带包名的 Java 文件

这一种是最原生的,在文件的根目录下打开命令行执行。

javac Hello.java
# 编译成功,此时在文件的当前路径中会出现一个同名的 .class 文件。该文件是字节码文件,可执行运行。
javac Hello
# 此处输出 Hello 程序中的输出内容。

2、带包名的 Java 文件

然而,在实际开发中,通常都是将 java 写在包下面的,包就相当于我们的文件夹,便于分类管理。此时,只要将原来的文件改成路径格式,让编译器通过路径 找得到文件即可。

注意,如果是在文件资源管理器中打开命令行,请保证当前路径是在最高层包的文件夹。比如,如果在 IDE 中使用,保证当前当前路径是在 src 路径的正下方。

比如我这里的项目路径是在 D:\program\se-eclipse\01type\ 就要再进一格,进到 src 文件下才可继续操作。【否则会出现找不到主类文件的情况】

将原来直接在后面添加 java 文件的完整文件名修改成 路径格式的完整文件名(编译)。比如说,我这里的包名和类是 jin.test.HelloDemo.java。那么结果就是

D:\program\se-eclipse\01type\src> javac jin\test\HelloDemo.java
# 编译成功,不会有任何提示。同样的,也会生成编译后的 .class 文件,这个文件可可直接执行
# 所以,后面的文件不需要后缀
D:\program\se-eclipse\01type\src> java jin\test\HelloDemo
hello world
# 执行完成
D:\program\se-eclipse\01type\src>

如果是想投机取巧直接到 .java 文件的当前路径下,“那是不是就不需要管包名啦”,“直接按照没包名的编译运行就好了”,那么可以编译生成文件是没错,但是这时候编译生成出来的文件想一下,会包含包信息吗?显然不会。一开始编译的时候,就没有交代包相关的信息,那它还能正常执行吗?

运行编译出来的文件时,会看见类似以下的提示。

D:\program\se-eclipse\01type\src\jin\test>javac _Number.java

D:\program\se-eclipse\01type\src\jin\test java _Number
错误: 找不到或无法加载主类 _Number
# 毕竟程序是确实有写有包名信息在里面的。是包相关的。

总结

1、javac 也是根据路径去寻找程序。

2、java 用于运行程序,javac 用于将 java 文件编译成 class 文件(

3、javac 是专门用来编译 .java 文件,所以要加 .java 后缀名。.class 文件又叫平台无关的字节码文件,字节码本身就是一个可执行程序了,本身就是一个应用了,无需再加后缀。

ps:本篇的主要记录的还是如何编译和运行带包名的 java 程序。

参考链接

docs.oracle.com/javase/9/to…