It seems little confusing for java beginner to understand the
exact difference between compilation and interpretation. Java is compiled
language because java code is compiled to get byte code. Java is interpreted language
because this byte code is interpreted into native code.
Actually getting output from java program is two steps
process compilation and interpretation. The executable used for these steps are
java compiler (javac) and java interpreter (java). First step is compilation in
which the java compiler compiles the source code to generate byte code in the
form of .class file. Actually this byte code is not machine code but it is just
an intermediate code. In the second step java interpreter uses this byte code
to generate native code for under lying operating system. The JIT (Just In
Time) compiler comes into action in second interpretation step. The JIT reads
the byte code to generate native code dynamically so that program runs fast.
Finally in short, java is compiled to byte code which is then
used by JVM where it gets interpreted to native code. So java is compiled and
interpreted both.