Java | Фишки и трюки
7.21K subscribers
182 photos
29 videos
6 files
40 links
Java: примеры кода, интересные фишки и полезные трюки

Купить рекламу: https://telega.in/c/java_tips_and_tricks

✍️По всем вопросам: @Pascal4eg
Download Telegram
🔁 Рекурсия — определение, описание, изображение какого-либо объекта или процесса внутри самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя.

В программировании рекурсия — вызов функции (процедуры) из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная или косвенная рекурсия).

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

Методы в Java работают с использованием стека. Каждый раз, когда вызывается метод, он помещается на вершину стека и удаляется после выполнения. Если вложенные вызовы методов происходят слишком глубоко, стек может переполниться, и тогда Java выбрасывает StackOverflowError.

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

Аргумент JVM -Xss задаёт размер стэка. Например, -Xss2048k задает размер стека 2 МБ.
🔥5🤩2👍1
Programmers while reviewing the codes
😁17😱1
🍝 Спагетти-код: когда разработка становится беспорядком

Спагетти-код – это одна из самых неприятных "болезней" в мире программирования. Этот термин используется для описания плохо организованного и труднопонимаемого кода, который напоминает спагетти – пасту, перепутанную в неразгадываемую массу.

Почему спагетти-код возникает?

1⃣ Недостаток планирования: Недостаточное предварительное проектирование приложения может привести к хаотичной разработке, когда каждая часть кода создается независимо от других.

2⃣ Отсутствие структуры: Если разработчики не следят за структурой проекта, код может быстро превратиться в беспорядок.

3⃣ Отсутствие документации: Неадекватно задокументированный код может сделать его понимание и редактирование настоящим испытанием.

4⃣ Недостаток опыта: Новички в программировании могут создавать спагетти-код из-за отсутствия опыта и знаний о лучших практиках.

Последствия спагетти-кода

1⃣ Сложность поддержки и обновления: Чем хаотичнее код, тем сложнее вносить изменения и устранять ошибки.

2⃣ Потеря производительности: Неэффективный код может значительно снижать производительность приложения.

3⃣ Затраты на ресурсы: Поддержание спагетти-кода требует больше времени и ресурсов, что увеличивает расходы.

4⃣ Ухудшение командной работы: Спагетти-код затрудняет совместную разработку, так как он сложночитаем и малопонятен для других разработчиков.

Борьба со спагетти-кодом

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

2⃣ Проводите рефакторинг: Периодически пересматривайте код, улучшайте его структуру и читаемость.

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

4⃣ Пишите тесты: Тестирование помогает выявить ошибки и обеспечить стабильность приложения.

5⃣ Обучайтесь и совершенствуйтесь: Непрерывное обучение и улучшение навыков помогут избежать создания спагетти-кода.

В итоге, избегайте спагетти-кода, стараясь писать чистый, структурированный и хорошо документированный код. Это сэкономит вам время, нервы и ресурсы в будущем и сделает вашу разработку более приятной и продуктивной. 🚀

#плохойкод
👍6🔥2🤯1😱1
Библиотека Lombok

Разрабатывая на Java, мы сталкиваемся с множеством рутинных операций, связанных с написанием геттеров, сеттеров, equals, hashCode и других стандартных методов. Есть способ существенно упростить этот процесс. В этом нам поможет библиотека Lombok!

Lombok – это основанная на аннотациях библиотека Java, позволяющая сократить шаблонный код. В Lombok предлагаются различные аннотации, цель которых – заменить ненужный повторяющийся код, писать который утомительно. Например, Lombok избавит вас от написания безаргументных конструкторов, методов toString(), equals() и hashCode(), для этого нужно просто добавить несколько аннотаций. Плюс, эта библиотека подключается прямо к вашей IDE, поэтому работа воспринимается так, словно вы написали весь шаблонный код сами.

Преимущества Lombok

Уменьшение кода: С Lombok вы можете создавать классы с минимальным количеством шаблонного кода. Это уменьшает вероятность ошибок и сокращает объем написанного текста.

