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

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

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

public class Main {
public static void main(String[] args) {
int x = 10;
int y = 5;
x += y; // x = x + y
y -= 3; // y = y - 3
x *= 2; // x = x * 2
y /= 2; // y = y / 2
System.out.println("x = " + x + ", y = " + y);
}
}


#Tasks
Подписывайтесь на канал, мы работаем даже на выходных😏

https://t.me/Java_for_beginner_dev

#Mems
Перегрузка метода

Перегрузка методов (method overloading) – это возможность создания в классе нескольких методов с одинаковым именем, но с разными параметрами.
Рассмотрим пример класса Calculator, который будет выполнять сложение двух и трех чисел:
public class Calculator {
public int add(int a, int b) {
return a + b;
}

public int add(int a, int b, int c) {
return a + b + c;
}
public int calculate(int a, int b) {
return a + b;
}
}

В данном случае, у нас есть два метода add с одинаковым именем, но разными параметрами. Java определяет, какой метод вызвать на основе количества и типа переданных аргументов.
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println("Сумма двух чисел: " + calc.add(2, 3)); // Выводит 5
System.out.println("Сумма трех чисел: " + calc.add(2, 3, 4)); // Выводит 9
}
}

Варианты перегрузки

Можно выделить три варианта перегрузки.

По количеству параметров.
public class Calculator {
void calculate(int number1, int number2) { }
void calculate(int number1, int number2, int number3) { }
}


По типам параметров:

public class Calculator {
void calculate(int number1, int number2) { }
void calculate(double number1, double number2) { }
}


По порядку параметров:
public class Calculator {
void calculate(double number1, int number2) { }
void calculate(int number1, double number2) { }
}


Перегрузка — это часть полиморфизма, одной из ключевых составляющих объектно-ориентированного программирования. Главный плюс перегрузки в Java — можно использовать схожие методы с одинаковыми именами.

#Java #Training
This media is not supported in your browser
VIEW IN TELEGRAM
Уважаемые подписчики!

Сегодня в 16:00 по МСК, @MrAbhorrent проведет вторую часть урока по написанию игры крестики-нолики!

Присоединяйтесь!
От нас лайф-кодинг для новичков и печеньки, от Вас - адекватное общение!)))

Ждем Всех!

Общаться будем через Яндекс.Телемост, ссылку опубликуем в нашем чате! - https://t.me/Java_Beginner_chat
Please open Telegram to view this post
VIEW IN TELEGRAM
Пакеты и импорт

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

Создание пакетов
Для создания пакета используется ключевое слово package, которое должно быть первой строкой в файле Java, перед любыми импортами или определениями классов.

Пример создания пакета:
package com.example.myapp;


Структура пакетов
Пакеты организуются иерархически, как директории в файловой системе. Например, пакет com.example.myapp будет находиться в директории com/example/myapp.

Пример файловой структуры:
src
└── com
└── example
└── myapp
├── Main.java
└── Utils.java


Импорт пакетов
Для использования классов из других пакетов необходимо их импортировать. Импорт осуществляется с использованием ключевого слова import.

Пример импорта:
import com.example.myapp.Utils;


Можно импортировать все классы из пакета, используя *:
import com.example.myapp.*;


Полное имя класса

Классы можно использовать с полным именем (включая пакет), без необходимости импортировать их:
public class Main {
public static void main(String[] args) {
com.example.myapp.Utils.printHello();
}
}


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

Файл: com/example/myapp/Utils.java
package com.example.myapp;

public class Utils {
public static void printHello() {
System.out.println("Hello from Utils!");
}
}


Файл: com/example/myapp/Main.java
package com.example.myapp;

import com.example.myapp.Utils;

public class Main {
public static void main(String[] args) {
Utils.printHello();
}
}


Преимущества использования пакетов:

