In addition to the Java compiler, the Java interpreter is another important part of Java programming. The Java interpreter decodes and executes every statement of bytecode for the Java Virtual Machine and is part of the machine itself. Each platform, for example, a Mac, has its own interpreter that functions to interpret bytecode so that it's compatible with a Mac.
This is what makes Java special; compared to other programs that rely solely on a compiler OR an interpreter, Java has BOTH. Instead of merely compiling raw machine language and executing it on one type of machine, Java bytecode plus the Java interpreter allows your code to run on different types of machine architectures. Java is an intermediary language that achieves platform independence.