> For the complete documentation index, see [llms.txt](https://letas-organization.gitbook.io/letaats-lessons-online/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://letas-organization.gitbook.io/letaats-lessons-online/kolledzh-top/razdel-1/glava-3.-kak-rabotaet-java-jvm-jdk-bait-kod-i-struktura-proekta.md).

# Глава 3. Как работает Java: JVM, JDK, байт-код и структура проекта

### 3.1. Почему недостаточно просто написать код

Когда вы пишете Java-код, компьютер не выполняет его сразу.

Например:

```java
System.out.println("Hello");
```

Для человека это понятная строка. Для процессора — нет.

Компьютеру нужно получить команды в формате, который он может выполнить. Поэтому Java-код проходит несколько этапов.

***

### 3.2. Общая схема работы Java

```
Исходный код (.java)
        ↓
Компилятор javac
        ↓
Байт-код (.class)
        ↓
JVM
        ↓
Выполнение программы
```

Эта схема — одна из самых важных для понимания Java.

***

### 3.3. Исходный код

Исходный код — это текст программы, который пишет программист.

Файл:

```
Main.java
```

Содержимое:

```java
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}
```

***

### 3.4. Компилятор javac

Компилятор `javac` проверяет код и переводит его в байт-код.

Если в коде есть ошибка, компиляция не пройдёт.

Пример ошибки:

```java
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello")
    }
}
```

Не хватает `;`.

Компилятор сообщит об ошибке.

Это не “Java сломалась”. Это программа написана неверно. Печально, но справедливо.

***

### 3.5. Байт-код

После успешной компиляции появляется файл:

```
Main.class
```

Он содержит байт-код.

Байт-код — промежуточный код, который понимает JVM.

Главная идея:

```
Java-код не превращается сразу в код конкретного процессора.
Он превращается в универсальный байт-код.
```

***

### 3.6. JVM

JVM — Java Virtual Machine.

Она выполняет байт-код.

Если на устройстве есть подходящая JVM, оно может запускать Java-программы.

Именно из-за JVM Java стала переносимой.

***

### 3.7. JDK

JDK — Java Development Kit.

Это набор инструментов для разработки Java-программ.

В JDK входят:

* компилятор `javac`;
* средства запуска Java-программ;
* стандартные библиотеки;
* инструменты разработчика.

Если вы хотите писать Java-код, нужен JDK.

***

### 3.8. JRE

JRE — Java Runtime Environment.

Это среда для запуска Java-программ.

Упрощённо:

```
JDK нужен разработчику.
JRE нужен для запуска.
```

На практике студентам обычно достаточно установить JDK, потому что он включает всё необходимое для разработки.

***

### 3.9. IDE

IDE — Integrated Development Environment, среда разработки.

IntelliJ IDEA — популярная IDE для Java.

IDE помогает:

* писать код;
* видеть ошибки;
* запускать программу;
* форматировать код;
* переходить между файлами;
* работать с проектом.

Но важно понимать:

```
IDE не заменяет язык Java.
IDE только помогает писать код.
```

Если студент не понимает код, IntelliJ IDEA не сделает его программистом. Максимум — вежливо подсветит красным, где всё пошло не так.

***

### 3.10. Структура Java-проекта

Простой проект может выглядеть так:

```
MyProject/
 └── src/
     └── Main.java
```

Файл `Main.java`:

```java
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}
```

В больших проектах файлов больше:

```
src/
 ├── Main.java
 ├── Student.java
 ├── StudentService.java
 └── Product.java
```

Каждый класс обычно хранится в отдельном файле.

***

### 3.11. public class и имя файла

Если класс объявлен как `public`, имя файла должно совпадать с именем класса.

Правильно:

```
Main.java
```

```java
public class Main {
}
```

Неправильно:

```
Program.java
```

```java
public class Main {
}
```

***

### 3.12. Метод main

```java
public static void main(String[] args)
```

Это точка входа в программу.

Разберём:

#### public

Метод доступен JVM.

#### static

Метод можно вызвать без создания объекта класса.

#### void

Метод ничего не возвращает.

#### main

Имя метода, которое JVM ищет при запуске.

#### String\[] args

Аргументы командной строки.

На начальном уровне достаточно знать:

```
main — место, с которого начинается выполнение программы.
```

***

### 3.13. Комментарии

Комментарии помогают объяснять код.

Однострочный комментарий:

```java
// Это комментарий
```

Многострочный комментарий:

```java
/*
Это многострочный комментарий.
Он может занимать несколько строк.
*/
```

Комментарии не выполняются программой.

Хороший комментарий объясняет не очевидное.

Плохой комментарий:

```java
int age = 18; // создаём переменную age со значением 18
```

Это и так видно.

Лучше:

```java
int age = 18; // минимальный возраст для доступа
```

***

### 3.14. Ошибки компиляции и ошибки выполнения

#### Ошибка компиляции

Возникает до запуска программы.

Пример:

```java
int x = "hello";
```

Java не может скомпилировать код, потому что типы несовместимы.

#### Ошибка выполнения

Возникает во время работы программы.

Пример:

```java
int x = 10 / 0;
```

Код может скомпилироваться, но программа упадёт при выполнении.

***

### 3.15. Связь Java и Android

Android-проект тоже содержит Java-классы.

Например:

```java
public class MainActivity extends AppCompatActivity {
}
```

`MainActivity` — это класс.

Он компилируется, участвует в сборке приложения и управляет экраном.

Android Studio тоже использует проектную структуру, компиляцию, классы, файлы и ошибки. Поэтому понимание обычной Java помогает при переходе к Android.

***

### 3.16. Что нужно запомнить из главы

Java-код хранится в `.java` файлах.

Компилятор переводит Java-код в байт-код.

JVM выполняет байт-код.

JDK нужен для разработки.

IDE помогает писать и запускать код, но не заменяет понимание.

Метод `main` — точка входа в консольную Java-программу.

***

### 3.17. Типичные ошибки новичков

#### Ошибка 1. Неправильное имя файла

Файл называется `Program.java`, а внутри:

```java
public class Main {
}
```

Нужно, чтобы имена совпадали.

#### Ошибка 2. Забыли точку с запятой

```java
System.out.println("Hello")
```

Нужно:

```java
System.out.println("Hello");
```

#### Ошибка 3. Писать код вне класса

В Java нельзя просто написать команду вне класса:

```java
System.out.println("Hello");
```

Нужно:

```java
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}
```

#### Ошибка 4. Думать, что IDE виновата

Если код не компилируется, чаще всего проблема не в IntelliJ IDEA, а в коде. Да, неприятно. Но хотя бы честно.

***

### 3.18. Как могут спросить на экзамене

#### Вопрос

Что такое JVM?

#### Хороший ответ

> JVM — это виртуальная машина Java, которая выполняет байт-код. Благодаря JVM Java-программы могут запускаться на разных платформах.

#### Вопрос

Что такое JDK?

#### Хороший ответ

> JDK — это набор инструментов для разработки Java-программ. Он включает компилятор, стандартные библиотеки и средства запуска.

#### Вопрос

Что такое байт-код?

#### Хороший ответ

> Байт-код — это промежуточный код, который получается после компиляции `.java` файла и выполняется JVM.

***

### 3.19. Практические задания

#### Задание 1

Создайте проект в IntelliJ IDEA и программу, которая выводит:

```
Моё первое Java-приложение
```

#### Задание 2

Специально уберите `;` в конце строки и посмотрите, какую ошибку покажет IDE.

#### Задание 3

Создайте класс `Student` в отдельном файле.

Поля пока можно не добавлять. Важно создать файл правильно.

#### Задание 4

Объясните своими словами разницу между JDK, JVM и IDE.

***

### 3.20. Вопросы для самопроверки

1. Что такое `.java` файл?
2. Что такое `.class` файл?
3. Что делает компилятор?
4. Что такое байт-код?
5. Что такое JVM?
6. Что такое JDK?
7. Чем JDK отличается от JRE?
8. Что такое IDE?
9. Почему имя файла должно совпадать с public class?
10. Что такое метод `main`?
