Java for Beginner
672 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
Подписывайтесь на канал, мы знаем кто Вы на самом деле 🫵

https://t.me/Java_for_beginner_dev

#Mems
Рассмотрите следующий код. Какое значение будет напечатано в консоль при его выполнении?

public class Main {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
int result = 0;
for (int i = 0; i < arr.length; i += 2) {
result += arr[i];
}
System.out.println(result);
}
}


#Tasks
Варианты ответа:
Anonymous Quiz
50%
9
19%
6
23%
15
8%
5
Различия между абстрактными классами и интерфейсами

Основные различия между абстрактными классами и интерфейсами:

Множественное наследование:

Абстрактные классы: Класс может наследовать только один абстрактный класс.
Интерфейсы: Класс может реализовывать несколько интерфейсов.


Методы с реализацией:

Абстрактные классы: Могут содержать как абстрактные методы (без реализации), так и методы с реализацией.
Интерфейсы: До Java 8 интерфейсы не могли содержать методов с реализацией. С Java 8 интерфейсы могут содержать методы по умолчанию и статические методы.


Ключевые слова:

Абстрактные классы: Определяются с использованием ключевого слова abstract.
Интерфейсы: Определяются с использованием ключевого слова interface.


Конструкторы:

Абстрактные классы: Могут иметь конструкторы.
Интерфейсы: Не могут иметь конструкторов.


Поле класса:


Абстрактные классы: Могут содержать поля (переменные экземпляра).
Интерфейсы: Могут содержать только константы (public static final поля).


Примеры для сравнения:

Абстрактный класс:
public abstract class Animal {
protected String name;

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

public abstract void makeSound(); // Абстрактный метод

public void eat() {
System.out.println(name + " is eating");
}
}

public class Dog extends Animal {
public Dog(String name) {
super(name);
}

@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}


Интерфейс:
public interface Animal {
void makeSound(); // Метод без реализации

default void sleep() {
System.out.println("Sleeping...");
}
}

public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}


Сравнительное использование:
public class Main {
public static void main(String[] args) {
// Абстрактный класс
Dog dog = new Dog("Buddy");
dog.makeSound(); // Выведет "Woof! Woof!"
dog.eat(); // Выведет "Buddy is eating"

// Интерфейс
Animal animal = new Dog();
animal.makeSound(); // Выведет "Woof! Woof!"
animal.sleep(); // Выведет "Sleeping..."
}
}


Когда использовать абстрактные классы и интерфейсы:

Используйте абстрактный класс, когда:

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


Используйте интерфейсы, когда:


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


#Java #Training #ООП
Небольшой разбор задачки от нашего подписчика)))

Оцените!👍
Forwarded from RomanGV
This media is not supported in your browser
VIEW IN TELEGRAM
Вот записал.. сказку на ночь)))
Сильно не пинайте, впервые такое записываю😀

Разбор той мини задачки "Шо напечатает код, который в следующем сообщении, если ввести "1abcd"?))"
#Tasks #Solution
Всем приятных выходных!

Не думаем о работе, наслаждаемся летом и солнышком🔆

Делитесь фото, как отдыхаете!😉

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

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