Java code is ran via the JVM, which:

  1. Uses its Interpreter to read the byte-code given by the Java Compiler
  2. Runs its JIT compiler for optimization optionally
  3. Runs the code for every device.

Therefore, Java is kind of both interpreted and compiled, but not* fully* interpreted and not fully compiled For our intents, we will assume it’s interpreted