Читаемость: Уменьшение количества шума в коде делает его более читаемым и понятным.

Производительность: Lombok ускоряет процесс разработки, так как не нужно тратить время на написание рутиных методов.

Совместимость: Lombok совместим с различными интегрированными средами разработки (IDE) и средами сборки проектов.

Аннотация @Data генерирует геттеры, сеттеры, toString(), equals() и hashCode(), что позволяет вам сосредотачиваться на бизнес-логике вашего приложения, а не на шаблонном коде.

Если вы хотите упростить разработку и сэкономить массу времени и усилий, то Lombok - отличный инструмент для вас. Он помогает уменьшить рутиный код и улучшить читаемость вашего проекта. Попробуйте Lombok в своем следующем проекте и оцените его удивительные преимущества!
👍15🔥3🤩1😍1
Множественное присваивание

Операция присваивания работает следующим образом: сначала вычисляется значение выражения в правой части, потом это значение присваивается переменной, которая размещается в левой части от знака ‘=‘.

Операция присваивания может иметь вид цепочки:
переменная1 = переменная2 = выражение;

В этом случае алгоритм выполнения следующий:
- сначала вычисляется значение выражения;
- результат вычисления выражения присваивается в переменную2;
- результат вычисления выражения присваивается в переменную1.

Цепочка (последовательность) из операций присваивания может содержать произвольное количество присваиваний.
👍7🤩1🍾1
Тернарный оператор (также известный как условный оператор) - это сокращенная форма записи условного выражения.

Он имеет следующий синтаксис:
условие ? значение_если_истина : значение_если_ложь;

В данном операторе условие - это выражение, которое вычисляется как true или false, и в зависимости от его значения возвращается либо значение_если_истина, либо значение_если_ложь.

Тернарный оператор часто используется для компактного присвоения значений переменным на основе условий. Пример:
int max = (a > b) ? a : b;

Такой оператор удобен для упрощения кода и уменьшения его объема, когда необходимо выбирать между двумя значениями в зависимости от условия.
😁7👍2🙏1🤣1
🤣15😁52🥱1
Константы в Java

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

Константа в языке Java реализована комбинацией двух ключевых слов: static и final.

static означает, что значение принадлежит классу. А final разрешает присвоить переменной значение только один раз.
👍11👨‍💻2👎1🤔1
SerialVersionUID - это private static final поле типа long класса который реализует интерфейс Serializable.

Во время сериализации, если мы не объявляем SerialVersionUID в нашем классе, среда выполнения Java создает номер версии для класса, так что она может десереализировать его позже. Если во время десериализации, SerialVersionUID не соответствует, то процесс завершится с исключением InvalidClassException.

Процесс создания номера версии Jav'ой чувствителен ко многим метаданным класса включая количество полей, тип полей, модификаторы доступа полей, интерфейсов, которые реализованы в классе и прочего.

Лучшая практика в сериализации – это явно объявить SerialVersionUID, чтобы избежать любых проблем при де-сериализации, особенно если вы работаете с клиент-серверным приложением, которое опирается на сериализованные данные, например, RMI.

Под сериализацией здесь понимается только стандартный механизм Java (ObjectInputStream, ObjectOutputStream).
👍6🔥2
⌨️ JTwig - это библиотека шаблонизации для языка программирования Java. Она предоставляет удобный способ создания и обработки шаблонов для генерации текстового или HTML-кода. JTwig особенно полезен, когда вам нужно создавать динамические страницы в веб-приложениях, генерировать отчеты, email-рассылки или форматировать текстовый вывод.

Основные особенности JTwig включают:

1⃣ Простота использования: JTwig обладает чистым и интуитивно понятным синтаксисом, который напоминает язык шаблонов, такой как Mustache или Twig. Это делает создание и редактирование шаблонов достаточно простым даже для новичков.

2⃣ Поддержка переменных и условных операторов: JTwig позволяет вам вставлять переменные, выполнять условные операции и циклы в ваших шаблонах, что делает их более динамичными.

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

