Java for Beginner
742 subscribers
714 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
Варианты ответа:
Anonymous Quiz
42%
true true
25%
false false
13%
true false
21%
false true
👍2
Вопрос с собеседований

Чем отличается checked от unchecked исключений?🤓

Ответ:

Checked
исключения наследуются от Exception и требуют обязательной обработки (try-catch или throws).

Unchecked исключения наследуются от RuntimeException и не требуют обработки.

Checked применяют для предсказуемых ошибок (например, IO), unchecked — для ошибок программиста.


#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🗓 История IT-технологий сегодня — 03 октября


ℹ️ Кто родился в этот день

Не нашел, знаете - пишите)


🌐 Знаковые события

1942 — первый успешный запуск ракеты «Фау-2».


#Biography #Birth_Date #Events #03Октября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Раздел 6. Коллекции в Java

Глава 1. Введение в коллекции

(Практика):
Начать проект «Библиотека».
Создать класс Book с полями title, author, year.
Сделать список книг (пока как массив) и вывести их на экран


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

Запустите IntelliJ IDEA:
Если IDE не открыта, запустите её. Убедитесь, что у вас установлен JDK. Если проект новый, выберите "New Project" на приветственном экране.

Создайте новый проект:
В окне создания проекта выберите "Java" как тип.
Укажите имя проекта, например, "LibraryProject".
Выберите JDK в поле Project SDK (если не настроено, добавьте путь к JDK).
Оставьте остальные настройки по умолчанию (без Maven или Gradle для простоты) и нажмите "Create".
IDE создаст структуру проекта с папкой src для исходного кода.

Настройте структуру проекта:
В дереве проекта (слева) найдите src.
Если нужно, создайте пакет для организации кода: Правой кнопкой на src → New → Package → Назовите "library" (или другое имя). Это хорошая практика для группировки классов.

Создание класса Book
Теперь создадим основной класс для представления книги. Это будет простой класс с полями, который позже расширим.

Создайте класс Book:
В пакете (или прямо в src, если без пакета) щелкните правой кнопкой → New → Java Class.
Назовите класс "Book".
IDE создаст файл
Book.java с базовой структурой

public class Book {}


Добавьте поля:
В теле класса объявите три приватных поля:
title типа String (для названия книги).
author типа String (для автора).
year типа int (для года издания).


Используйте модификатор private для инкапсуляции, как мы изучали в ООП.


Добавьте конструктор:
Создайте публичный конструктор, который принимает три параметра (String title, String author, int year) и присваивает их соответствующим полям с помощью this.
Это позволит создавать объекты Book с начальными значениями.

Добавьте метод для вывода:
Создайте публичный метод, например, printDetails(), который выводит информацию о книге на экран с помощью System.out.println.
В нём используйте поля для формирования строки вроде "Название: [title], Автор: [author], Год: [year]".



Создание списка книг с использованием массива


Пока мы используем массив как простую структуру для хранения списка книг — это поможет сравнить с коллекциями позже.

Создайте класс Main:
Аналогично создайте новый класс "Main" в том же пакете.
Добавьте статический метод main(String[] args) — точку входа.


Объявите массив:
В методе main объявите массив объектов Book фиксированного размера, например, Book[] books = new Book[3]; (размер выберите небольшой для теста).

Инициализируйте массив:
Создайте несколько объектов Book с помощью new Book(title, author, year) и присвойте их элементам массива (books[0] = new Book(...); и т.д.).
Используйте разные значения для демонстрации (например, книги разных авторов и годов).


Выведите список на экран:
Используйте цикл for (или for-each: for (Book book : books)) для перебора массива.
В цикле вызовите метод printDetails() для каждого элемента, чтобы вывести информацию о книгах.


#Java #для_новичков #beginner #Collections #Практика
👍2🔥1
Тестирование и отладка проекта

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

Запустите проект:
Правой кнопкой на файле Main.java → Run 'Main.main()'.
В консоли IDE вы должны увидеть вывод списка книг с их деталями.


Отладка:
Если ошибки: Проверьте синтаксис (точки с запятой, скобки).
Используйте отладчик: Установите breakpoint (красная точка слева от строки в main), запустите в debug-режиме (Shift+F9) и шагайте по коду (F8).
Общие проблемы: NullPointerException (если массив не инициализирован), IndexOutOfBoundsException (если выход за пределы массива).


