JavaRush /Курси /Модуль 1. Java Syntax /Компіляція класу в байт-код із консолі

Компіляція класу в байт-код із консолі

Модуль 1. Java Syntax
Рівень 5 , Лекція 2
Відкрита

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
Коментарі (5)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Станіслав Рівень 20
25 березня 2024
Є питання. Не можу зрозуміти як віконаті ці кроки:" 1. Збережемо цей код у файл D:/temp/MySolution.java. 2.Скомпілюємо наш код, використовуючи команду ..." Де про це вказано?
Denis Рівень 14
25 травня 2023
Зробив все покроково по лекції. Якщо запускаю jar, отримую замість "Привіт командний рядок!" в консолі знаки питання. Як виправити encoding, щоб отримати валідне відображення рядку? Дякую.

C:\Users\User\Desktop>java -jar myjar.jar
???????????? ???????°?????????? ??????????!
Dmytro Haiovyi Рівень 111
26 травня 2023
для коректного відображення потрібно щоби файл з вихідним кодом був у кодуванні utf-8
Dmytro Haiovyi Рівень 111
26 травня 2023
якщо не помогло - то ось приклад налаштування консолі: https://javarush.com/groups/posts/4048-kompiljacija-v-java
Denis Рівень 14
26 травня 2023
Файл в utf-8. За статтю - дякую!