es
Feedback
Java | Фишки и трюки

Java | Фишки и трюки

Ir al canal en Telegram

Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg

Mostrar más
6 775
Suscriptores
-624 horas
-277 días
-5830 días
Atraer Suscriptores
septiembre '26
septiembre '26
+11
en 0 canales
agosto '26
+51
en 9 canales
Get PRO
julio '26
+38
en 0 canales
Get PRO
junio '26
+98
en 0 canales
Get PRO
mayo '26
+128
en 10 canales
Get PRO
abril '26
+52
en 1 canales
Get PRO
marzo '26
+51
en 8 canales
Get PRO
febrero '26
+42
en 3 canales
Get PRO
enero '26
+38
en 0 canales
Get PRO
diciembre '25
+75
en 25 canales
Get PRO
noviembre '25
+108
en 11 canales
Get PRO
octubre '25
+50
en 0 canales
Get PRO
septiembre '25
+28
en 6 canales
Get PRO
agosto '25
+187
en 24 canales
Get PRO
julio '25
+156
en 16 canales
Get PRO
junio '25
+169
en 29 canales
Get PRO
mayo '25
+221
en 32 canales
Get PRO
abril '25
+290
en 35 canales
Get PRO
marzo '25
+291
en 32 canales
Get PRO
febrero '25
+1 295
en 114 canales
Get PRO
enero '25
+292
en 14 canales
Get PRO
diciembre '24
+196
en 1 canales
Get PRO
noviembre '24
+302
en 21 canales
Get PRO
octubre '24
+439
en 9 canales
Get PRO
septiembre '24
+226
en 1 canales
Get PRO
agosto '24
+281
en 3 canales
Get PRO
julio '24
+462
en 16 canales
Get PRO
junio '24
+229
en 1 canales
Get PRO
mayo '24
+395
en 9 canales
Get PRO
abril '24
+874
en 9 canales
Get PRO
marzo '24
+408
en 6 canales
Get PRO
febrero '24
+339
en 7 canales
Get PRO
enero '24
+330
en 5 canales
Get PRO
diciembre '23
+595
en 10 canales
Get PRO
noviembre '23
+663
en 12 canales
Get PRO
octubre '23
+656
en 8 canales
Get PRO
septiembre '23
+538
en 0 canales
Fecha
Crecimiento de Suscriptores
Menciones
Canales
15 septiembre0
14 septiembre0
13 septiembre0
12 septiembre+1
11 septiembre+1
10 septiembre+1
09 septiembre0
08 septiembre0
07 septiembre+1
06 septiembre+1
05 septiembre+2
04 septiembre0
03 septiembre+1
02 septiembre+1
01 septiembre+2
Publicaciones del Canal
Метод Arrays.fill() для инициализации массива Класс java.util.Arrays имеет несколько методов с именем fill(), которые принимают разные типы аргументов и заполняют весь массив одним и тем же значением:
long array[] = new long[5];
Arrays.fill(array, 30);
У метода также есть несколько альтернатив, которые устанавливают диапазон массива в определенное значение:
int array[] = new int[5];
Arrays.fill(array, 0, 3, -50);
Обратите внимание, что метод принимает массив, индекс первого элемента, индекс последнего элемента (не включительно) и значение.