Проверьте вывод:
Убедитесь, что книги выводятся в порядке добавления в массив.
Попробуйте изменить размер массива или добавить больше книг — увидите, как фиксированный размер ограничивает (это мотивирует к коллекциям позже).



Полезные советы для новичков

Организация кода: Используйте пакеты для группировки (например, library.models для Book).
Инкапсуляция: Даже в простом проекте делайте поля private и добавьте геттеры/сеттеры, если нужно изменять.
Массивы vs коллекции: Заметьте ограничения массива (фиксированный размер, ручное управление) — в следующих уроках заменим на ArrayList.
Комментарии: Добавляйте // комментарии к шагам, чтобы код был читаемым.
Версионирование: Если используете Git, создайте репозиторий и закоммитьте начальную версию проекта.
Ресурсы: Документация Oracle по классам и массивам для напоминания синтаксиса.



Практическое задание

Задача 1: Расширьте класс Book, добавив приватное поле isbn (String) и обновите конструктор и метод printDetails() для его включения.
Задача 2: Увеличьте массив до 5 элементов, добавьте больше книг и убедитесь, что вывод работает.
Задача 3: Попробуйте вывести только книги после определенного года — используйте if в цикле перебора массива.

Реализуйте эти задачи самостоятельно, следуя шагам урока. Это поможет закрепить основы перед переходом к коллекциям.


#Java #для_новичков #beginner #Collections #Практика
👍3🔥1
Что выведет код?

import java.util.LinkedList;
import java.util.List;

public class Task031025 {
public static void main(String[] args) {
List<String> list = new LinkedList<>();
list.add("A");
list.add("B");
list.add(1, "C");
list.remove(0);
list.remove(1);
System.out.println(list);
}
}


#Tasks
🔥1
Варианты ответа:
Anonymous Quiz
0%
[A]
20%
[B]
20%
[C]
60%
IndexOutOfBoundsException
Продолжаем выбирать темы для разбора и голосовать за рассмотрение предложенных! 🤓

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

Выбираем новую тему!

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

Не стесняемся! ✌️
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопрос с собеседований

Что такое finally-блок?🤓

Ответ:

Блок finally
в блоке try-catch выполняется всегда — независимо от того, произошло исключение или нет.

Обычно он используется для освобождения ресурсов: закрытия потоков, соединений.

Даже при return в try или catch блок finally будет вызван (кроме System.exit()).


#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
🗓 История IT-технологий сегодня — 04 октября


ℹ️ Кто родился в этот день

Вита́лий Ла́заревич Ги́нзбург (21 сентября (4 октября) 1916, Москва — 8 ноября 2009, там же)советский и российский физик-теоретик, доктор физико-математических наук (1942), профессор. Академик АН СССР (1966; член-корреспондент 1953). Лауреат Ленинской премии (1966), Сталинской премии первой степени (1953) и Нобелевской премии по физике (2003).

Джон Винсент Атанасов OCM (4 октября 1903 г. — 15 июня 1995 г.) — американский физик, создатель одного из первых электронных цифровых компьютеров (Atanasoff-Berry Computer, ABC), который применил двоичную арифметику и регенеративную память.


🌐 Знаковые события

1957 — в СССР произведён запуск первого искусственного спутника Земли.

1959 — запущен космический аппарат «Луна-3», впервые сфотографировавший обратную сторону Луны.


#Biography #Birth_Date #Events #04Октября
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Аспектно-ориентированное программирование в Java (AOP)

АОП — это подход к программированию, который позволяет отделить "сквозные" concerns (это слово значит "заботы" или "аспекты" — повторяющийся код, не связанный с основной логикой, например, логирование или проверка прав доступа) от основной бизнес-логики. В обычном объектно-ориентированном программировании такой код разбросан по всему приложению, что делает его сложным в поддержке. АОП позволяет "вплести" этот код в нужные места автоматически, без изменения основного кода.

Почему АОП полезно?

Представь, что в твоём приложении нужно логировать каждый вызов метода сервиса: записывать, кто вызвал, когда и с какими параметрами. Без АОП ты добавишь строки логирования в каждый метод — это загрязнит код и нарушит принцип "единственной ответственности". С АОП ты создаёшь отдельный "аспект" (модуль для сквозной логики), который автоматически применяется к нужным методам.

