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
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:
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)
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.