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

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

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Что такое ForkJoinPool в Java? 🤓

Ответ:

ForkJoinPool — реализация ExecutorService для задач, которые можно разделить на подзадачи (разделяй и властвуй). Используется в Stream API для параллельных потоков.

Пример:
ForkJoinPool pool = ForkJoinPool.commonPool();
pool.submit(() -> System.out.println("Task in ForkJoinPool"));

Подходит для рекурсивных задач, таких как сортировка или обработка больших коллекций..

#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
📌 Факт дня:

А вы знали, что первый компьютерный "системный администратор" появился в 1960-х?

В 1960-х годах операторы мейнфреймов, таких как IBM System/360, начали называться системными администраторами. Они следили за работой компьютеров, что стало основой современной профессии сисадмина.

#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Подробная инструкция по установке Maven на Windows


Зачем устанавливать Maven

Установка Maven на систему необходима по следующим причинам:
Автоматизация сборки: Maven предоставляет стандартизированный жизненный цикл для компиляции, тестирования, упаковки и развертывания проектов.
Управление зависимостями: Maven автоматически загружает библиотеки из репозиториев (например, Maven Central), упрощая управление зависимостями.
CI/CD-интеграция: CI/CD-системы (Jenkins, GitLab CI, GitHub Actions) требуют системной установки Maven для выполнения сборок.
Независимость от IDE: Системный Maven позволяет запускать команды (mvn clean install) из терминала, что полезно для серверов или скриптов.
Контроль версий: Системная установка позволяет использовать конкретную версию Maven, обеспечивая воспроизводимость сборок.
Кастомизация: Системный Maven дает полный контроль над настройками через settings.xml и поддерживает расширения.


В памяти Maven работает как Java-приложение, загружая модель POM, зависимости и плагины в оперативную память. Установка на систему минимизирует зависимость от IDE, но требует управления версиями и конфигурацией.


Установка Maven на Windows

Требования
JDK: Установленный Java Development Kit (версия 8 или выше, рекомендуется OpenJDK или Oracle JDK).
Интернет: Для загрузки Maven и зависимостей.
Права администратора: Для настройки переменных окружения (опционально).


Шаги установки

Проверка JDK:

Убедитесь, что JDK установлен:
java -version

Вывод должен показать версию Java (например, openjdk 11.0.16). Если JDK отсутствует, скачайте и установите с Adoptium или Oracle.


Скачивание Maven:
Перейдите на официальный сайт Apache Maven.
Скачайте бинарный архив, например,
apache-maven-3.9.9-bin.zip.
Распакуйте архив в удобную директорию, например, C:\Program Files\Apache\maven-3.9.9.


Настройка переменных окружения:
Откройте "Свойства системы".
Нажмите Win + R, введите sysdm.cpl и нажмите Enter.
Перейдите на вкладку "Дополнительно" → "Переменные среды".


Создайте переменную M2_HOME:
В разделе "Системные переменные" нажмите "Создать".
Имя: M2_HOME, Значение: C:\Program Files\Apache\maven-3.9.9.


Добавьте Maven в PATH:
Найдите переменную Path в "Системных переменных" и добавьте %M2_HOME%\bin.

Проверьте переменную JAVA_HOME:
Убедитесь, что JAVA_HOME указывает на директорию JDK, например, C:\Program Files\Java\jdk-11.0.16.
Если отсутствует, создайте: Имя: JAVA_HOME, Значение: C:\Program Files\Java\jdk-11.0.16.

Проверка установки:
Откройте командную строку (Win + R → cmd).

Выполните:
mvn -version


Вывод должен показать версию Maven, Java и другие детали:
Apache Maven 3.8.6
Maven home: C:\Program Files\Apache\maven-3.8.6
Java version: 11.0.16, vendor: Adoptium



Настройка локального репозитория:
По умолчанию Maven использует ~/.m2/repository (например, C:\Users\<username>\.m2\repository) для кэширования зависимостей.

Опционально настройте settings.xml в C:\Users\<username>\.m2 для указания зеркал, прокси или профилей:
<settings>
<localRepository>C:/custom/m2/repository</localRepository>
</settings>

В памяти: При запуске Maven загружает mvn.bat (или mvn.cmd), который вызывает Java-процесс. JVM загружает Maven Core, плагины и зависимости в оперативную память. Локальный репозиторий минимизирует сетевые запросы, но может занимать значительное место на диске.


Нюансы:
Убедитесь, что JAVA_HOME указывает на JDK, а не JRE, иначе Maven не сможет компилировать код.
Если mvn не распознается, проверьте правильность PATH.
Используйте Maven Wrapper (mvnw) в проектах для независимости от системной версии.


#Java #middle #Maven #Maven_install
👍6
Что выведет код?

public class Task150725 {
public static void main(String[] args) {
new Child150725();
}
}

class Parent150725 {
Parent150725() {
System.out.println("Parent: " + getClass().getSimpleName());
}
}

class Child150725 extends Parent150725 {
Child150725() {
System.out.println("Child: " + getClass().getSimpleName());
}
}


#Tasks
👍2
Что такое Path и Files в Java? 🤓

