ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Разница между командами 'java' и 'javac': компиляция Java

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Команда java не компилирует исходные файлы на Java. Для преобразования файлов .java в байт-код, который находится в файлах .class, используйте команду javac. Затем уже готовый байт-код запускается с помощью команды java.

Используйте для компиляции следующим образом:

Bash
Скопировать код
javac MyClass.java

И для запуска так:

Bash
Скопировать код
java MyClass

Не забывайте: javac — это ваш ассистент в компилировании, а java — это инструмент для запуска исполняемого кода.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Усовершенствование запуска с Java 11

С появлением Java 11 появилась возможность непосредственного запуска исходных файлов Java, что позволяет обойти этап компиляции с использованием javac. Данная инновация представлена в JEP 330, и она направлена на облегчение процесса обучения и разработки несложных программ. Однако стоит иметь в виду, что при этом файлы .class не создаются, а значит, для распространения исполняемого кода потребуется воспользоваться javac.

Визуализация

Процесс работы с Java состоит из нескольких этапов:

Markdown
Скопировать код
Шаг 1: Кодирование 📝 ➡️ Сохранение в файл `.java`
Markdown
Скопировать код
Шаг 2: Компиляция 🛠️ (с помощью javac) ➡️ Получение файла `.class` с байт-кодом
Markdown
Скопировать код
Шаг 3: Запуск программы 🏃‍♂️ (при помощи java) ➡️ Исполнение интерпретированного байт-кода из файла `.class`

Справедливо будет утверждать, что команда java — это не завод по производству кода, а скорее двигатель машины, которых ставит в действие готовую конструкцию.

JEP 330: Упрощение запуска однофайловых приложений

Благодаря JEP 330 программисты теперь могут сразу запускать однофайловые приложения, минуя этап компиляции. Однако, это возможно только в случае, если имя файла совпадает с именем публичного класса. Таким образом, команда java способна напрямую интерпретировать и выполнить исходный код, что обеспечивает гладкую интеграцию с привычными процедурами и значительное облегчение начального обучения.

Выполнение вашего кода на Java: Взгляд изнутри

Когда рассматривается процесс исполнения кода Java, важно различать интерпретацию байт-кода и JIT-компиляцию (Just-In-Time). Современные среды Java используют JIT для преобразования кода в оптимизированные машинные инструкции, учитывая особенности окружения выполнения.

Байт-код: Ключ к универсальности

Байт-код, записанный в файлах .class, созданных средствами javac, можно сравнить с машинным кодом, но предназначенным для Java-машин (JVM). Именно этот код работает независимо от платформы, в результате чего возникает уверенность в его исполнении на любом оборудовании, поддерживающем JVM.

JIT-компиляция: Улучшение производительности

Во время работы команды java происходит JIT-компиляция: часто используемые участки кода переводятся в машинный язык. Такое динамическое преобразование ускоряет работу Java-приложений при каждом последующем запуске.

Реальная оптимизация: Умная JVM

Java-среды способны выбирать между интерпретацией и JIT-компиляцией кода в зависимости от его важности для производительности. Такой баланс — это часть стратегии оптимизации, которая постоянно в поиске наилучшего сочетания между скоростью исполнения и затратами ресурсов.

Запуск без предварительной компиляции

Начиная с версии Java 11, стало возможным запускать приложения с помощью java ClassName, минуя этап компиляции javac. Это дает возможность исполнять либо ранее скомпилированные .class файлы, либо интерпретировать исходный код однофайлового приложения, если соблюдены правила именования.

Полезные материалы

  1. Обучающие материалы по Java™
  2. Описание команды java
  3. Описание команды javac
  4. Документация по javac
  5. Как устроен процесс сборки в Java?