Организация кода: Пакеты помогают логически группировать связанные классы и интерфейсы.
Избежание конфликтов имен: Пакеты предотвращают конфликт имен, поскольку классы с одинаковыми именами могут существовать в разных пакетах.
Контроль доступа: Пакеты позволяют управлять доступом к классам и методам, используя модификаторы доступа (default и protected).
Упрощение навигации: Структурированные пакеты облегчают навигацию по проекту и поиск нужных классов.


#Java #Training
Подписывайтесь на канал, тут научат не говнокодить👍

https://t.me/Java_for_beginner_dev

#Mems
Что выведет код?
public class Main {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "World";
String str3 = str1 + ", " + str2 + "!";
str1 = str1.replace("H", "J");
str2 = str2.substring(1, 4);
str3 = str1 + ", " + str2 + "!";
System.out.println(str3);
}
}

#Tasks
Варианты ответа:
Anonymous Quiz
5%
Hello, World!
84%
Jello, orl!
5%
Hello, orl!
5%
Jello, Wor!
Основные принципы организации классов и пакетов

Логическая группировка: Классы, которые связаны по функциональности, должны быть сгруппированы в один пакет. Например, все классы, связанные с работой с базой данных, могут быть помещены в пакет com.example.database.

Иерархическая структура: Используйте иерархическую структуру пакетов для более сложных проектов. Это помогает разделить проект на подгруппы и упростить навигацию.

Пример иерархической структуры пакетов:
src
└── com
└── example
├── main
│ └── Main.java
├── utils
│ └── Utils.java
└── database
├── DatabaseHelper.java
└── DatabaseConfig.java


Именование пакетов: Имена пакетов должны быть в нижнем регистре и отражать их содержимое. Принято начинать имя пакета с доменного имени организации в обратном порядке, например, com.example.

Разделение по слоям приложения: Организуйте пакеты согласно архитектурным слоям приложения, например, controller, service, repository, model.

Пример организации по слоям:
src
└── com
└── example
├── controller
│ └── UserController.java
├── service
│ └── UserService.java
├── repository
│ └── UserRepository.java
└── model
└── User.java


Использование подкаталогов: Разделяйте большие пакеты на подкаталоги для упрощения структуры.


Практические советы по организации классов и пакетов

Избегайте больших пакетов: Не создавайте пакеты с слишком большим количеством классов. Разделяйте их на подкатегории по функциональности.
Используйте модификаторы доступа: Ограничивайте доступ к классам и методам, которые не должны использоваться за пределами пакета. Используйте модификатор доступа default для классов и методов, доступных только внутри пакета.

Документируйте пакеты и классы: Добавляйте комментарии и Javadoc к пакетам и классам для облегчения понимания их назначения и функциональности.
Следите за зависимостями: Избегайте циклических зависимостей между пакетами. Структурируйте пакеты так, чтобы зависимости шли только в одном направлении.


Пример проекта с комментариями и структурой пакетов:
src
└── com
└── example
├── controller
│ └── UserController.java
├── service
│ └── UserService.java
├── repository
│ └── UserRepository.java
└── model
└── User.java


Файл: com/example/controller/UserController.java
package com.example.controller;

import com.example.service.UserService;

/**
* Контроллер для обработки запросов пользователей
*/
public class UserController {
private UserService userService;

public UserController() {
userService = new UserService();
}

public void handleRequest() {
userService.processUser();
}
}


Файл: com/example/service/UserService.java
package com.example.service;

import com.example.repository.UserRepository;

/
* Сервис для обработки логики пользователей
*/
public class UserService {
private UserRepository userRepository;

public UserService() {
userRepository = new UserRepository();
}

public void processUser() {
userRepository.saveUser();
}
}


Файл: com/example/repository/UserRepository.java
package com.example.repository;

/
* Репозиторий для работы с базой данных пользователей
*/
public class UserRepository {
public void saveUser() {
System.out.println("User saved to the database");
}
}


Файл: com/example/model/User.java
package com.example.model;

