当前位置: 欣欣网 > 码农

为了帮新人上手,多年来 Java 偷偷做了这个改进。。

2024-03-25码农

作为一个准备入门 Java 的新手程序员来说,第一件事儿可能就是要下载一个 IDEA ,如果说有什么 IDE 比 IDEA 还大的话,那恐怕也就是 Visual Studio 了。 下载完了还可能一头懵,不知道从何下手。

记得作者刚接触 Java 的时候,那时候还在做 .NET(C#) ,然后对 Python 也比较熟悉。

对于 Python 来说,一个新手装完 Python ,连 IDE 都不用装,就可以在终端中用命令行的方式体验一下交互式编程了,写个 Hello World 也就算了入门了。

而对于 C# 来说,虽说 Visual Studio 好几个G,但是装完之后,一切也就准备好了,建一个命令行项目,写个 Hello World 也算入门了。

但是当初我刚下载完 IDEA 之后,准备建一个命令行应用,找了半天没找到(我以为根本没这个选项,直到很久之后我才发现用 IDEA 怎么创建命令行应用)。结果,我本就准备写个 Hello World 体验一下,发现还要用 Maven 或 Gradle 创建,要知道对于一个 Java 都没入门的人来说,Maven 和 Gradle 只会让人更加糊涂。

如果不用 Maven 或 Gradle 呢,创建一个 java 文件,还要用 javac 编译。 javac 是什么好像更让人迷糊了。

Java 也考虑到这个问题了,让准备入门或体验Java的同学,能够以更快、更简单的方式尝试一下 Hello World,不用下载 IDE,不用自己手动编译,只要抄一段 Hello World,直接一个java 命令运行就好了,像 Python 一样简单。

Java 8 确实有些麻烦

假设我们抄了一段 Java 代码,一个 Moon.java 类,里面一个 main 方法,输出一个 Hello

public classMoon{
publicstaticvoidmain(String[] args){
System.out.println("Hello");
}
}

没有 IDE 的情况下,我们尝试了一下 java Moon java Moon.java

发现都不行,所以,如果我们想要运行 Moon main 方法,要先用 javac 进行编译。

javac Moon.java

编译成功后,会在 Moon.java 的目录中出现一个 Moon. class 的编译后的文件,这个就是字节码文件,JVM 只认这种格式。

然后我们在用 java 命令来执行 Moon 类,才能够执行成功。

java - classpath . Moon

这时,就能看到 main 方法执行成功了,注意其中的 - classpath . 参数是告诉 Java 去当前目录查找类文件 Moon

现在改的稍微复杂一些了,新加了一个类文件。

Helper.java 文件

public classHelper{
publicstaticvoidsayHello(){
System.out.println("Hello");
}
}

然后 Moon.java 类在 main 方法中调用 Helper.sayHello 方法。

public classMoon{
publicstaticvoidmain(String[] args){
Helper.sayHello();
}
}

那之后再编译的话,就要把这两个 Java 文件都包含在 javac 的命令中。

javac Moon.java Helper.java

之后仍然可以正常运行 java - classpath . Moon

JDK 11 之后

而在 JDK 11 之后,就没这么麻烦了,有点像 Python 那种解释型语言了,直接写完就可以运行了。

仍然是那个输出 Hello Moon 类。

public classMoon{
publicstaticvoidmain(String[] args){
System.out.println("Hello");
}
}

直接执行 java Moon.java 就行了。

但是,问题来了,如果是两个文件,就像 JDK 8 的那个例子, Moon.java 调用了另一个 Helper.java 的方法,大于1个类文件的情况,那还是不行,仍然还是要先编译。

JDK 22 之后

前几天 JDK22 已经发布了,我一看,嘿,JDK22竟然又做了调整,解决了多个文件调用的问题。

Moon.java 调用了另一个 Helper.java 的方法,现在,我们怎么做呢。

直接 java Moon.java ,然后就可以了!

这是因为增强了 java 启动器的源文件模式,以便能够运行作为多个 Java 源代码文件提供的程序。


👇🏻 点击下方阅读原文,获取鱼皮往期编程干货。

往期推荐