Java for Beginner
743 subscribers
709 photos
201 videos
12 files
1.15K links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
3.4. Объявление типов
Описание:
Определяют пользовательские типы и их связи.

Примеры:
class Объявляет класс.
interface Объявляет интерфейс.
extends, implements Указывают наследование и реализацию.


Пример:
public class MyClass implements MyInterface {
// Код
}


3.5. Управление исключениями

Описание:
Обеспечивают обработку ошибок.

Примеры:
try, catch, finally Обрабатывают исключения.
throw, throws Генерируют или объявляют исключения.


Пример:
try {
throw new Exception("Ошибка");
} catch (Exception e) {
// Обработка
}


3.6. Пакеты и модули
Описание:
Управляют структурой и модульностью кода.

Примеры:
package, import Определяют и импортируют пакеты.
module, exports (с
Java 9) Управляют модульной системой.

Пример:
package com.example;
import java.util.List;


3.7. Типы данных и примитивы
Описание:
Определяют типы переменных и возвращаемых значений.

Примеры:
int, double, boolean Примитивные типы.
void Указывает отсутствие возвращаемого значения.


Пример:
int x = 10;
void doNothing() {}


3.8. Прочее
Описание:
Специальные операции и управление объектами.

Примеры:

new Создает объект.
this Ссылается на текущий объект.
instanceof Проверяет тип объекта.


Пример:
Object obj = new String("Hello");
if (obj instanceof String) {
// Проверка типа
}



4. Ключевые слова и работа под капотом

4.1. Обработка компилятором
Синтаксический анализ: Компилятор распознает ключевые слова как токены во время парсинга исходного кода. Каждое ключевое слово соответствует определенной конструкции в байт-коде.
Проверка корректности: Компилятор проверяет правильность использования ключевых слов (например, private не может применяться к локальным переменным).
Байт-код: Ключевые слова преобразуются в инструкции байт-кода.


Например:
new преобразуется в инструкцию new для создания объекта.
if преобразуется в условные переходы (if_icmp).


Пример:
if (x > 0) {
return x;
}


Байт-код (упрощенно):
iload x
ifgt label
ireturn
label: ireturn


4.2. Память и ключевые слова
Metaspace: Метаданные классов, включая информацию о модификаторах (public, static, final), хранятся в Metaspace. Ключевые слова сами по себе не занимают память в куче или стеке.
Объекты в куче: Ключевые слова, такие как new, создают объекты в куче. Например, new String("Hello") выделяет память для объекта String.
Локальные переменные: Ключевые слова, такие как int или boolean, определяют типы локальных переменных, которые хранятся в стеке вызовов.


Пример:
public class Example {
private int value = 10; // value хранится в куче
public void method() {
int local = 20; // local хранится в стеке
}
}


4.3. Оптимизация в JVM
JIT-компиляция: JIT-компилятор оптимизирует инструкции, связанные с ключевыми словами, встраивая их в машинный код. Например, if может быть оптимизирован в прямой переход.
Кэширование проверок: Проверки доступа (public, private) кэшируются JIT-компилятором, минимизируя накладные расходы.
Ключевые слова и производительность: Ключевые слова, такие как final или static, могут улучшать производительность, позволяя JVM выполнять оптимизации (например, инлайн-функции или статическое связывание).


4.4. Ошибки в памяти
Утечки памяти: Неправильное использование ключевых слов, таких как new, может привести к созданию объектов, которые не собираются сборщиком мусора.
Переполнение стека: Глубокая рекурсия с использованием return или циклов (for, while) может вызвать StackOverflowError.
Некорректное использование volatile: Неправильное применение volatile может нарушить видимость изменений в многопоточных приложениях.


Пример утечки памяти:
List<Object> list = new ArrayList<>();
while (true) {
list.add(new Object()); // Создает объекты без освобождения
}


4.5. Рефлексия и ключевые слова
Ключевые слова, такие как public, private и final, доступны через API рефлексии (например, Field.getModifiers). Это позволяет фреймворкам, таким как Spring, анализировать структуру классов.
Неправильное использование модификаторов через рефлексию (например, setAccessible(true)) может нарушить инкапсуляцию.


#Java #для_новичков #beginner #java_syntax #keywords
👍3