Плюсы:
Чистый код: Основная логика не смешивается с вспомогательной.
Легко изменять: Измени аспект — и всё приложение обновится.
Переиспользование: Один аспект для множества мест.
Примеры использования: Логирование, транзакции (атомарные операции с базой данных), кэширование, обработка ошибок, безопасность.


В Java АОП реализуется через библиотеки вроде AspectJ (полноценный язык АОП) или Spring AOP (упрощённая версия, интегрированная в Spring). Spring AOP проще для новичков, использует прокси (заместители объектов) и подходит для большинства задач. Если нужно что-то сложное, как аспекты на уровне полей, переходи к AspectJ, который Spring тоже поддерживает.


Настройка проекта в Spring

Давай создадим простой проект. Предполагаем, у тебя Spring Boot (фреймворк для быстрой разработки). Используй Spring Initializr для генерации.


Добавь зависимости в pom.xml (файл конфигурации сборки Maven):
xml<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies>
spring-boot-starter-aop включает всё необходимое для АОП.


Включи АОП в конфигурации. В основном классе приложения добавь аннотацию (метку):
javaimport org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@SpringBootApplication
@EnableAspectJAutoProxy // Включает автоматическое создание прокси для аспектов
public class AopApplication {
public static void main(String[] args) {
SpringApplication.run(AopApplication.class, args);
}
}
Это говорит Spring: "Используй АОП с прокси".



Основные понятия АОП

Аспект: Класс с логикой, которая применяется сквозно. Обозначается @Aspect.
Совет (Advice): Что именно делать — до, после или вокруг метода. Например,
@Before — перед вызовом.
Точка присоединения (Join Point): Место в коде, где аспект применяется, например, вызов метода.
Точка среза (Pointcut): Выражение, определяющее, где применять аспект, например, все методы в пакете сервисов.
Введение (Introduction): Добавление новых методов или интерфейсов (редко, но мощно).
Вплетение (Weaving): Процесс применения аспекта — в Spring это на этапе выполнения (runtime) через прокси.



#Java #middle #on_request #AOP
Пример: Аспект для логирования

Создадим сервис — класс с бизнес-логикой:
javaimport org.springframework.stereotype.Service;

@Service // Обозначает, что это сервис, Spring создаст экземпляр
public class MyService {
public String doSomething(String input) {
return "Результат: " + input.toUpperCase(); // Простая логика
}
}


Теперь аспект для логирования:

javaimport org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect // Это аспект
@Component // Spring зарегистрирует его
public class LoggingAspect {
@Before("execution(* com.example.service.*.*(..))") // Pointcut: все методы в пакете service
public void logBefore(JoinPoint joinPoint) { // JoinPoint — информация о точке
System.out.println("Вызов метода: " + joinPoint.getSignature().getName());
System.out.println("Аргументы: " + Arrays.toString(joinPoint.getArgs()));
}
}
Здесь @Before значит "выполни перед методом". execution — выражение для pointcut: * значит любой возврат, com.example.service..(..) — любой класс в пакете service, любой метод с любыми аргументами.

Если вызвать myService.doSomething("hello"), в консоли увидишь лог перед результатом.


Более сложный пример: Аспект вокруг метода

Для обработки ошибок или измерения времени используй @Around — он оборачивает метод.
javaimport org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class TimingAspect {
@Around("execution(* com.example.service.*.*(..))")
public Object measureTime(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object result = joinPoint.proceed(); // Выполняет оригинальный метод
long end = System.currentTimeMillis();
System.out.println("Время выполнения: " + (end - start) + " мс");
return result; // Возвращает результат метода
}
}
ProceedingJoinPoint позволяет контролировать вызов: можно пропустить метод, изменить аргументы или результат. Идеально для транзакций или кэша.


Продвинутые советы для опытных разработчиков

