1.场景:
想服务端获取IP地址的Java代码,本地macOS可以运行,服务器上没有全局安装Java,所以不能Javac x.java && java X执行。
又不能全局安装某个版本,这样可能会影响其他应用的运行。
2.操作:
解压下载的Java某个版本在某个路径下,如:/a/b/java-xx/
然后将待测试的x.java放在/a/b/目录下。
2.1 执行:
- JDK(1.0-10)
/a/b/java-xx/javac /a/b/x.java
/a/b/java-xx/java /a/b/x
// 输出结果 - JDK(11++)
/a/b/java-xx/java /a/b/x.java
// 输出结果
Java编译知识
Java 从 Java 11 开始支持直接使用 java *.java
命令运行单个源代码文件,而无需先使用 javac
编译。这一特性被称为 Java 源代码直接执行功能(Shebang 支持),简化了开发流程。
特性说明
-
无需显式编译
直接使用java HelloWorld.java
即可运行代码,Java 会自动编译并执行,无需手动调用javac
。 -
单文件限制
该功能仅支持单个源代码文件,且文件中只能有一个public
类,并且类名必须与文件名匹配。 -
依赖处理
如果代码依赖其他类,需要通过-cp
参数指定类路径,例如:java -cp lib/* MyMainClass.java
历史版本对比
Java 版本 | 执行方式 | 示例 |
---|---|---|
Java 1.0-10 | 必须先编译再运行 | javac HelloWorld.java java HelloWorld |
Java 11+ | 支持直接执行源代码文件 | java HelloWorld.java |
示例
假设我们有一个简单的 HelloWorld.java
文件:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, Java 11+!");
}
}
在 Java 11+ 中,可以直接运行:
java HelloWorld.java # 无需先编译
注意事项
-
版本要求
必须使用 Java 11 或更高版本。可以通过以下命令检查版本:java --version
-
模块化代码限制
如果代码使用了 Java 模块系统(module-info.java
),则无法直接执行,仍需编译。 -
性能影响
直接执行源代码会在每次运行时隐式编译,可能比预编译的.class文件稍慢。
如果你的 CentOS 系统使用的是 Java 11 或更高版本,可以尝试直接执行 .java
文件。但如果遇到依赖复杂的场景,建议还是使用传统的编译-运行流程。