Компилятор языка программирования Java, javac, читает исходные файлы, записанные в языке программирования Java, и компилирует их в файлы класса байт-кода. Дополнительно, компилятор может также обработать аннотации, найденные в источнике и файлах класса, используя Сменную Аннотацию, Обрабатывающую API. Компилятор является инструментом командной строки, но может также быть вызван, используя API Компилятора Java. Компилятор принимает исходный код, определенный Спецификацией языка Java (JLS), и производит файлы класса, определенные Спецификацией виртуальной машины Java (JVMS).