Avatar ·

В чем разница между JDK и JRE в Java? Объясните для новичка

Всем привет! Я только начал изучать Java и запутался в терминах. Когда я скачивал среду разработки, то увидел, что можно скачать JDK, а можно JRE. Я думал, что это одно и то же, но потом заметил, что у JDK есть компилятор javac, а у JRE — нет. Я написал простую программу "Hello, World!": ```java public class Hello { public static void main(String[] args) { System.out.println("Hello, World!"); } } ``` Когда я попытался скомпилировать её с помощью команды `javac Hello.java`, у меня вылезла ошибка "javac не является внутренней или внешней командой". Оказалось, что у меня установлена только JRE. Пришлось ставить JDK. Теперь у меня есть два вопроса: 1. Зачем вообще нужна JRE, если без JDK нельзя скомпилировать код? 2. Почему нельзя объединить их в один пакет? Объясните, пожалуйста, на пальцах, для чего каждый из этих компонентов. Буду благодарен за примеры и аналогии. <<>>

Краткая аналогия: JDK — это кухня, JRE — это столовая

Представьте, что вы шеф-повар. Чтобы приготовить блюдо (написать программу), вам нужна кухня с плитой, ножами и кастрюлями — это JDK (Java Development Kit). А чтобы просто съесть уже готовое блюдо, достаточно столовой с тарелками и вилками — это JRE (Java Runtime Environment).

Теперь технически

JRE — это среда для выполнения Java-программ. Она содержит:

  • JVM (Java Virtual Machine) — виртуальная машина, которая запускает байт-код.
  • Библиотеки классов (например, java.lang, java.util).
  • Загрузчик классов и другие вспомогательные компоненты.

Если вы только пользуетесь готовыми Java-программами (например, играми или корпоративным софтом), вам нужна только JRE. Она не умеет компилировать — только запускать.

JDK — это надмножество JRE. В него входит всё, что есть в JRE, плюс инструменты разработчика:

  • Компилятор javac — превращает .java в .class (байт-код).
  • Утилиты — javadoc (генерация документации), jar (сборка архивов), jdb (отладчик).
  • Заголовочные файлы для JNI (если нужно писать нативный код).

Пример, который показывает разницу

Допустим, вы написали программу, которая складывает два числа:

// Calculator.java
public class Calculator {
    public static void main(String[] args) {
        int sum = 2 + 3;
        System.out.println("Sum = " + sum);
    }
}

Шаг 1. Компиляция (требуется JDK):

javac Calculator.java

После этого появляется файл Calculator.class.

Шаг 2. Запуск (требуется JRE, но JDK тоже подойдёт):

java Calculator

Если у вас только JRE, команда javac не сработает, но java будет работать. Если у вас JDK — работают обе команды.

Почему их не объединяют?

  • Размер: JDK весит ~300-500 МБ, JRE — ~100 МБ. Конечным пользователям незачем таскать лишние гигабайты инструментов.
  • Безопасность: Компилятор и отладчик — это мощные инструменты. На серверах или в корпоративных средах их часто не устанавливают, чтобы никто случайно не скомпилировал вредоносный код.
  • Разделение ролей: Разработчики — JDK, пользователи — JRE. Это логично.

Важное примечание

Начиная с Java 11, Oracle и OpenJDK перестали выпускать отдельную JRE. Теперь JDK включает в себя модуль jlink, который позволяет собрать минимальную среду выполнения для конкретного приложения. Но концептуально разница остаётся той же.

Итог: Если вы пишете код — ставьте JDK. Если только запускаете чужие программы — достаточно JRE (или используйте готовый JDK, это не ошибка).

<<>>

Дополнение: как проверить, что у вас установлено

В командной строке (Windows) или терминале (Linux/macOS) выполните:

java -version
javac -version
  • Если обе команды работают — у вас JDK.
  • Если java -version работает, а javac нет — у вас только JRE.
  • Если ни одна не работает — Java не установлена.

Ещё один способ понять разницу

JDK — это как набор инструментов плотника: молоток, пила, рубанок. JRE — это как готовый стул: вы можете на нём сидеть, но не можете сделать новый. Если вы хотите делать стулья — вам нужны инструменты (JDK). Если только сидеть — достаточно стула (JRE).

Когда вам может пригодиться только JRE

  1. Вы запускаете Java-приложения, скачанные из интернета (например, Minecraft).
  2. Вы работаете на сервере, где уже есть скомпилированные .jar файлы.
  3. Вы используете IDE (например, IntelliJ IDEA) — она сама скачает JDK, если нужно.

Но для обучения и разработки всегда ставьте JDK — это универсальное решение.