Java | Фишки и трюки
Open in Telegram
Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg Менеджер по рекламе: @shmyzna
Show more6 952
Subscribers
+124 hours
-107 days
+1230 days
Posts Archive
6 952
public class Quest {
public static void main(String[] args) {
int x = 5;
int y = 10;
int result = add(x, y) * multiply(x, y);
System.out.println(result);
}
public static int add(int a, int b) {
try {
return a + b;
} finally {
return a - b;
}
}
public static int multiply(int a, int b) {
try {
return a * b;
} finally {
return a / b;
}
}
}
#java #quest6 952
Регистрация на Java meetup 2024 уже открыта! ⚡️
7 сентября встречаемся в штаб-квартире Сбера на Кутузовском проспекте, чтобы поговорить о Spring Framework, нативных сборках Java-приложений и устройстве разработки в мире open source.
Для опытных разработчиков на митапе будет инсайдерская информация и глубокое погружение в технологию, а для тех, кто только начинает путь в IT — простое и понятное изложение материала.
По ссылке — подробное расписание и заявка на участие. До встречи на Java meetup 2024! 💚
6 952
⌨️ Потокобезопасность (Thread-Safe) — это свойство объекта или кода, которое гарантирует корректное поведение при одновременном доступе нескольких потоков. Например, потокобезопасный счетчик будет правильно учитывать каждое увеличение, даже если его используют одновременно несколько потоков. Это означает, что результаты работы будут предсказуемыми и соответствующими ожиданиям, независимо от того, сколько потоков обращаются к объекту или выполняют код одновременно.
#java #ThreadSafe
6 952
⌨️ Дженерики (generics) — это механизм, который позволяет создавать классы, интерфейсы и методы, работающие с различными типами данных, при этом сохраняя строгую типизацию. Они были введены в Java начиная с версии 5 для повышения безопасности типов и повторного использования кода.
Дженерики позволяют определить параметр типа, который будет заменен конкретным типом данных при создании экземпляра класса или вызове метода. Например,
List<T> может использоваться как List<String>, List<Integer> и т.д.
Благодаря дженерикам, ошибки типа (например, попытка вставить объект неправильного типа) обнаруживаются на этапе компиляции, а не во время выполнения программы.
Один универсальный класс или метод может работать с различными типами данных, что позволяет избежать дублирования кода.
Во время компиляции информация о типах стирается, и вместо этого используется базовый тип, что позволяет сохранять совместимость с кодом, написанным до появления дженериков.
public class Box<T> {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
Box<String> stringBox = new Box<>();
stringBox.setItem("Hello");
String str = stringBox.getItem();
В этом примере класс Box<T> является обобщенным и может работать с любым типом данных, который заменит T при создании объекта.
#java #generics #T6 952
Востребованный разработчик за 2 часа
Всего одна фича увеличит шансы найти работу в 5-10 раз. И это – умение создавать высоконагруженное приложение с Redis.
Если вы стремитесь начать карьеру в IT, стать востребованным разработчиком, а также хотите повысить квалификацию и увеличить зарплату, приходите на онлайн лекцию от FAANG School. Там вы:
– Получите готовую архитектуру фич для своего проекта с использованием Redis
– Узнаете, что такое кэш и когда его эффективно использовать
– Разберетесь, что такое Redis и почему он так востребован на рынке
– Сможете сразу реализовать несколько фич с Redis для своего проекта.
Переходите и забирайте подарки:
- гайд «5 улучшений для твоего пет-проекта»
- шпаргалка по Redis
- пошаговый Roadmap по Java
- шпаргалка по Kafka
- шпаргалка «Микросервисы: вопросы с собеседований»
Жмите на красную кнопку, чтобы после эфира реализовать несколько фич с Redis и увеличить шанс получить оффер.
6 952
public class Quest {
public static void main(String[] args) {
String s = null;
if (s != null & s.length() > 0) {
System.out.println("YES!");
} else {
System.out.println("NO!");
}
}
}
#java #quest6 952
Разыскиваются 5 активных JAVA разработчиков 🔥🔥🔥
Для обучения AI-разработке!
Мы научим вас создавать и тренировать нейронные сети, и вы сможете:
1️⃣ Устроиться разработчиком в крупную компанию и зарабатывать от 150 тысяч руб. в месяц
2️⃣ Разрабатывать такие проекты на заказ и зарабатывать от 500 тысяч руб. за проект
3️⃣ Создать нейро-сотрудника в вашей компании и вырасти на +30-100% в зарплате
На интенсиве будет много практики: создадим 9 нейросетей за 1 вечер:
🧬 Оценка выброса CO2 по параметрам машины
🧬 Сегментация изображения для робота доставщика
🧬 Трекинг людей на видео
🧬 Распознавание речии другие
Ведущий интенсива - Senior AI-разработчик нейросетей и основатель Университета искусственного интеллекта
🔥 Регистрируйтесь на бесплатный интенсив! Встречаемся в ближайшую среду. Вы узнаете, как освоить самую востребованную профессию 2024 года!
Реклама. ООО "ТЕРРА ЭЙАЙ". ИНН 9728019395.
6 952
⌨️ Byte Buddy — это мощная библиотека для Java, предназначенная для создания, модификации и управления байт-кодом на лету, без необходимости использования низкоуровневых инструментов вроде ASM. Основное применение Byte Buddy — это динамическое создание и изменение классов в рантайме, что может быть полезно для написания агентов Java, создания прокси-объектов, внедрения кода в существующие классы и тестирования.
Библиотека позволяет создавать новые классы и изменять существующие без изменения исходного кода, а так же позволяет добавлять аннотации и реализовывать интерфейсы в динамически создаваемых классах.
Byte Buddy поддерживает широкий диапазон версий Java и интегрируется с такими библиотеками, как Spring и Hibernate.
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
import net.bytebuddy.implementation.FixedValue;
import static net.bytebuddy.matcher.ElementMatchers.named;
public class ByteBuddyExample {
public static void main(String[] args) throws Exception {
// Создаем новый класс динамически
Class<?> dynamicType = new ByteBuddy()
.subclass(Object.class) // Класс наследуется от Object
.name("com.example.HelloWorld") // Указываем имя нового класса
.method(named("toString")) // Переопределяем метод toString
.intercept(FixedValue.value("Hello from Byte Buddy!")) // Метод будет возвращать фиксированное значение
.make()
.load(ByteBuddyExample.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
.getLoaded();
// Создаем экземпляр нового класса
Object instance = dynamicType.getDeclaredConstructor().newInstance();
// Вызываем переопределенный метод toString
System.out.println(instance.toString()); // Вывод: Hello from Byte Buddy!
}
}
#java #ByteBuddy6 952
👀 Знаете ли вы все секреты клавиш F на вашей клавиатуре?
Думали, что клавиши F просто занимают место на клавиатуре❓
Ошибаетесь! Эти кнопки способны творить магию — ускорять рутинные задачи и экономить вам драгоценное время ✨
✅ Хотите быстро переименовать файл 🔜 нажмите F2
✅ Нужен быстрый поиск в любом приложении 🔜 F3
✅ А если вам нужно быстро открыть адресную строку браузера 🔜 нажмите F6
И это лишь вершина айсберга! На нашем канале — самые свежие новости, инсайдерская информация и фишки, которые вы не найдете нигде больше ⚡️
📌 Откройте для себя новые горизонты программирования вместе с нами!
Не теряйте времени — подпишитесь и прокачайте свои навыки в программировании 💬
TechVibe
6 952
⌨️ В чем отличие между поверхностным и глубоким клонированием?
Поверхностное копирование копирует настолько малую часть информации об объекте, насколько это возможно. По умолчанию, клонирование в Java является поверхностным, т.е. класс
Object не знает о структуре класса, которого он копирует. Клонирование такого типа осуществляется JVM по следующим правилам:
✔️ Если класс имеет только члены примитивных типов, то будет создана совершенно новая копия объекта и возвращена ссылка на этот объект.
✔️ Если класс помимо членов примитивных типов содержит члены ссылочных типов, то тогда копируются ссылки на объекты этих классов. Следовательно, оба объекта будут иметь одинаковые ссылки.
Глубокое копирование дублирует абсолютно всю информацию объекта:
✔️ Нет необходимости копировать отдельно примитивные данные;
✔️ Все члены ссылочного типа в оригинальном классе должны поддерживать клонирование. Для каждого такого члена при переопределении метода clone() должен вызываться super.clone();
✔️ Если какой-либо член класса не поддерживает клонирование, то в методе клонирования необходимо создать новый экземпляр этого класса и скопировать каждый его член со всеми атрибутами в новый объект класса, по одному.
#java #clone6 952
🎓 Архив слитых курсов прямо в телеграм!
Вот огромная база материалов, которая пополняется каждый день!
>Python (96гб видео)
>С++(51 курсов)
>Java (23гб видео)
>Базы данных (50гб курсов)
>C# (45гб курсов)
>Английский (101гб курсов)
>PHP (43гб видео)
>Мобильная разработка (22гб курсов)
>Go ( 132гб видео)
>Rust (35 гб видео)
>SQL (43гб видео)
>MySQL (31гб видео)
>Другое (1679 гб видео)
⛓ Огромный кладезь топовых материалов более 20198Гб: Курсов, свежих книг, шпаргалок, гайдов , лекций, — всё в одном месте: @datacours
6 952
ThreadLocal - это класс в Java, который позволяет создавать локальные переменные, привязанные к каждому потоку. Это полезно, когда вам нужно иметь уникальную копию переменной для каждого потока, чтобы избежать конфликтов и обеспечить безопасность в многопоточной среде.
Преимущества ThreadLocal:
1⃣ Безопасность потоков: Каждый поток имеет свою собственную копию переменной, что устраняет соревнование и конфликты доступа.
2⃣ Улучшение производительности: Использование ThreadLocal может уменьшить необходимость синхронизации при доступе к переменным в многопоточной среде.
3⃣ Удобство: ThreadLocal делает работу с потоками более удобной и чистой, позволяя каждому потоку иметь свои собственные данные.
ThreadLocal полезен в ситуациях, когда вам нужно сохранить состояние для каждого потока, и он помогает избежать сложностей, связанных с синхронизацией и разделяемыми ресурсами.
6 952
public class Quest {
public static void main(String[] args) {
int x = 1;
System.out.println("x+1 = " + x+1);
}
}
#java #quest6 952
Нижний Новгород, встречай Сезон кода — большой ИТ-фестиваль
Фестиваль для опытных специалистов в Data, .NET, Java и Python. Время собраться всем ИТ-сообществом, обменяться опытом и просто повеселиться. В программе доклады, знакомство с коллегами, настольный теннис, баскетбол, ИТ-квиз, настольные игры и живая музыка.
Успейте зарегистрироваться на Сезон кода
📍Пройдет в Нижнем Новгороде 14 сентября
erid:2VtzqvEPgpu
Реклама. АО "ТБанк", ИНН 7710140679, лицензия ЦБ РФ № 2673
6 952
⌨️ Клонирование объектов
Использование оператора присваивания не создает нового объекта, а лишь копирует ссылку на объект. Таким образом, две ссылки указывают на одну и ту же область памяти, на один и тот же объект. Для создания нового объекта с таким же состоянием используется клонирование объекта.
Класс
Object содержит protected метод clone(), осуществляющий побитовое копирование объекта производного класса. Однако сначала необходимо переопределить метод clone() как public для обеспечения возможности его вызова. В переопределенном методе следует вызвать базовую версию метода super.clone(), которая и выполняет собственно клонирование.
Чтобы окончательно сделать объект клонируемым, класс должен реализовать интерфейс Cloneable. Интерфейс Cloneable не содержит методов относится к маркерным интерфейсам, а его реализация гарантирует, что метод clone() класса Object возвратит точную копию вызвавшего его объекта с воспроизведением значений всех его полей. В противном случае метод генерирует исключение CloneNotSupportedException. Следует отметить, что при использовании этого механизма объект создается без вызова конструктора.
public class MyClass implements Cloneable {
private int value;
// Конструкторы и методы класса
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
Это решение эффективно только в случае, если поля клонируемого объекта представляют собой значения базовых типов и их обёрток или неизменяемых (immutable) объектных типов. Если же поле клонируемого типа является изменяемым ссылочным типом, то для корректного клонирования требуется другой подход. Причина заключается в том, что при создании копии поля оригинал и копия представляют собой ссылку на один и тот же объект. В этой ситуации следует также клонировать и сам объект поля класса.
Такое клонирование возможно только в случае, если тип атрибута класса также реализует интерфейс Cloneable и переопределяет метод clone(). Так как, если это будет иначе вызов метода невозможен из-за его недоступности. Отсюда следует, что если класс имеет суперкласс, то для реализации механизма клонирования текущего класса-потомка необходимо наличие корректной реализации такого механизма в суперклассе. При этом следует отказаться от использования объявлений final для полей объектных типов по причине невозможности изменения их значений при реализации клонирования.
Помимо встроенного механизма клонирования в Java для клонирования объекта можно использовать:
✔️ Специализированный конструктор копирования - в классе описывается конструктор, который принимает объект этого же класса и инициализирует поля создаваемого объекта значениями полей переданного.
✔️ Фабричный метод - (Factory method), который представляет собой статический метод, возвращающий экземпляр своего класса.
✔️ Механизм сериализации - сохранение и последующее восстановление объекта в/из потока байтов.
#java #clone
Available now! Telegram Research 2025 — the year's key insights 