Производительность: Прокси в Spring добавляют overhead (небольшую задержку). Для критичных мест используй compile-time weaving из AspectJ.
Порядок аспектов: Если несколько аспектов на одном методе, используй
@Order(1) для приоритета (меньше число — выше приоритет).
Обработка исключений: В
@Around лови Throwable, логируй и перебрасывай, чтобы не глотать ошибки.
Тестирование: Используй
@EnableAspectJAutoProxy в тестах, моки (заменители) для аспектов с Mockito.
Интеграция с другими модулями: Spring Security или Spring Cache часто используют АОП внутри — изучи их исходники для идей.
Ограничения: Spring AOP работает только на методах бинов (объектов, управляемых Spring). Для статических методов или конструкторов нужен AspectJ.



#Java #middle #on_request #AOP
👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🗓 История IT-технологий сегодня — 05 октября


ℹ️ Кто родился в этот день

Ро́берт Ха́тчингс Го́ддард (англ. Robert Hutchings Goddard, 5 октября 1882 года — 10 августа 1945 года) — американский учёный, один из пионеров современной ракетной техники, создатель первого жидкостного ракетного двигателя.


🌐 Знаковые события

2021 — состоялся релиз OC Windows 11.


#Biography #Birth_Date #Events #05Октября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
А сколько вы жмете от груди?

Хотите парадокс? 😨

Чем больше у Вас свободного времени, тем больше интересных занятий которые пожирают все свободное время, которое вы хотели потратить на "полезные" дела.


И сегодня (как понятно наверно из заголовка) я хочу поговорить с Вами о спорте и поддержании нашего мешка с костями в надлежащем состоянии.

Раньше, когда у меня практически не было свободного времени, я мечтал, что как только оно появится - я начну постоянно заниматься (возможно даже в спортзале) и поддерживать себя в форме. 💪

Теперь когда я работаю на удаленке, заставить себя заниматься оказалось неожиданно сложной задачей.

Ведь хоть работа и удаленная - она все равно есть. А так же всегда есть очередное видео, по новой, неизученной технологии, которое уже долго ждет своего часа.

И по-любому надо делать выбор.



Что мы получаем от сидячей работы.

Тут наверно стоит предупредить молодых людей - вы не бессмертны.

Увы и ах
🤷‍♀️

Поэтому, чем раньше вы задумаетесь о том в каком состоянии будет ваш организм к 40-50 годам, тем лучше (любители энергетиков привет!).

Но и тем кто сейчас вкатывается в IT стоит знать - если вы меняете активный, физический труд, на сидячий образ жизни - изменения в организме не заставят себя ждать (дружно машем геморрою и варикозу, ожирению и остаткам зрения
😂).

И многие с пренебрежением относятся к этом, мол, "я вон худой как палка, какое ожирение, какой геморрой?"
В целом они правы, но уж точно поверьте - болячка от застоя организма найдется для каждого, если об этом не заботиться.



Что делать?

Двигаться.
Одно слово реально поможет вам не задумываться о негативных последствиях 12-часового, сидячего рабочего дня.

Как двигаться и куда - это зависит от индивидуального состояния организма.

Кто-то может 90 минут гонять по полю мяч, без особого напряжения, а кому-то 3-х километровая прогулка по парку кажется вызовом.

Поэтому по настоящему выбирать Вам.

Нужно помнить только одно - двигаться необходимо.


Цифры конечно отличаются, сколько в среднем, в зависимости от возраста и так далее. Я не собираюсь тут рассказывать КАК и СКОЛЬКО. Я просто хочу по дружески предупредить, а в остальном Вам поможет интернет, тренер или не дай бог, доктор.


Как себя заставить?

Тут вам пригодятся мои советы из предыдущих воскресных мотивационных статей по изучению Java.

Ведь это очень похоже.

Вы заставляете себя выйти из зоны комфорта, заставляете свое тело и мозг работать, чего они не хотят.

Самое главное - сделать первый шаг.


И в целом, эта статья - не попытка напугать. Я знаю множество людей которые столкнулись с проблемами при сидячем образе жизни. Добавить к этому вкусную и жирную пищу, алкоголь и сигареты - и вот кандидат к получению хронических заболеваний.

Ну и надеюсь, вы понимаете - ни одному бизнесу не нужен хронически больной работник, который регулярно ходит на больничные, не выполняет свою работу в полном объеме из-за регулярно плохого состояния и так далее.
И это относится не только к IT.


Поэтому - а сколько вы жмете от груди? 💪


Берегите себя. На этом извольте откланяться - ваш @Oleborn


😎 Пишите вашем мнение в комментарии.


#мои_мысли
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6