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