2
🔴 Тестовый собес с Java-разработчиком уже завтра! [+ разбор 50 сложных вопросов в подарок ] 16 сентября (уже завтра!) в 19:0
🔴 Тестовый собес с Java-разработчиком уже завтра!  [+ разбор 50 сложных вопросов в подарок ] 16 сентября (уже завтра!) в 19:00 по мск приходи онлайн, чтобы посмотреть на настоящее интервью на Middle Java-разработчика! Собеседование проведёт Виктор Анохин — Senior из Wildberries, ех-Билайн Как это будет: 📂 Виктор задаст разработчику вопросы и задачи, которые могут спросить на реальном собесе 📂 После каждого ответа респондента ты услышишь подробный комментарий от ментора и поймёшь, чего на самом деле ожидает собеседующий на интервью 📂 В конце сможешь задать любой вопрос Виктору и получить на него развёрнутый ответ Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы И ты можешь посмотреть его бесплатно 🔥 Только завтра, в прямом эфире! 🎁 Подарок для всех, кто зарегается на веб — файл с ОТВЕТАМИ НА 50 СЛОЖНЫХ ВОПРОСОВ с Java-собеседований 🔥 Переходи в бот, чтобы попасть на эфир и забрать подарок 👉 @shortcut_sh_bot Реклама. О рекламодателе.
413
3
⌨️ Чем абстрактный класс отличается от интерфейса? В каких случаях следует использовать абстрактный класс, а в каких интерфейс? В Java абстрактный класс и интерфейс представляют два различных механизма для достижения абстракции и обеспечения множественного наследования. Вот основные различия между ними: 1️⃣ Абстрактный класс (Abstract Class): 👉 Может содержать как абстрактные методы (методы без тела), так и обычные методы с реализацией. 👉 Может иметь переменные экземпляра (поля). 👉 Может содержать конструкторы. 👉 Поддерживает одиночное наследование: подкласс можно наследовать только от одного абстрактного класса. abstract class Animal { String name; abstract void makeSound(); void eat() { System.out.println(name + " is eating."); } } 2️⃣ Интерфейс (Interface): 👉 Содержит только абстрактные методы (в Java 8 и выше может содержать методы с реализацией, помеченные ключевым словом default). 👉 Не может иметь переменных экземпляра, кроме переменных, объявленных как static final. 👉 Не содержит конструкторов. 👉 Поддерживает множественное наследование: класс может реализовывать несколько интерфейсов. interface Animal { void makeSound(); void eat(); } Когда использовать: 👉 Используйте абстрактные классы, когда у вас есть общая реализация для нескольких классов и вы хотите предоставить базовый функционал. 👉 Используйте интерфейсы, когда вам нужна поддержка множественного наследования, или когда классы, возможно, уже наследуют от других классов. Обычно считается хорошей практикой использовать интерфейсы для определения контракта и абстрактные классы для предоставления базовой реализации. В Java 8 и более новых версиях с появлением интерфейсов с методами по умолчанию (default methods), различия стали менее явными, и выбор может зависеть от конкретной ситуации.
492
4
🎸 Приглашаем на Java Rock Star Meetup Самая ламповая встреча Java-коммьюнити состоится уже в ближайшую пятницу. Вместе с кру
🎸 Приглашаем на Java Rock Star Meetup Самая ламповая встреча Java-коммьюнити состоится уже в ближайшую пятницу. Вместе с крутыми спикерами будем копаться под капотом JVM, холиварить и общаться в неформальной атмосфере. 🗓 18 сентября, 18:00, Москва, Лофт Casa Picassa на Бауманской. Что в программе? ⚙️ Иван Углянский, эксперт по JVM и компиляторам, расскажет о Project Valhalla: зачем нужны Java value-типы и почему новый подход наконец даёт надежду довести многострадальный проект до финиша. 🤖 Максим Козлов, сооснователь и CTO GitFlic, разберет, как в агентном SDLC сохранить связь между требованиями, кодом и реальным результатом. Участие бесплатное, нужна только регистрация. Присоединяйся к рок-звёздам Java! Реклама. АО "АКСИОМ". ИНН 7838124039.
429
5
Методы и конструкторы в enum Перечисления (enum) — это классы Java, определяющие наборы констант. Самый простой enum выглядит так: public enum Vehicle { CAR, BUS, BICYCLE, SCOOTER } Но на самом деле, enum в Java обладают гораздо более широким функционалом. Они поддерживают поля, методы, интерфейсы и т.д. Они также Comparable и Serializable и могут имплементировать все методы объекта. Для наглядности давайте создадим enum Animal и присвоим каждому элементу цвет: public enum Animal { DOG("black"), CAT("white"), RAT("gray"); private final String color; Animal(String color){ this.color = color; } public String getColor(){ return color; } } Теперь мы можем выполнить перебор элементов массива с помощью статического метода values(): public class Main { public static void main(String[] args) { for (Animal a : Animal.values()) { System.out.println(a.name() + " - " + a.getColor()); } } } Мы получим следующий результат: DOG - black CAT - white RAT - gray Каждой константе можно присвоить разное поведение при выполнении определенного метода. Например, можно сделать основной метод абстрактным и переопределить его в каждой константе: public enum Operation { PLUS { double evaluate(double x, double y) { return x + y; } }, MINUS { double evaluate(double x, double y) { return x - y; } }, abstract double evaluate(double x, double y); } Всё это обеспечивает удобную работу с перечислениями в Java.
536
6
JSON – невероятно удобный и полезный формат для хранения и обмена данными. Java полностью поддерживает его. Сериализовать данные можно так: JSONObject author = new JSONObject(); author.put("name", "J. K. Rowling"); author.put("numberOfBooks", 22); JSONArray books = new JSONArray(); books.put("Harry Potter and the Philosopher's Stone"); books.put("Harry Potter and the Chamber of Secrets"); books.put("Harry Potter and the Prisoner of Azkaban"); author.put("books", books); System.out.print(author); Получится вот такая JSON-строка: {"books":["Harry Potter and the Philosopher's Stone","Harry Potter and the Chamber of Secrets","Harry Potter and the Prisoner of Azkaban"],"name":"J. K. Rowling","numberOfBooks":22} Десериализация на Java выглядит примерно так: JSONObject author = new JSONObject(serializedString); System.out.println("name: " + author.get("name")); System.out.println("numberOfBooks: " + author.get("numberOfBooks")); JSONArray books = (JSONArray) author.get("books"); Iterator<Object> i = books.iterator(); System.out.println("books:"); while (i.hasNext()) { System.out.println(i.next()); } Нужно добавить зависимость: <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20231013</version> </dependency>
875
7
⌨️ Фишка: Создание итератора для пользовательского класса. Код: import java.util.Iterator; public class CustomClass implements Iterable<String> { private String[] elements; public CustomClass(String[] elements) { this.elements = elements; } @Override public Iterator<String> iterator() { return new CustomIterator(); } private class CustomIterator implements Iterator<String> { private int index = 0; @Override public boolean hasNext() { return index < elements.length; } @Override public String next() { if (this.hasNext()) { return elements[index++]; } else { throw new NoSuchElementException(); } } } public static void main(String[] args) { String[] arr = {"one", "two", "three"}; CustomClass customClass = new CustomClass(arr); for (String element : customClass) { System.out.println(element); } } } 💁‍♂️ Этот код позволяет создать итератор для пользовательского класса CustomClass. Итератор позволяет перебирать элементы массива elements и использовать их в цикле for-each.
1 061
8
🔴 Завтра тестовое собеседование с Java-разработчиком 2 сентября(уже завтра!) в 19:00 по мск приходи онлайн на открытое собес
🔴 Завтра тестовое собеседование с Java-разработчиком 2 сентября(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика. Как это будет: 📂 Сергей Чамкин, старший разработчик из Uzum, ex-WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Cергей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Сергею Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot Реклама. О рекламодателе.
441
9
⌨️ Параллельное выполнение задач с использованием ExecutorService ExecutorService - это интерфейс, который предоставляет удобный способ для управления параллельным выполнением задач. Он предоставляет пул потоков для выполнения задач и управляет их жизненным циклом: import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Main { public static void main(String[] args) { // Создание пула потоков ExecutorService executor = Executors.newFixedThreadPool(5); // Подача задач на выполнение for (int i = 0; i < 10; i++) { executor.execute(new Task(i)); } // Остановка пула потоков после выполнения задач executor.shutdown(); } static class Task implements Runnable { private int taskId; public Task(int taskId) { this.taskId = taskId; } @Override public void run() { System.out.println("Выполнение задачи " + taskId + " в потоке " + Thread.currentThread().getName()); } } } 🧑‍💻Этот код создает пул из 5 потоков и подает на выполнение 10 задач. Каждая задача выводит свой идентификатор и имя потока, в котором она выполняется. После выполнения всех задач пул потоков останавливается.
985
10
АЙТИШНИКИ БЕСПЛАТНОЕ ОБУЧЕНИЕ Проект «Terminal» стал крупнейшей библиотекой бесплатного образования. В одном канале собраны к
АЙТИШНИКИ БЕСПЛАТНОЕ ОБУЧЕНИЕ Проект «Terminal» стал крупнейшей библиотекой бесплатного образования. В одном канале собраны курсы, книги, полезные инструменты и практические тренажёры для всех разработчиков: • Практические курсы и задания • Книги и статьи известных авторов • Полезные инструменты и ресурсы • IT-новости и инсайды Обучение по всем направлениям: SQL, Python, ML, Frontend, PHP, C++, Go, Git, Linux, QA, Java, Vibe-coding, InfoSec и др. ⌨️ подписаться
548
11
⌨️ Метод для глубокого копирования объектов. Это часто используется, когда нужно создать копию объекта, сохраняя его данные, но не связи с другими объектами. 📌 Вот пример метода для глубокого копирования: import java.io.*; public class DeepCopyExample { public static void main(String[] args) { Person person = new Person("John", 30); Person deepCopy = deepCopy(person); System.out.println("Original: " + person.getName() + ", " + person.getAge()); System.out.println("Deep copy: " + deepCopy.getName() + ", " + deepCopy.getAge()); } public static <T extends Serializable> T deepCopy(T object) { try { ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteOutputStream); objectOutputStream.writeObject(object); ByteArrayInputStream byteInputStream = new ByteArrayInputStream(byteOutputStream.toByteArray()); ObjectInputStream objectInputStream = new ObjectInputStream(byteInputStream); T copy = (T) objectInputStream.readObject(); return copy; } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); return null; } } } class Person implements Serializable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } ✅ В этом примере мы создаем класс Person, который реализует интерфейс Serializable, чтобы объекты этого класса можно было сериализовать и десериализовать. Затем мы создаем метод deepCopy, который принимает объект и возвращает его глубокую копию. Мы используем ByteArrayOutputStream и ObjectOutputStream, чтобы записать объект в байтовый массив, а затем ByteArrayInputStream и ObjectInputStream, чтобы прочитать копию объекта из массива. В методе main мы создаем объект Person, затем создаем его глубокую копию с помощью метода deepCopy и выводим на экран значения оригинального и скопированного объекта.
921
12
На Stepik запустили годный курс по «Troubleshooting Docker и Kubernetes: поиск и устранение проблем» В программе только важны
На Stepik запустили годный курс по «Troubleshooting Docker и Kubernetes: поиск и устранение проблем» В программе только важные аспекты: — troubleshooting Docker и образов — диагностика сетевых проблем — настройка readiness/liveness probes — отладка pod’ов, деплоев и ingress — анализ логов контейнеров и кластера — разбор ошибок CrashLoopBackOff, OOMKilled, ImagePullBackOff и других Собеседования на DevOps/SRE сейчас всё чаще строятся вокруг реальных инцидентов. Данный курс фокусируется именно на таких сценариях и помогает в подготовке к практическим вопросам 48 часов доступен со скидкой 25% ↗️ Пройти курс на Stepik
558
13
⌨️ Использования анонимных классов: Анонимный класс - это класс без имени, который объявляется и создается внутри другого класса или метода. Он удобен, когда требуется определить класс, который будет использоваться только один раз, и нет необходимости создавать отдельный класс. public class Main { interface Greeting { void sayHello(); } public static void main(String[] args) { Greeting greeting = new Greeting() { // объявление и создание анонимного класса @Override public void sayHello() { System.out.println("Привет, мир!"); } }; greeting.sayHello(); // вызов метода sayHello у анонимного класса } } ✅В данном примере мы определили интерфейс Greeting, содержащий метод sayHello(). Затем, в методе main(), мы создали анонимный класс, реализующий интерфейс Greeting и переопределивший метод sayHello(). Затем мы вызываем метод sayHello() у объекта анонимного класса. 📝Таким образом, анонимные классы предоставляют удобный способ создания и использования классов "на лету", что может быть полезно, когда требуется определить классы, которые будут использоваться только в одном месте программы.
776
14
Вайбкодим «Полный путь разработки AI-агентов: от MCP до Agentic RAG» Образовательная программа на Stepik по разработке соврем
Вайбкодим «Полный путь разработки AI-агентов: от MCP до Agentic RAG» Образовательная программа на Stepik по разработке современных AI-агентов. Начинаем с Model Context Protocol: создаём MCP-серверы, подключаем инструменты и внешние API, а затем переходим к разработке Agentic RAG-систем с памятью, рассуждением, поиском знаний и оценкой качества. • Model Context Protocol и MCP-серверы • LangChain, LangGraph, LlamaIndex • API, инструменты, ресурсы и промпты • Классический RAG → Agentic RAG • ReAct, память и планирование • Графы знаний и свои инструменты • Трассировка и подготовка к production Успей, скидка 20% действует 48 часов ↗️ Начать обучение на Stepik
569
15
⌨️ Использование класса java.time.Duration для рассчета разницы во времени между двумя моментами. Код для расчета разницы во времени: import java.time.Duration; import java.time.LocalDateTime; public class TimeDifferenceCalculator { public static void main(String[] args) { LocalDateTime startTime = LocalDateTime.of(2022, 1, 1, 10, 0, 0); LocalDateTime endTime = LocalDateTime.of(2022, 1, 1, 12, 30, 0); Duration duration = Duration.between(startTime, endTime); long hours = duration.toHours(); long minutes = duration.toMinutes() % 60; long seconds = duration.getSeconds() % 60; System.out.println("Time difference: " + hours + " hours, " + minutes + " minutes, " + seconds + " seconds."); } } В этом примере мы создаем два объекта LocalDateTime - startTime и endTime, представляющие начальное и конечное время соответственно. Затем мы используем метод Duration.between() для расчета разницы во времени между startTime и endTime. Далее, мы используем методы toHours(), toMinutes() и getSeconds() для получения часов, минут и секунд в полученной разнице времени. Наконец, мы выводим результаты на экран. Эта фишка полезна для рассчета временных интервалов, например, для измерения времени выполнения определенной операции или анализа времени работы программы.
789
16
📣 Разместите рекламу в этом канале — её увидят Аудитория Telegram остаётся активной, что бы ни говорили. Индекс читаемости э
📣 Разместите рекламу в этом канале — её увидят Аудитория Telegram остаётся активной, что бы ни говорили. Индекс читаемости это подтверждает: охваты каналов по тематикам держатся, люди продолжают читать. Реклама в Telegram — это законно: ФАС в 2026 году официально подтвердил, что она разрешена. 👉 Заказать размещение в этом канале можно через Telega.in — с маркировкой и закрывающими документами, за пару минут. Форматы и цены — по ссылке.
455
17
⌨️ Использование аннотации @FunctionalInterface для определения функциональных интерфейсов. Функциональные интерфейсы - это интерфейсы, которые содержат только один абстрактный метод и могут использоваться как типы данных для лямбда-выражений или методов высшего порядка. При использовании аннотации @FunctionalInterface вы указываете компилятору, что этот интерфейс должен содержать только один абстрактный метод, чтобы избежать возможных ошибок при использовании лямбда-выражений или ссылок на методы. Ниже приведен пример кода, демонстрирующий использование аннотации @FunctionalInterface: @FunctionalInterface interface Calculator { int calculate(int a, int b); } public class FunctionalInterfaceExample { public static void main(String[] args) { Calculator addition = (a, b) -> a + b; System.out.println("Результат сложения: " + addition.calculate(5, 3)); Calculator subtraction = (a, b) -> a - b; System.out.println("Результат вычитания: " + subtraction.calculate(5, 3)); } } В этом примере мы создаем функциональный интерфейс Calculator, содержащий метод calculate. Затем мы создаем экземпляры интерфейса, используя лямбда-выражения, и вызываем метод calculate для выполнения операций сложения и вычитания. Применение аннотации @FunctionalInterface помогает нам убедиться, что в интерфейсе действительно определен только один абстрактный метод, и предотвращает случайные ошибки при использовании функциональных интерфейсов в нашем коде.
1 158
18
Самое интересное в российском PostgreSQL этой осенью! Регистрируйтесь на бесплатную конференцию по PostgreSQL и технологиям С
Самое интересное в российском PostgreSQL этой осенью! Регистрируйтесь на бесплатную конференцию по PostgreSQL и технологиям СУБД — Tantor JAM 2026. 10 сентября, Москва. 📅 Что будет на конференции: ✅ AI-first мониторинг СУБД: что уже сегодня можно передать ИИ-агентам и как меняется профессия DBA; ✅ аналитика и HTAP без внешней обвязки, внутри Postgres; ✅ как за два года изменился PostgreSQL для 1С; ✅ защита данных в Tantor Postgres. Как всегда — технические доклады, живое общение с разработчиками и архитекторами, обмен опытом, а еще — вечерняя программа в честь пятилетия «Тантор Лабс». Участие бесплатное. 10.09.2026, Москва Зарегистрироваться #реклама 16+ tantorlabs.ru О рекламодателе
509
19
⌨️ Использование методов default и static в интерфейсах. Эти методы позволяют добавлять конкретные реализации в интерфейсы, что делает их более гибкими и позволяет избежать некоторых проблем множественного наследования. Пример с default методом в интерфейсе: interface Greeter { void greet(); // Default метод в интерфейсе default void greetWithExclamation() { System.out.println("Привет, мир!"); } } class EnglishGreeter implements Greeter { public void greet() { System.out.println("Hello, World!"); } } class RussianGreeter implements Greeter { public void greet() { System.out.println("Привет, мир!"); } // Переопределение default метода @Override public void greetWithExclamation() { System.out.println("Привет, мир!!!"); } } public class InterfaceDefaultMethodExample { public static void main(String[] args) { Greeter englishGreeter = new EnglishGreeter(); englishGreeter.greet(); // Вызовет: Hello, World! englishGreeter.greetWithExclamation(); // Вызовет: Привет, мир! Greeter russianGreeter = new RussianGreeter(); russianGreeter.greet(); // Вызовет: Привет, мир! russianGreeter.greetWithExclamation(); // Вызовет: Привет, мир!!! } } Пример со static методом в интерфейсе: interface Calculator { static int add(int a, int b) { return a + b; } static int subtract(int a, int b) { return a - b; } } public class InterfaceStaticMethodExample { public static void main(String[] args) { // Нет необходимости создавать экземпляр интерфейса int sum = Calculator.add(5, 3); // 8 int difference = Calculator.subtract(5, 3); // 2 System.out.println("Сумма: " + sum + ", Разница: " + difference); } } В этих примерах методы default и static в интерфейсе предоставляют замечательные возможности для разработки. Методы default позволяют добавить новые функции в интерфейсы без нарушения контракта с существующими реализациями. static методы в интерфейсах позволяют определять вспомогательные методы, которые могут быть вызваны без объекта интерфейса, предоставляя большую гибкость и удобство в использовании.
970
20
Решайте задачи и готовьтесь к техсекции на стажировку А ты сможешь решить алгоритмическую задачу за час и без подсказок? Янде
Решайте задачи и готовьтесь к техсекции на стажировку А ты сможешь решить алгоритмическую задачу за час и без подсказок? Яндекс проводит бесплатные тренировки по алгоритмам для тех, кто хочет систематизировать знания, прокачать решение задач и подготовиться к техническому собеседованию. -Короткие видеоуроки -Практические задачи -Регулярные соревнования -Решение задач на время -Рейтинг и награды -Возможность получить сертификат Мы тренируем не только знание алгоритмов, но и умение применять их тогда, когда рядом нет подсказок. Проверь свои алгоритмические навыки и прокачай слабые места. Регистрируйся на бесплатные тренировки! Записаться онлайн #реклама 16+ yandex.ru О рекламодателе
532