JVM не может напрямую запустить код, который ты пишешь. Она может выполнять только программы записанные байт-кодом. Байт-код — это язык низкого уровня, близкий к машинному коду.

Компиляция в Java — это перевод программы написаной на Java (высокий уровень) в такую же программу записанную байт-кодом.

Твой код в файле с расширением .java передается компилятору, и если в коде не было ошибок, после компиляции ты получишь новый файл с байт-кодом. У файла будет такое же имя, но другое расширение: .class. А если в коде были ошибки, то говорят, что «программа не скомпилировалась». Тогда нужно прочитать сообщение об ошибках и исправить их.

Компилятор представляет из себя команду javac, входящий в JDK (Java Development Kit). К примеру, если установить только JRE (Java Runtime Environment), то компилятора там не будет! Будет только JVM, которая умеет запускать только байт-код. Так что устанавливаем JDK, и передаем компилятору наш файл .java.

Для примера возьмем простую программу с выводом в консоль:


class MySolution {
   public static void main(String[] args) {
      System.out.println("Привет командная строка!");
   }
}

Сохраним этот код в файл D:/temp/MySolution.java.

Скомпилируем наш код, используя команду


D:\temp>javac MySolution.java

Если в коде нет ошибок компиляции, в папке temp появится файл MySolution.class. При этом файл MySolution.java с твоим кодом никуда не денется, останется на месте. А вот MySolution.class уже содержит байт-код, и готов к непосредственно запуску с помощью JVM.

Наш пример максимально простой, но команда javac используется и в самых больших и сложных проектах. Поэтому знать принципы ее работы очень полезно.

Компилировать можно и больше одного класса за раз. Например, пусть в папке temp есть еще один файл Cat.java:


D:\temp>javac MySolution.java Cat.java

или так:


D:\temp>javac *.java

После компиляции файлы .class можно упаковать в jar файл, чтоб его было удобно переносить и запускать на разных компьютерах. Пример команды для создания jar файла:


D:\temp>jar cvfe myjar.jar MySolution MySolution.class Cat.class

где:

  • jar – команда для создания .jar файлов, входит в состав JDK;

  • cvfe – флаги, означающие:

    • с – нужно создать новый jar файл;

    • v – выводить дополнительную информацию в процессе выполнения команды;

    • f – вместе с myjar.jar говорит о том, файл с каким именем мы получим в результате;

    • e – вместе с MySolution указывает, какой класс содержит метод main;

  • MySolution.class Cat.class – разделенные пробелом имена файлов, которые надо упаковать в jar файл.

Запуск полученного jar файла:


D:\temp>java -jar myjar.jar
Для более детального ознакомления:
  1. Компиляция и исполнение Java приложений под капотом
  2. Компиляция в Java
  3. В javac и jar есть встроенная помощь. Для ее отображения выполни в командной строке:
    • javac --help
    • jar --help