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