作为一个准备入门 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 源代码文件提供的程序。
👇🏻 点击下方阅读原文,获取鱼皮往期编程干货。
往期推荐