/**
* Модель данных пользователя
*/
public class User {
private String name;

public User(String name) {
this.name = name;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}


#Java #Training
Исключения: Основы

Исключения (exceptions)
в Java — это события, которые происходят во время выполнения программы и нарушают нормальный поток её выполнения. Исключения используются для управления ошибками и другими непредвиденными ситуациями.

Иерархия исключений

Иерархия классов исключений в Java начинается с класса Throwable, который делится на два подкласса: Error и Exception.

Error: Используется для обозначения серьёзных проблем, которые не могут быть обработаны приложением (например, ошибки виртуальной машины Java).
Exception: Используется для обозначения условий, которые приложение может попытаться обработать.


Иерархия классов исключений:
- Throwable
- Error
- Exception
- RuntimeException


Checked и Unchecked исключения

Checked исключения: Проверяемые исключения (checked exceptions) являются подтипами класса Exception, за исключением подтипов RuntimeException. Эти исключения проверяются во время компиляции. Пример: IOException.
Unchecked исключения: Непроверяемые исключения (unchecked exceptions) являются подтипами класса RuntimeException. Эти исключения не проверяются во время компиляции. Пример: NullPointerException.


Примеры исключений:

Checked исключение: FileNotFoundException, которое возникает, если файл не найден.
Unchecked исключение: ArrayIndexOutOfBoundsException, которое возникает при попытке доступа к несуществующему элементу массива.


Создание собственного исключения

Вы можете создать свои собственные исключения, расширяя класс Exception или RuntimeException.
public class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}


Пример использования пользовательского исключения:
public class Main {
public static void main(String[] args) {
try {
validateAge(15);
} catch (CustomException e) {
System.out.println(e.getMessage());
}
}

public static void validateAge(int age) throws CustomException {
if (age < 18) {
throw new CustomException("Age must be at least 18.");
}
}
}


Основные методы класса Throwable:

getMessage(): Возвращает описание исключения.
printStackTrace(): Выводит трассировку стека исключения.
getStackTrace(): Возвращает массив элементов стека, представляющий трассировку стека исключения.



Пример использования методов класса Throwable:
public class Main {
public static void main(String[] args) {
try {
int result = divide(10, 0);
} catch (ArithmeticException e) {
System.out.println("Exception: " + e.getMessage());
e.printStackTrace();
}
}

public static int divide(int a, int b) {
return a / b; // Бросает ArithmeticException при делении на ноль
}
}


#Java #Training #Exception
Давайте проверим сколько реально людей заглядывают на канал! Жмакайте, посчитаем)
Anonymous Poll
96%
Я тут!!!
4%
Где я? Что это за группа?
Подписывайтесь на канал, мы расскажем как происходит на самом деле🤌

https://t.me/Java_for_beginner_dev

#Mems
Что выведет код?

public class Main {
public static void main(String[] args) {
var number = 10;
var text = "The number is ";
var result = text + number;

number += 5;
result += number;

System.out.println(result);
}
}


#Tasks
Обработка исключений

В Java для обработки исключений используются блоки try, catch и finally. Эти блоки помогают управлять ошибками и выполнять очистку ресурсов.

Блок try-catch
Блок try содержит код, который может вызвать исключение. Блок catch используется для обработки этого исключения.

Синтаксис try-catch:
try {
// Код, который может вызвать исключение
} catch (ExceptionType e) {
// Код для обработки исключения
}


Пример использования try-catch:
public class Main {
public static void main(String[] args) {
try {
int result = divide(10, 0);
} catch (ArithmeticException e) {
System.out.println("Cannot divide by zero!");
}
}

public static int divide(int a, int b) {
return a / b; // Бросает ArithmeticException при делении на ноль
}
}


Блок finally
Блок finally используется для выполнения кода, который должен быть выполнен независимо от того, было ли выброшено исключение или нет. Этот блок часто используется для освобождения ресурсов, закрытия файлов и т.д.

Синтаксис try-catch-finally:
try {
// Код, который может вызвать исключение
} catch (ExceptionType e) {
// Код для обработки исключения
} finally {
// Код, который будет выполнен в любом случае
}