4⃣ Интеграция: JTwig легко интегрируется с различными фреймворками и библиотеками Java, такими как Spring Framework, что делает его популярным выбором для создания веб-приложений.

JTwig предоставляет мощный и удобный способ управления шаблонами в ваших Java-приложениях, и его простота использования делает его привлекательным выбором для создания динамичного контента.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8👏2
⌨️ Java NIO (New I/O) — это набор функциональных возможностей для работы с вводом и выводом данных (I/O), представленный в Java 1.4. Этот набор функций предоставляет более эффективный и мощный способ обработки операций ввода-вывода по сравнению с традиционным I/O API, известным как Java IO (или Java I/O).

Вот основные компоненты Java NIO:

Буферы (Buffers): Основная идея в Java NIO - работа с данными через буферы. Буферы - это области памяти, которые используются для временного хранения данных перед и после их обработки. Java NIO предоставляет разные типы буферов, такие как ByteBuffer, CharBuffer, IntBuffer и другие, каждый из которых предназначен для работы с определенными типами данных.

Каналы (Channels): Каналы представляют собой абстракцию для работы с источниками данных и целевыми местами данных. Каналы могут быть использованы для чтения из файлов, записи в файлы, работы с сетевыми соединениями и т. д. Основные классы для каналов включают FileChannel, SocketChannel, ServerSocketChannel и DatagramChannel.

Селекторы (Selectors): Селекторы предоставляют механизм для мультиплексирования операций ввода-вывода на нескольких каналах. Селекторы позволяют одному потоку обрабатывать несколько каналов одновременно, что делает Java NIO особенно полезным для серверных приложений, обслуживающих множество клиентов.

Преимущества Java NIO:

1⃣ Эффективность: Java NIO может быть более эффективным, чем традиционное Java IO, особенно при работе с большими объемами данных.

2⃣ Мультиплексирование: Селекторы позволяют одному потоку обрабатывать несколько каналов, что полезно для серверных приложений.

3⃣ Неблокирующий режим: Позволяет избегать блокировки потоков, что может увеличить производительность.

Недостатки Java NIO:

1⃣ Сложность: Java NIO может быть сложным в использовании и требует хорошего понимания его концепций.

2⃣ Не всегда подходит: Не все задачи требуют такого уровня контроля, какой предоставляет Java NIO.

📌 Java NIO является мощным инструментом для разработки высокоэффективных и масштабируемых приложений, особенно в области сетевого программирования и обработки больших объемов данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7😁2
⌨️ Jetty - это встраиваемый веб-сервер и контейнер сервлетов, разрабатываемый Eclipse Foundation. Jetty предоставляет компактное и легковесное решение для обработки HTTP-запросов и запуска веб-приложений в среде Java. Он широко используется в индустрии веб-разработки и часто встречается в различных проектах и приложениях, где требуется встроенный сервер.

Вот несколько ключевых особенностей Jetty:

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

2⃣ Встраиваемость: Jetty может быть легко встроен в приложение Java, что позволяет запускать веб-приложения без необходимости настройки и развертывания отдельного сервера. Это особенно удобно для микросервисных архитектур и встраивания сервера в приложение.

3⃣ Поддержка последних стандартов: Jetty активно разрабатывается и поддерживается, что означает, что он всегда совместим с последними версиями спецификации Java Servlet API и HTTP.

4⃣ Модульность: Jetty состоит из набора модулей, которые можно активировать или деактивировать в зависимости от потребностей приложения. Это позволяет оптимизировать использование ресурсов и минимизировать размер дистрибутива.

5⃣ Поддержка асинхронных операций: Jetty поддерживает асинхронные операции, что позволяет обрабатывать большое количество одновременных запросов без блокирования потоков.

6⃣ Интеграция с различными технологиями: Jetty интегрируется с различными фреймворками и технологиями, такими как WebSocket, HTTP/2, JMX, и многими другими.