Ответ:

Path и Files (пакет java.nio.file, Java 7+) упрощают работу с файлами и директориями. Path представляет путь к файлу, а Files предоставляет утилитные методы.

Пример:
Path path = Paths.get("file.txt");
Files.write(path, "Hello".getBytes());
String content = Files.readString(path); // Hello

Более современная и удобная альтернатива File.


#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
📌 Факт дня:

А вы знали, что термин "бэкслэш" был придуман для клавиатур в 1961 году?

Символ "/" (бэкслэш) был введён Бобом Бемером для языка ALGOL и клавиатур IBM. Он стал ключевым для путей в файловых системах, таких как Windows (например, C:).

#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
📌 Цитата дня: Владимир Арлазаров

"Шахматы на компьютере — это проверка интеллекта машины."


Владимир Арлазаров, создатель шахматной программы "Каисса", сказал это в 1974 году на чемпионате по компьютерным шахматам.


Биография

#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🗿1
Ключевые слова и зарезервированные слова в 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
Что выведет код?

class Parent160725 {
void print() {
System.out.println("Parent160725");
}
}

class Child160725 extends Parent160725 {
void print() {
System.out.println("Child160725");
}
}

public class Task160725 {
public static void main(String[] args) {
Parent160725 obj = new Child160725();
obj.print();
}
}


#Tasks
👍2
Продолжаем выбирать темы для разбора и голосовать за рассмотрение предложенных! 🤓

Голосуем за тему к рассмотрению в эти выходные!

Предлагаем новую тему!
(можете предложить что-то из того, что предлагали на прошлой и позапрошлых неделях и что проиграло в голосовании!)

Не стесняемся! ✌️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Что такое рефлексия в Java? 🤓

Ответ:

Рефлексия позволяет анализировать и изменять структуру классов (поля, методы, конструкторы) во время выполнения. Используется в библиотеках, таких как Spring.

Пример:
Class<?> clazz = String.class;
Method method = clazz.getMethod("length");
System.out.println(method.invoke("test")); // 4

Рефлексия замедляет выполнение и требует осторожности из-за возможных ошибок доступа.


#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
📌 Факт дня:

А вы знали, что первый "цифровой альбом" был продан в 1979 году?

В 1979 году компания Warner Bros. Records выпустила альбом Рая Кудера "Bop Till You Drop", который был записан в цифровом формате и стал первым цифровым релизом популярной музыки в США. Это был первый случай продажи музыки в полностью цифровом виде.

#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
📌 Цитата дня: Евгений Велтистов

"Машины должны быть не только умными, но и добрыми."


Евгений Велтистов, автор "Электроника", сказал это в 1964 году в интервью о будущем робототехники.


Биография

#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Установка Maven на Linux

Требования
JDK: Установленный JDK (версия 8 или выше).
Интернет: Для загрузки Maven.
Терминал: Доступ к командной строке.



Шаги установки

Проверка JDK:
Выполните:
java -version


Вывод должен показать версию Java. Если JDK отсутствует, установите, например, OpenJDK:
sudo apt update
sudo apt install openjdk-11-jdk # Ubuntu/Debian
sudo dnf install java-11-openjdk-devel # Fedora


Скачивание Maven:
Перейдите на сайт Apache Maven.

Скачайте архив, например, apache-maven-3.9.9-bin.tar.gz:
wget https://downloads.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz


Распакуйте в /opt:
sudo tar -xzvf apache-maven-3.9.9-bin.tar.gz -C /opt


Настройка переменных окружения:
Откройте файл /etc/environment или ~/.bashrc:
nano ~/.bashrc


Добавьте строки:
export M2_HOME=/opt/apache-maven-3.9.9
export PATH=$M2_HOME/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # Путь к JDK


Примените изменения:
source ~/.bashrc


Проверка установки:
Выполните:
mvn -version


Вывод:

Apache Maven 3.9.9
Maven home: /opt/apache-maven-3.9.9
Java version: 11.0.16, vendor: Ubuntu


Настройка локального репозитория:
По умолчанию используется ~/.m2/repository.

Опционально настройте ~/.m2/settings.xml для кастомного пути или зеркал:
<settings>
<localRepository>/custom/m2/repository</localRepository>
</settings>

В памяти: На Linux Maven запускается через скрипт mvn, который вызывает JVM. Процесс аналогичен Windows: Maven Core, плагины и зависимости загружаются в память. Локальный репозиторий кэширует артефакты, снижая сетевую нагрузку.


Нюансы:
Убедитесь, что JAVA_HOME указывает на правильный JDK.
Для системного доступа установите Maven в /opt и настройте права: sudo chown -R
$USER /opt/apache-maven-3.9.9.
Используйте mvnw для согласованности версий в проектах.


#Java #middle #Maven #Maven_install
👍3
Что выведет код?

public class Task170725 {
static void process(int x) {
System.out.println("int");
}

static void process(Integer x) {
System.out.println("Integer");
}

static void process(Object x) {
System.out.println("Object");
}

public static void main(String[] args) {
process(10);
process(Integer.valueOf(10));
process(null);
}
}


#Tasks
👍3