Short answer
You write source in a .java file. The compiler javac checks it and produces one .class file per class, containing bytecode.
Explanation
You launch it with `java YourClass`; the JVM starts, its class loader loads the needed .class files, the bytecode verifier checks them for safety, and then the JVM executes your program starting at the main method -- interpreting the bytecode and, for hot code, JIT-compiling it to native machine code for speed.
Common mistakes
- Skipping the class loading and verification step between compile and execute.
- Mixing up javac (compiles) and java (launches the JVM).