Java Learning
18.6K subscribers
1.62K photos
1 video
3 files
1K links
№ 5079899194

Обучающий канал по Java

Ссылка для друга - https://t.iss.one/+ZEYYht6-46w5MDM6

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
⚙️ Перегрузка

Перегрузка методов происходит, когда в одном классе несколько методов имеют одинаковое имя, но разные параметры.

✔️ Это разрешается на этапе компиляции.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🎄2
⚙️ Использование PhantomReference для управления памятью в Java

PhantomReference в Java предоставляет возможность отслеживать объекты, которые находятся в состоянии сборки мусора.

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

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
➡️ Расширение функциональности метода toString() с использованием рефлексии

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

✔️ С ее помощью можно расширить функциональность метода toString(), чтобы он автоматически выводил значения всех полей объекта, что может быть полезно для отладки и логирования.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
⚙️ Динамическое изменение поведения объектов с использованием прокси

В Java можно использовать прокси для динамического изменения поведения объектов во время выполнения.

🗣️ Это может быть полезно для внедрения кода, такого как логирование, безопасность или кэширование, без изменения исходного кода классов.


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53
✔️ Создаем объекты лишь тогда, когда нужно

Пожалуй, создание объектов является одной из наиболее затратных операций в Java.

🗣️ Хорошая практика — создавать их лишь тогда, когда они действительно необходимы.


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
😱12👍6🤔5😁2🎄1
Что будет выведено при выполнении кода?

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
👍13🔥1
Что будет выведено при выполнении кода?

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Ответ:
Anonymous Quiz
47%
1
2%
2
39%
3
12%
Compilation error
👍21
⚙️ Deadlocks

Взаимная блокировка потоков (дэдлок) бывает по множеству причин, а полностью уберечься от них в Java 8 весьма сложно.

➡️ Зачастую, такое происходит, если один синхронизируемый объект ожидает ресурсов, а они заблокированы другим синхронизированным объектом.

✔️ Чтобы избежать deadlock, можно использовать один из следующих подходов:

Всегда захватывайте блокировки в одном и том же порядке во всех методах. Например, сначала lock1, затем lock2
Используйте ReentrantLock с таймаутом вместо synchronized, чтобы избежать бесконечного ожидания.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
➡️ Оптимизация производительности через уменьшение количества объектов с использованием intern() для строк

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

⚙️ Метод intern() позволяет сократить количество дубликатов строк, оптимизируя использование памяти, за счет хранения только одной копии каждой уникальной строки в пуле строк.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥2
Использование метода sun.misc.Unsafe для низкоуровневой работы с памятью в Java

Хотя использование sun.misc.Unsafe не рекомендуется и является небезопасным, он предоставляет уникальные возможности для работы с памятью на низком уровне, аналогично тому, как это делается в языках, таких как C или C++.

• sun.misc.Unsafe предоставляет методы для низкоуровневых операций с памятью, которые обычно недоступны в Java.
Доступ к Unsafe возможен только через рефлексию, так как он скрыт от обычных разработчиков.
Этот подход обычно используется в высокопроизводительных библиотеках и внутри JVM, но не рекомендуется для обычных приложений.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82
➡️ Использование MethodHandles для эффективного вызова методов в Java

MethodHandles предоставляют низкоуровневый доступ к методам, позволяя динамически вызывать их с минимальными накладными расходами.

🗣️ Этот подход может быть полезен для высокопроизводительных приложений, где отражение (reflection) слишком медленное.


MethodHandles.Lookup используется для поиска методов в классе. В примере мы находим метод substring класса String.

MethodHandle позволяет вызывать метод с минимальными накладными расходами по сравнению с традиционным отражением (reflection), что делает его более производительным.

В отличие от рефлексии, MethodHandles могут использоваться для более эффективного вызова методов, что полезно в динамических и высокопроизводительных приложениях.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Что будет выведено при выполнении кода?

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
➡️ Оптимизация работы с коллекциями с помощью метода removeIf

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

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤‍🔥1
➡️ Динамическое создание и выполнение метода в Java с использованием ASM

ASM позволяет динамически генерировать байт-код в Java. В этом примере создается класс с простым методом hello(), который выводит сообщение в консоль.

Создается класс HelloClass с методом hello().
Метод hello() динамически генерируется и выводит строку "Hello, ASM!" в консоль.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8😢3
⚠️ Использование @SuppressWarnings для безопасного подавления предупреждений

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

🗣️ Это может быть полезно, когда вы уверены в безопасности используемого кода и хотите избежать лишних предупреждений, особенно при работе со старым кодом или нестандартными конструкциями.


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
⚙️ Динамическое изменение поведения объектов с помощью InvocationHandler и Proxy

В Java можно динамически изменять поведение объектов, используя InvocationHandler и Proxy.

🗣️ Это полезно для создания прокси-объектов, которые могут оборачивать существующие объекты и добавлять новые функции, такие как логирование, кеширование или контроль доступа.


InvocationHandler позволяет перехватывать вызовы методов у прокси-объекта и добавлять дополнительное поведение, такое как логирование.

Использование Proxy позволяет динамически создавать новый объект, который ведет себя как реальный объект, но с добавленным поведением.

Этот подход позволяет добавлять новое поведение к существующим объектам без изменения их кода, что делает его мощным инструментом для реализации аспектно-ориентированного программирования (AOP).

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71