Java for Beginner
742 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
Пример:
/**
* Класс для управления данными пользователя.
* @author John Doe
* @version 1.0
*/
public class User {
/**
* Имя пользователя.
*/
private String name;

/**
* Возвращает имя пользователя.
* @return имя пользователя
*/
public String getName() {
return name;
}
}


Основные Javadoc-теги:
@param <имя> <описание>: Описывает параметр метода.
@return <описание>: Описывает возвращаемое значение.
@throws <тип_исключения> <описание>: Указывает исключения, которые может выбросить метод.
@author <имя>: Указывает автора кода.
@version <версия>: Указывает версию класса или метода.
@see <ссылка>: Ссылка на другой класс, метод или ресурс.


4. Правильное применение комментариев

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

Вот рекомендации по их применению:

4.1. Однострочные комментарии
Когда использовать:
Для кратких пояснений к переменным, строкам кода или логике.
Для временных заметок или TODO-комментариев.


Лучшие практики:
Пишите кратко и по делу (например, // Инициализация счетчика).
Избегайте очевидных комментариев (например, // Увеличиваем x на 1 для x++).
Размещайте комментарий на той же строке или над ней, если он поясняет конкретную строку.


Пример:
int retries = 3; // Максимальное количество попыток подключения


4.2. Многострочные комментарии
Когда использовать:
Для описания сложной логики или алгоритмов.
Для временного исключения кода при отладке.
Для добавления заметок о контексте или ограничениях.


Лучшие практики:
Используйте для пояснений, которые не помещаются в одну строку.
Избегайте чрезмерного комментирования кода, который можно удалить.
Форматируйте комментарии для читаемости (например, выравнивайте строки).


Пример:
/* Алгоритм сортировки пузырьком.
Сравнивает соседние элементы и меняет их местами,
если они находятся в неправильном порядке. */
for (int i = 0; i < array.length - 1; i++) {
for (int j = 0; j < array.length - i - 1; j++) {
// ...
}
}


4.3. Javadoc-комментарии
Когда использовать:
Для документирования публичных и защищенных классов, методов и полей.
Для создания документации API, которая будет использоваться другими разработчиками.


Лучшие практики:
Пишите Javadoc для всех публичных элементов API.
Используйте теги (
@param, @return) для описания параметров и возвращаемых значений.
Пишите краткие, но полные описания, избегая избыточной информации.
Обновляйте Javadoc при изменении кода.


Пример:
/**
* Проверяет, является ли число четным.
* @param number Число для проверки
* @return true, если число четное, иначе false
* @throws IllegalArgumentException если число отрицательное
*/
public boolean isEven(int number) {
if (number < 0) {
throw new IllegalArgumentException("Число не может быть отрицательным");
}
return number % 2 == 0;
}


4.4. Общие рекомендации
Самодокументирующийся код: Пишите код так, чтобы он был понятен без комментариев, используя описательные имена переменных и методов.
Избегайте избыточности: Не комментируйте очевидные вещи (например, // Присваиваем 5 для x = 5).
Обновляйте комментарии: Устаревшие комментарии могут ввести в заблуждение.
Используйте TODO и FIXME: Отмечайте незавершенные задачи или проблемы в коде (например, // TODO: Добавить обработку ошибок).



5. Назначение комментариев

Комментарии выполняют несколько ключевых функций:

5.1. Документация кода
Объясняют назначение классов, методов и сложных алгоритмов, делая код понятным для других разработчиков.

5.2. Улучшение читаемости
Поясняют логику, которая может быть неочевидной, особенно в сложных алгоритмах или низкоуровневых операциях.

5.3. Поддержка API
Javadoc-комментарии создают профессиональную документацию, которая используется в библиотеках и фреймворках.

5.4. Отладка и сопровождение
Позволяют временно исключать код или оставлять заметки для будущих изменений.

5.5. Командная работа
Унифицируют понимание кода в команде, особенно в больших или распределенных проектах.

#Java #для_новичков #beginner #java_syntax #commentaries
👍3
6. Комментарии и работа под капотом

6.1. Обработка компилятором
Игнорирование комментариев: Компилятор Java полностью игнорирует все комментарии (однострочные, многострочные и Javadoc) при создании байт-кода. Они не включаются в .class-файлы.
Javadoc-обработка: Javadoc-комментарии обрабатываются отдельным инструментом javadoc, который извлекает их из исходного кода и создает HTML-документацию. Эти комментарии также не попадают в байт-код.


Пример:
public class Example {
// Это не попадет в байт-код
/* Это тоже не попадет */
/**
* Это обрабатывается javadoc, но не включается в байт-код
*/
public void method() {}
}


6.2. Память и производительность
Отсутствие влияния на память: Поскольку комментарии не включаются в байт-код, они не занимают память в Metaspace, куче или стеке во время выполнения программы.
Размер исходного кода: Комментарии увеличивают размер исходных .
java-файлов, но это не влияет на скомпилированный код или производительность.
Javadoc и сборка: Генерация Javadoc-документации требует дополнительных ресурсов (памяти и процессорного времени) во время сборки проекта, но это происходит на этапе компиляции, а не выполнения.


6.3. Инструменты и Javadoc
Инструменты анализа: IDE (например, IntelliJ IDEA, Eclipse) используют Javadoc-комментарии для автодополнения, подсказок и генерации документации. Это улучшает разработку, но не влияет на выполнение.
Рефлексия: Комментарии не доступны через API рефлексии, так как они не включаются в байт-код. Однако Javadoc-теги могут быть использованы фреймворками (например, Spring) через предварительную обработку исходного кода.


6.4. Оптимизация и комментарии
Отсутствие накладных расходов: Поскольку комментарии не влияют на байт-код, они не создают дополнительных затрат на производительность во время выполнения.
Размер документации: Чрезмерное использование Javadoc-комментариев может увеличить размер сгенерированной документации, но это редко является проблемой.
Обфускация: Инструменты, такие как ProGuard, не затрагивают комментарии, так как они отсутствуют в байт-коде.

6.5. Ошибки, связанные с комментариями
Устаревшие комментарии: Неправильные или устаревшие комментарии могут ввести в заблуждение, особенно если код изменился, а комментарии — нет.
Ошибки в Javadoc: Неправильное использование тегов (например, @param для несуществующего параметра) может вызвать предупреждения при генерации документации.
Комментирование кода: Длительное оставление закомментированного кода может затруднить чтение и сопровождение. Лучше использовать системы контроля версий для хранения старого кода.

Пример устаревшего комментария:
// Умножает число на 2
int multiplyByThree(int x) {
return x * 3; // Комментарий не соответствует коду
}


7. Лучшие практики

Пишите самодокументирующийся код: Используйте описательные имена переменных и методов, чтобы минимизировать необходимость комментариев.
// Хорошо: имя метода понятно без комментария
public double calculateTotalPrice(List<Item> items) {
return items.stream().mapToDouble(Item::getPrice).sum();
}


Избегайте очевидных комментариев: Не пишите комментарии, которые дублируют очевидную логику.
// Плохо: избыточный комментарий
x = x + 1; // Увеличиваем x на 1


Обновляйте комментарии: Убедитесь, что комментарии соответствуют текущему состоянию кода.
Используйте Javadoc для публичного API: Документируйте все публичные классы, методы и поля с помощью Javadoc.
Форматируйте многострочные комментарии: Используйте выравнивание и перенос строк для улучшения читаемости.

/*
* Этот метод выполняет сложный расчет.
* Он учитывает несколько факторов:
* - Входные данные
* - Контекст выполнения
*/


Используйте TODO и FIXME: Отмечайте незавершенные задачи или проблемы.
// TODO: Добавить обработку ошибок
// FIXME: Исправить баг с отрицательными значениями


Ограничьте комментирование кода: Вместо длительного хранения закомментированного кода используйте системы контроля версий (например, Git).


#Java #для_новичков #beginner #java_syntax #commentaries
🔥4👍2
Ключевые слова и зарезервированные слова в Java

1. Что такое ключевые слова и зарезервированные слова в
Java?

Ключевые слова (keywords) в Java — это зарезервированные идентификаторы, которые имеют особое значение для компилятора и определяют синтаксические конструкции языка. Они используются для объявления классов, методов, переменных, управления потоком программы и других аспектов. Зарезервированные слова включают ключевые слова и несколько дополнительных идентификаторов, которые зарезервированы для будущего использования, но в настоящее время не имеют активной роли.

Зачем нужны ключевые слова?

Определение структуры программы
: Ключевые слова задают синтаксис для классов, методов, циклов, условий и других конструкций.
Управление поведением: Они определяют, как JVM интерпретирует и выполняет код (например, synchronized для многопоточной обработки).
Читаемость и стандартизация: Ключевые слова унифицируют синтаксис, делая код понятным для всех разработчиков.
Безопасность типов: Некоторые ключевые слова (например, instanceof) обеспечивают безопасную работу с типами данных.



2. Синтаксис ключевых слов
Ключевые слова в Java — это фиксированные строки, которые нельзя использовать в качестве идентификаторов (имен переменных, классов и т.д.). Они пишутся в нижнем регистре и имеют строгий синтаксис, зависящий от контекста их использования.

Общий синтаксис:
Ключевые слова используются в определенных позициях в коде, в зависимости от их назначения.

Например:
public class MyClass { // Ключевое слово public и class
void myMethod() { // Ключевое слово void
if (true) { // Ключевое слово if
return; // Ключевое слово return
}
}
}


Список ключевых слов
Java (на момент Java 21) имеет 50 ключевых слов и 3 зарезервированных слова.

Вот полный список, разделенный по категориям:

Модификаторы доступа
public, protected, private

Модификаторы класса, метода и поля
abstract, final, static, synchronized, native, strictfp, transient, volatile

Управление потоком
if, else, switch, case, default, break, continue, return, for, while, do

Объявление типов
class, interface, enum, record (с Java 14), extends, implements

Управление исключениями
try, catch, finally, throw, throws

Пакеты и модули
package, import, module (с Java 9), exports, opens, requires, uses, provides, to, with (связаны с модульной системой)

Типы данных и примитивы
boolean, byte, char, short, int, long, float, double, void

Прочее
new, this, super, instanceof, assert

Зарезервированные слова (не используются, но зарезервированы)
const и goto: Зарезервированы для совместимости с C/C++, но не используются в Java.
_ (подчеркивание): С
Java 9 зарезервировано и не может использоваться как идентификатор.


3. Типы ключевых слов и их особенности

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

Примеры:
public: Элемент доступен из любого места.
private Элемент доступен только внутри класса.
protected Элемент доступен в пакете и подклассах.



Пример:
public class Example {
private int value;
protected void method() {}
}


3.2. Модификаторы класса, метода и поля
Описание:
Определяют поведение или свойства элементов.

Примеры:
static Указывает, что элемент принадлежит классу, а не объекту.
final Запрещает изменение (переопределение или наследование).
abstract Указывает, что класс или метод не имеет реализации.


Пример:
public abstract class AbstractClass {
public static final int CONSTANT = 10;
abstract void doSomething();
}


3.3. Управление потоком
Описание:
Управляют выполнением программы (циклы, условия, прерывания).

Примеры:

if, else Условное выполнение.
for, while, do Циклы.
break, continue Прерывание или пропуск итераций.


Пример:
for (int i = 0; i < 5; i++) {
if (i == 3) break; // Прерывает цикл
}


#Java #для_новичков #beginner #java_syntax #keywords
👍4
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