Пример использования try-catch-finally:
public class Main {
public static void main(String[] args) {
try {
int result = divide(10, 0);
} catch (ArithmeticException e) {
System.out.println("Cannot divide by zero!");
} finally {
System.out.println("Execution completed.");
}
}

public static int divide(int a, int b) {
return a / b; // Бросает ArithmeticException при делении на ноль
}
}


Обработка нескольких исключений
Можно обработать несколько типов исключений, используя несколько блоков catch.

Пример обработки нескольких исключений:
public class Main {
public static void main(String[] args) {
try {
int[] numbers = {1, 2, 3};
System.out.println(numbers[5]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Array index is out of bounds!");
} catch (Exception e) {
System.out.println("An error occurred!");
}
}
}


Множественные исключения в одном catch
С Java 7 можно обрабатывать несколько типов исключений в одном блоке catch, используя оператор |.

Пример использования одного catch для нескольких исключений:
public class Main {
public static void main(String[] args) {
try {
int[] numbers = {1, 2, 3};
System.out.println(numbers[5]);
} catch (ArrayIndexOutOfBoundsException | ArithmeticException e) {
System.out.println("An error occurred: " + e.getMessage());
}
}
}


#Java #Training #Exception #TryCatch
Java for Beginner
Давайте проверим сколько реально людей заглядывают на канал! Жмакайте, посчитаем)
Любопытно...
Из 80+ подписчиков данный пост посмотрело 37 человек...
Нажать на варианты ответа рискнуло всего 11...
Вопрос, где остальные?))))
Создание собственных исключений

Пользовательские исключения (custom exceptions) — это исключения, созданные разработчиком для обработки специфических условий ошибок в приложении. Они наследуются от классов Exception или RuntimeException.
Пользовательские исключения помогают сделать код более читаемым и понятным, предоставляя более конкретные сообщения об ошибках и улучшая обработку специфических ситуаций.

Создание пользовательского исключения

Для создания пользовательского исключения необходимо создать класс, который наследует от Exception (для checked исключений) или RuntimeException (для unchecked исключений).
public class CustomCheckedException extends Exception {
public CustomCheckedException(String message) {
super(message);
}
}


Пример создания unchecked исключения:
public class CustomUncheckedException extends RuntimeException {
public CustomUncheckedException(String message) {
super(message);
}
}


Пример использования пользовательского исключения:
public class Main {
public static void main(String[] args) {
try {
validateAge(15);
} catch (CustomCheckedException e) {
System.out.println("Caught exception: " + e.getMessage());
}
}

public static void validateAge(int age) throws CustomCheckedException {
if (age < 18) {
throw new CustomCheckedException("Age must be at least 18.");
}
}
}


Конструкторы пользовательских исключений

Пользовательские исключения могут иметь разные конструкторы для передачи различных параметров.
public class CustomCheckedException extends Exception {
public CustomCheckedException(String message) {
super(message);
}

public CustomCheckedException(String message, Throwable cause) {
super(message, cause);
}

public CustomCheckedException(Throwable cause) {
super(cause);
}
}


Исключения с собственными методами

Иногда может потребоваться добавить методы для обработки дополнительных данных в пользовательские исключения.
public class InvalidUserInputException extends Exception {
private int errorCode;

public InvalidUserInputException(String message, int errorCode) {
super(message);
this.errorCode = errorCode;
}

public int getErrorCode() {
return errorCode;
}
}


Использование исключения с собственными методами:
public class Main {
public static void main(String[] args) {
try {
processInput(-1);
} catch (InvalidUserInputException e) {
System.out.println("Error: " + e.getMessage() + " (Error code: " + e.getErrorCode() + ")");
}
}

public static void processInput(int value) throws InvalidUserInputException {
if (value < 0) {
throw new InvalidUserInputException("Input value must be non-negative", 1001);
}
}
}


#Java #Training #Exception
Что выведет код?

import java.util.*;

public class CollectionExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D", "E"));
list.add(2, "X");
Collections.sort(list, Comparator.reverseOrder());
System.out.println(list);
}
}


#Tasks