
💸 Скидки до 70% для бизнеса и финансов
Ловите лучшие слоты в каналах бизнес-тематик — только до 6 апреля!
Забрать скидку

23.1

Java | Фишки и трюки
5.0
21
Интернет технологии
659
15
Аудитория канала - начинающие или опытные Java программисты. Канал о разработке приложений на Java, в том числе написание бэкенд и web-приложений. Рассматриваются фишки и трюки при программировании на Java.
Поделиться
В избранное
Купить рекламу в этом канале
Формат:
keyboard_arrow_down
- 1/24
- 2/48
- 3/72
- 7 дней
- Репост
1 час в топе / 24 часа в ленте
Количество:
%keyboard_arrow_down
- 1
- 2
- 3
- 4
- 5
- 8
- 10
- 15
Стоимость публикации:
local_activity
2 237.76₽2 237.76₽local_mall
0.0%
Осталось по этой цене:0
Последние посты канала
⌨️ Автоупаковка (autoboxing). Правила упаковки примитивных типов в классы-обертки
Автоупаковка - это механизм неявной инициализации объектов классов-оберток (
Byte
, Short
, Integer
, Long
, Float
, Double
, Character
, Boolean
) значениями соответствующих им исходных примитивных типов (byte
, short
, int
...), без явного использования конструктора класса.
Автоупаковка происходит при прямом присваивании примитива классу-обертке (с помощью оператора =
), либо при передаче примитива в параметры метода (типа класса-обертки).
Автоупаковке в классы-обертки могут быть подвергнуты как переменные примитивных типов, так и константы времени компиляции (литералы и final
-примитивы). При этом литералы должны быть синтаксически корректными для инициализации переменной исходного примитивного типа.
Автоупаковка переменных примитивных типов требует точного соответствия типа исходного примитива типу класса-обертки. Например, попытка упаковать переменную типа byte
в Short
, без предварительного явного приведения byte
в short
вызовет ошибку компиляции.
Автоупаковка констант примитивных типов допускает более широкие границы соответствия. В этом случае компилятор способен предварительно осуществлять неявное расширение/сужение типа примитивов:
✔️ неявное расширение/сужение исходного типа примитива до типа примитива, соответствующего классу-обертке (для преобразования int
в Byte
, сначала компилятор самостоятельно неявно сужает int
к byte
)
✔️ автоупаковку примитива в соответствующий класс-обертку. Однако, в этом случае существуют два дополнительных ограничения:
a) присвоение примитива обертке может производится только оператором =
(нельзя передать такой примитив в параметры метода без явного приведения типов)
b) тип левого операнда не должен быть старше чем Character
, тип правого не должен старше, чем int
: допустимо расширение/сужение byte
в/из short
, byte
в/из char
, short
в/из char
и только сужение byte
из int
, short
из int
, char
из int
. Все остальные варианты требуют явного приведения типов).
Дополнительной особенностью целочисленных классов-оберток, созданных автоупаковкой констант в диапазоне -128 ... +127 является то, что они кэшируются JVM. Поэтому такие обертки с одинаковыми значениями будут являться ссылками на один объект.
#java #autoboxing435
13:32
04.04.2025
imageИзображение не доступно для предпросмотра
ИИ-помощника в каждый бизнес!
✨Акция на Битрикс24
Купи годовой тариф Битрикс24 со скидкой - 30% и получи ИИ-помощника на сумму 100 000 рублей бонусом.
Делаем искусственный интеллект доступным каждому бизнесу.❤️
Узнать больше
#реклама 16+
ai-sale.bitrix24.ru
О рекламодателе
599
12:11
04.04.2025
⌨️ Лямбда-выражения и свой кастомный функциональный интерфейс
Для того что бы определить лямбда-выражение, нам нужен функциональный интерфейс. Изобретём свой:
@FunctionalInterface
interface MathOperation {
int operate(int a, int b);
}
{}
Функциональный интерфейс MathOperation
содержит один абстрактный метод operate
, который принимает два значения типа int
и возвращает int
. Аннотация @FunctionalInterface
указывает на то, что интерфейс предназначен для использования в функциональном программировании и должен содержать только один абстрактный метод. Но аннотация не обязательна.
Использование лямбда-выражения:
public class LambdaExample {
public static void main(String[] args) {
// Реализация интерфейса с помощью лямбда-выражения
MathOperation addition = (a, b) -> a + b;
MathOperation subtraction = (a, b) -> a - b;
MathOperation multiplication = (a, b) -> a * b;
MathOperation division = (a, b) -> a / b;
int x = 10;
int y = 5;
System.out.println("Addition: " + operate(x, y, addition)); // 15
System.out.println("Subtraction: " + operate(x, y, subtraction)); // 5
System.out.println("Multiplication: " + operate(x, y, multiplication)); // 50
System.out.println("Division: " + operate(x, y, division)); // 2
}
// Метод, принимающий MathOperation и применяющий его к данным
private static int operate(int a, int b, MathOperation operation) {
return operation.operate(a, b);
}
}
{}
В нашем примере лямбда-выражения используются для создания экземпляров интерфейса MathOperation
для выполнения различных математических операций (сложение, вычитание и т.д.).
Метод operate
принимает два целых числа и функциональный интерфейс MathOperation
, затем выполняет переданную операцию. В метод в третьем параметре можно передать непосредственно лямбда-выражение, не используя промежуточную переменную.
#java #lambda #FunctionalInterface991
15:23
03.04.2025
Я пожалею об этом, но ладно...
В общем сливаю вам самый топовый источник сервисов, софта, программ, новостей из мира IT.
Если после этого не сможешь обезопасить свой девайс, то ты безнадежен!
Вот ссылка - https://t.me/+zxnnnF0q_wtmZTgy
1060
13:20
03.04.2025
☕️ JBCrypt
🔺JBCrypt - это библиотека для безопасного хеширования паролей в Java, реализующая алгоритм bcrypt. Она обеспечивает надежную защиту паролей от атак перебором и радужных таблиц.
💫 Пример: Система регистрации и аутентификации
import org.mindrot.jbcrypt.BCrypt;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class AuthenticationSystem {
private static Map users = new HashMap<>();
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("1. Регистрация");
System.out.println("2. Вход");
System.out.println("3. Выход");
System.out.print("Выберите действие: ");
int choice = scanner.nextInt();
scanner.nextLine(); // Очистка буфера
switch (choice) {
case 1:
register(scanner);
break;
case 2:
login(scanner);
break;
case 3:
System.out.println("До свидания!");
return;
default:
System.out.println("Неверный выбор. Попробуйте снова.");
}
}
}
private static void register(Scanner scanner) {
System.out.print("Введите имя пользователя: ");
String username = scanner.nextLine();
System.out.print("Введите пароль: ");
String password = scanner.nextLine();
String hashedPassword = BCrypt.hashpw(password, BCrypt.gensalt());
users.put(username, hashedPassword);
System.out.println("Регистрация успешна!");
}
private static void login(Scanner scanner) {
System.out.print("Введите имя пользователя: ");
String username = scanner.nextLine();
System.out.print("Введите пароль: ");
String password = scanner.nextLine();
if (users.containsKey(username) && BCrypt.checkpw(password, users.get(username))) {
System.out.println("Вход выполнен успешно!");
} else {
System.out.println("Неверное имя пользователя или пароль.");
}
}
}{}
🛡JBCrypt предоставляет простой и эффективный способ защиты паролей пользователей. Использование этой библиотеки значительно повышает безопасность приложений, работающих с аутентификацией пользователей.1158
17:37
02.04.2025
От чего зависит эффективность автотестов?
От их правильного написания и поддерживаемости!
В QA GURU мы учим приручать Java, чтобы ваши автотесты работали, как часы. Вот несколько лайфхаков, о которых мы расскажем на вводном занятии уже завтра (20:00 Мск):
1. Используйте понятные и описательные названия тестов
Названия тестов должны четко отражать их цель. Это упрощает понимание кода всеми членами команды.
Например:
// Хорошо
public void verifyLoginWithValidCredentials() { ... }{}
// Плохо
public void test1() { ... }{}
Описательные названия помогают быстро понять, что проверяет тест, без необходимости изучения его внутренней логики.
2. Применяйте Page Object Model (POM)
Page Object Model позволяет отделить логику теста от структуры веб-страницы, что делает код более модульным и удобным для поддержки при изменениях интерфейса.
Пример использования:
// Класс
Page Object
public class LoginPage {
private By usernameField = By. id("username");
private By passwordField = By. id("password");
private By loginButton = By. id("loginBtn");
public void enterUsername(String username) {
driver.findElement(usernameField).sendKeys(username);
}
public void enterPassword(String password) {
driver.findElement(passwordField).sendKeys(password);
}
public void clickLoginButton() {
driver.findElement(loginButton).click();
}
}{}
// Тестовый сценарий
LoginPage loginPage = new LoginPage(driver);
loginPage.enterUsername("john.doe");
loginPage.enterPassword("password123");
loginPage.clickLoginButton();
{}
POM способствует повторному использованию кода и улучшает читаемость тестов.
3. Используйте параметризацию и data-driven подход
Параметризованные тесты позволяют запускать один и тот же сценарий с различными входными данными, что увеличивает охват тестирования без дублирования кода.
@ ParameterizedTest
@ CsvSource({"john.doe, password123", "jane.smith, test@123"})
public void verifyLogin(String username, String password) {
LoginPage loginPage = new LoginPage(driver);
loginPage.enterUsername(username);
loginPage.enterPassword(password);
loginPage.clickLoginButton();
}{}
Этот подход делает тесты более гибкими и масштабируемыми.
4. Следуйте принципу AAA (Arrange, Act, Assert)
Структурируйте тесты в три этапа:
Arrange: подготовка данных и окружения.
Act: выполнение действия.
Assert: проверка результата.
Пример:
@ Test
public void testAddition() {
// Arrange
Calculator calculator = new Calculator();
// Act
int result = calculator.add(2, 3);
// Assert
assertEquals(5, result);
}{}
Этот подход делает тесты более организованными и легко читаемыми.
5. Логирование и отчетность
Добавляйте логирование в тесты для диагностики проблем:
log. info("Entering username: " + username);
log. info("Clicking on the login button");
{}
Интеграция инструментов отчетности (например, Allure) помогает визуализировать результаты тестов и быстро выявлять ошибки.
6. Регулярные ревью кода
Проводите регулярные ревью автотестов для повышения качества кода. Это помогает выявить потенциальные проблемы, улучшить читаемость и обеспечить соблюдение стандартов кодирования.
7. Автоматизация и CI/CD
Используйте инструменты автоматизации (Maven, Gradle) для запуска тестов в рамках CI/CD пайплайнов. Это ускоряет процесс разработки и обеспечивает стабильность приложения на всех этапах.
Хотите узнать больше? Присоединяйтесь завтра (20:00 Мск) к нашему бесплатному открытому уроку!
🔗 Зарегистрируйтесь на первый открытый урок по ссылке.1014
15:36
02.04.2025
⌨️ Pattern Matching для instanceof
Начиная с Java 16, проверка типов с помощью
instanceof
стала гораздо удобнее благодаря Pattern Matching. Раньше, после проверки объекта на принадлежность к определённому классу, нужно было выполнять явное приведение типа. Теперь это можно сделать в одной строке.
Пример до Java 16:
if (obj instanceof String) {
String str = (String) obj;
System.out.println(str.length());
}{}
Пример с Pattern Matching:
if (obj instanceof String str) {
System.out.println(str.length());
}{}
Теперь после instanceof
можно сразу же использовать объект нужного типа в коде, что делает программу более читабельной и компактной.
#java #PatternMatching #instanceof1271
08:04
01.04.2025
imageИзображение не доступно для предпросмотра
Почему тебе стоит перейти на Go
Для программистов, которые хотят работать над проектами уровня Kubernetes, а не "писать формы"
Я напишу всего 5 причин, но их, на самом деле, больше.
Простота и лаконичность кода Высокая производительность Отличная поддержка конкурентности Широкие возможности для backend-разработки Быстрая компиляция и кроссплатформенность
И это далеко не всё. 2 апреля на вебинаре ты:
— Узнаешь, как переходить с других языков на Go, даже если ты уже прикипел к своему стеку.
— Получишь возможность всего за 2 месяца сменить свой стек и зарабатывать больше.
Спикер вебинара - Дмитрий Березницкий. Chief Technical Officer с 20 летним опытом разработки решений в областях безопасности, блокчейна, финтеха и электронной коммерции, с основным фокусом на рынке США.
https://raise.kata.academy/web_go?utm_source=telegram&utm_medium=telegain&utm_campaign=web_go&utm_content=java_tips_and_tricks&erid=2W5zFGcH3Rz
869
07:00
01.04.2025
☕️ Quartz
Quartz - это мощная библиотека с открытым исходным кодом для планирования и выполнения задач по расписанию в Java-приложениях. Она предоставляет гибкие возможности для определения сложных расписаний выполнения задач и поддерживает кластеризацию.
🌐Пример: Планирование задачи резервного копирования базы данных
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.time.LocalDateTime;
public class BackupSchedulerExample {
public static void main(String[] args) throws SchedulerException {
// Создаем планировщик
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// Определяем задачу
JobDetail job = JobBuilder.newJob(DatabaseBackupJob.class)
.withIdentity("databaseBackupJob", "backupGroup")
.build();
// Создаем триггер для запуска задачи каждый день в 2:00
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("dailyBackupTrigger", "backupGroup")
.withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(2, 0))
.build();
// Планируем задачу с триггером
scheduler.scheduleJob(job, trigger);
// Запускаем планировщик
scheduler.start();
System.out.println("Планировщик резервного копирования запущен.");
System.out.println("Следующее резервное копирование запланировано на: "
+ trigger.getNextFireTime());
// Оставляем планировщик работать
try {
Thread.sleep(60000); // Ждем 1 минуту для демонстрации
} catch (InterruptedException e) {
e.printStackTrace();
}
// Останавливаем планировщик
scheduler.shutdown();
}
// Класс, представляющий задачу резервного копирования
public static class DatabaseBackupJob implements Job {
@Override
public void execute(JobExecutionContext context) {
System.out.println("Выполняется резервное копирование базы данных: "
+ LocalDateTime.now());
// Здесь был бы реальный код для резервного копирования
}
}
}{}
🔐Quartz предоставляет надежное решение для планирования и выполнения задач в Java-приложениях. Его гибкость позволяет реализовывать сложные сценарии планирования, от простых периодических задач до сложных расписаний с учетом праздников, временных зон и других факторов.1383
10:21
31.03.2025
imageИзображение не доступно для предпросмотра
👍 Тренд 2025 года — развитие без лишних затрат!
Зачем платить за дорогостоящие ресурсы, если все, что тебе нужно, уже собрано в Telegram? Программисты уже переходят на новый уровень, получая доступ к лучшим материалам без единого вложения:
👩💻 JavaScript 👩💻 React
👩💻 Python 👩💻 Docker
👩💻 Java 🖼️ Spring
👩💻 C# 👩💻 Game Dev
👩💻 С/С++ 👩💻 DevOps
👣 GoLang 🖼️ Redis
👩💻 Kotlin 👩💻 Mob Dev
🖼️ PHP 🖥 SQL
🖼️ Swift 👩💻 Kubernetes
В 2025 году все доступные ресурсы уже здесь, бесплатно! Подписывайся и будь в тренде, не тратя деньги на платные подписки 👍
993
08:20
31.03.2025
close
С этим каналом часто покупают
Отзывы канала
keyboard_arrow_down
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
5.0
1 отзыва за 6 мес.
Превосходно (100%) За последние 6 мес
m
**rketing@****.academy
на сервисе с декабря 2024
01.04.202510:44
5
Оперативное размещение
Показать еще
Лучшие в тематике
Новинки в тематике
Выбрано
0
каналов на сумму:0.00₽
Подписчики:
0
Просмотры:
lock_outline
Перейти в корзинуКупить за:0.00₽
Комментарий