Prior to Java 11, to run your code you have to first compile it, then you can run it. Here’s an example:
javac test.java
java test
Since Java 11, you can still do javac
+ java
, or you can run java
by itself to compile and auto-run your code. Note that no .class
file will be generated. Here’s an example:
java test.java
If you run java -help
, you’ll see the various allowed usages. Here’s what it looks like on my machine. The last one is what you ran into: java [options] <sourcefile> [args]
which will “execute a single source-file program”.
$ java -help
Usage: java [options] <mainclass> [args...]
(to execute a class)
or java [options] -jar <jarfile> [args...]
(to execute a jar file)
or java [options] -m <module>[/<mainclass>] [args...]
java [options] --module <module>[/<mainclass>] [args...]
(to execute the main class in a module)
or java [options] <sourcefile> [args]
(to execute a single source-file program)
UPDATE:
As pointed out by @BillK, OP also asked:
why do we need the javac command?
The reason we need javac
is to create .class
files so that code can be created, tested, distributed, run, shared, etc. like it is today. The motivation for JEP 330 was to make it easier for “early stages of learning Java, and when writing small utility programs” without changing any other existing uses.