📌 Jetty является популярным выбором для веб-приложений в Java-среде благодаря своей производительности, гибкости и надежности. Он используется во множестве проектов, начиная от небольших приложений и заканчивая крупными веб-сервисами.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2
😁18🤣53
В Stream API используйте filter() перед map(), чтобы избежать ненужной обработки.

Если у вас есть поток, который может содержать большое количество элементов, не соответствующих вашим критериям, используйте filter() перед map(), чтобы избежать ненужной обработки. Это может улучшить производительность вашего кода.
👍14🔥3
Guava: Google Core Libraries for Java

Guava — это набор общих библиотек Java от Google, который включает в себя новые типы коллекций (такие как multimap и multiset), неизменяемые коллекции, библиотеку графов и утилиты для параллелизма, ввода-вывода, хеширования, примитивов, строк и многого другого! Он широко используется в большинстве проектов Java в Google, а также во многих других компаниях.
👍82
⌨️ Text Blocks (Текстовые блоки)

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

Мы можем использовать текстовые блоки, объявив строку с """ (три двойные кавычки).

Это, безусловно, самый удобный способ объявления многострочной строки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14👨‍💻2
Switch-выражения

Чтобы получить значение из switch-выражения, раньше приходилось создавать отдельную переменную и постоянно использовать break;.

В Java 14 появился новый формат записи, который помогает получать результат выбора и записывать выражение компактнее.

Если перечислены все возможные варианты, ветка default теперь не нужна.

Если в значение (case) нужно записать выражение, его заключают в фигурные скобки {} и для возврата значения используют ключевое слово yield.
👍10💯41
⌨️ try-with-resources

Благодаря конструкции "try-with-resources" вы можете элегантно и безопасно управлять ресурсами, такими как потоки, сокеты или другие объекты, требующие явного закрытия после использования. Это улучшение ввода-вывода позволяет автоматически закрывать открытые ресурсы после завершения блока try.

В блоке try может быть открыто несколько ресурсов и соответственно объявлено несколько переменных указывающих на них. Классы этих переменных должны реализовать интерфейс AutoCloseable.

После завершения блока try, даже в случае исключения, все эти ресурсы будут автоматически закрыты. Это существенно упрощает управление ресурсами и снижает вероятность утечек ресурсов.

try-with-resources доступен начиная с Java 7 и предоставляет удобный способ для обработки ресурсов и исключений, связанных с ними.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤓1🙈1
Netty - это мощный и высокопроизводительный фреймворк для разработки сетевых приложений на языке Java. Он предоставляет асинхронное и событийно-ориентированное программирование для создания масштабируемых сетевых приложений, таких как серверы, прокси, клиенты и другие.

Вот некоторые ключевые особенности Netty:

1⃣ Асинхронная и событийно-ориентированная модель: Netty предоставляет асинхронные API, которые позволяют обрабатывать большое количество одновременных соединений без блокирования. Событийно-ориентированный подход позволяет легко реагировать на различные события, такие как подключение клиента, чтение данных или отправка данных.

2⃣ Мультиплексирование: Netty поддерживает мультиплексирование, что позволяет обрабатывать множество соединений на одном потоке, что повышает производительность.

3⃣ Поддержка различных протоколов: Netty имеет гибкую архитектуру и поддерживает различные протоколы, такие как HTTP, WebSocket, TCP, UDP, SSL и многие другие.

4⃣ Высокая производительность: Netty разработан с акцентом на производительность и масштабируемость. Он широко используется в крупных сетевых приложениях, включая веб-серверы, чаты, игры и финансовые приложения.

5⃣ Простота использования: Несмотря на высокую производительность, Netty предоставляет чистый и интуитивно понятный API, который облегчает создание сетевых приложений.

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

7⃣ Сообщество и документация: Netty имеет активное сообщество и обширную документацию, что делает его доступным для разработчиков и обеспечивает поддержку и обновления.

Netty является отличным выбором для разработчиков, которые хотят создавать высокопроизводительные и надежные сетевые приложения на платформе Java.
👍7😁21
😁16🤣7