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

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

Открыта

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
Комментарии (11)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
9 июля 2025, 09:12
Очень полезная информация.
Руслан
Уровень 48
13 июня 2025, 22:53
Очень интересная тема🤩
Николай
Уровень 3
9 января 2025, 22:21
с – (create) нужно создать новый jar файл; v – (verbose output) выводить дополнительную информацию в процессе выполнения команды; f – (file) вместе с myjar.jar говорит о том, файл с каким именем мы получим в результате; e – (executable jar) вместе с MySolution указывает, какой класс содержит метод main для запуска программы.
Max
Уровень 93
11 октября 2024, 20:00
Больше года от последнего коментария по теме, обновим. Тема мне понравилась, DOS команды руки помнят, погонял туда-сюда команды создания class и jar файла, перед этим проверил path пути в системе. Столкнулся с такой ошибкой, txt файл создал в блокноте, ошибка при компилляции связанна с прочтением кириллицы, открыл в IDE, переписал на English вывод println и всё заработало. Слышал о note+ может поставить, если кому не лень отпишитесь стоит ли заморачиваться или просто в IDE править если что.
Максим
Уровень 16
Expert
12 июля 2023, 15:17
Тема конечно очень интересная и увлекательная, но пока мало что понятно. 😂 Возможно далее по ходу дела будет понемногу проясняться и утрясаться. 🤔
hidden #3171829
Уровень 6
26 сентября 2022, 01:01
Информации здесь в достатке ! Отличный ресурс , но есть нюансы - могучий язык реализован кривовато:) Много ошибок в смысловых предложениях , порой бессмыслица. Но поживём , увидим.
Игорь
Уровень 49
12 июля 2022, 09:13
MySolution.java Cat.class – разделенные пробелом имена файлов, которые надо упаковать в jar файл. Автору статьи большое спасибо. Тем не менее подправьте, пожалуйста, ошибку. Вместо "java", необходимо написать "class"
Иван
Уровень 38
23 января 2022, 17:38
мда, ничего не понятно, но очень интересно
Andrej Kulishow
Уровень 28
Expert
14 декабря 2021, 22:24
Тот же вопрос, что и у Никиты. Насколько в это нужно погружаться и разбераться для джава-джуна?
Anonymous #2917458
Уровень 25
Expert
19 декабря 2021, 16:32
пример: мы можем вызубрить таблицу умножения. В итоге знаем ответ на любое выражение из таблицы. А можем понять принцип умножения и тогда все выражения сами сможем подсчитать, даже если забыли. А также умножать более сложные выражения. Не зная этих основ, ты сможешь писать код, но можешь не знать, как он выполняется. Для Java программиста важно понимать, как запускается код на его языке. Поможет запускать его не только через IDE, но и через терминал/консоль. Это как велосипедисту знать, как устроен велосипед, какой минимальный набор необходим для езды, что происходит, когда нажимаешь педаль.
Nikita Shamrai Backend Developer Expert
14 декабря 2021, 14:42
Насколько эти команды и действия используются в реальной практике?