通过安装 Java 环境的时候,我们知道了 java 和 javac 各自的功能:
java 用于执行。如果只是运行外部程序不开发,安装 jre 即可;
javac 用于编译及运行。这个只有 jdk 目录下才有的命令,开发者如果要开发就一定得先将 .java 文件编译成 .class 文件。这种情况就是安装后者。
知道了 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 程序。
参考链接