Does the ‘java’ command compile Java programs?

Prior to Java 11, to run your code you have to first compile it, then you can run it. Here’s an example:

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:


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.

Leave a Comment