Java Guru πŸ€“
13.3K subscribers
884 photos
16 videos
745 links
Канал с вопросами ΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ с собСсСдований!

По сотрудничСству ΠΈ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ΅: @NadikaKir

Канал Π² ΠΏΠ΅Ρ€Π΅Ρ‡Π½Π΅ РКН: https://vk.cc/cJrSQZ

ΠœΡ‹ Π½Π° Π±ΠΈΡ€ΠΆΠ΅: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
Π—Π°Π΄Π°Ρ‡ΠΈ с собСсСдований: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, являСтся Π»ΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ поиска (middle)

β€” Как ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ поиска (BST)?

πŸ“Œ ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

- Π‘ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ поиска (BST) β€” это Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° всС значСния Π² Π»Π΅Π²ΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²Π΅ мСньшС значСния ΡƒΠ·Π»Π°, Π° всС значСния Π² ΠΏΡ€Π°Π²ΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²Π΅ большС.
- Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСкурсивный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с отслСТиваниСм допустимых Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°.
- Как ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΡƒΠ·Π»Π°Ρ… Π΄Π΅Ρ€Π΅Π²Π°?

РСализация с числами Π² ΡƒΠ·Π»Π°Ρ… Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ πŸ‘†

@javatasks #java
Please open Telegram to view this post
VIEW IN TELEGRAM
❀7πŸ‘3πŸ”₯2
Π§Π΅ΠΌ отличаСтся final finally finalize?

Π’Π΅ΠΌ, Ρ‡Ρ‚ΠΎ это Π΄Π°ΠΆΠ΅ синтаксичСски Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ. Как ΠΈ вопрос ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… Object, это способ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€.

finalize – ΠΌΠ΅Ρ‚ΠΎΠ΄-Ρ„ΠΈΠ½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΈΠ· Object.

final – ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ примСняСтся ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, полям, ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈ классам. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅ становится нСизмСняСмым ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π€ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ нСльзя ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² наслСдниках. Π€ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ класс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ наслСдников Π²ΠΎΠΎΠ±Ρ‰Π΅. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ API ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Π½Π°ΠΈΠΌΠ΅Π½ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ.

Когда Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ локальная пСрСмСнная внСшнСй области видимости, ΠΎΠ½Π° обязана Π±Ρ‹Ρ‚ΡŒ
effectively final. Π’ этом случаС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово final Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ всё Ρ€Π°Π²Π½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.

finally – Ρ‡Π°ΡΡ‚ΡŒ языковой конструкции try-catch-finally.

Π›ΡŽΠ±ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ· Π±Π»ΠΎΠΊΠ° try ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ исполнСниС Π² самый ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΅ΠΌΡƒ catch (ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ). Π­Ρ‚ΠΈΠΌ ΠΏΡ€ΠΎΠ΄ΠΈΠΊΡ‚ΠΎΠ²Π°Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈ catch Π² строгом порядкС, ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ-наслСдника, ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ. Π’ случаС multicatch Ρ‚ΠΎΡ‚ ΠΆΠ΅ порядок Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒΡΡ ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ catch.
Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΏΡ€ΠΎ порядок.

ПослС выполнится Π±Π»ΠΎΠΊ finally. ВыполняСтся ΠΎΠ½ Π² любом случаС, Π±Ρ‹Π»ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π’ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ использованиС – освобоТдСниС рСсурсов, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ дСйствия.

Для Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΠΈΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ классов («рСсурсов») добавляСтся интСрфСйс AutoCloseable, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΊΠΎΠ΄ Π±Π»ΠΎΠΊΠ° final выносится Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ close ΠΈ вызываСтся нСявно Π² ΠΊΠΎΠ½Ρ†Π΅
try-with-resources. Если Π² этой конструкции присутствуСт ΠΈ явный final, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ послС.

Java GuruπŸ€“ #java
❀6πŸ‘4πŸ”₯4
Π§Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ checked ΠΈ unchecked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ?

Вопрос Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ, ΡΡƒΡ‚ΡŒ вопроса – объяснСниС ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описано Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±Ρ‹Π²Π°ΡŽΡ‚ checked ΠΈ unchecked. Checked трСбуСтся ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² сигнатурС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ throws; ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² throws Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅. Unchecked ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π°ΠΆΠ΅ Ссли ΡƒΠΊΠ°Π·Π°Π½Π° Π² throws.

πŸ”˜Throwable – Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс для всСго Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ throw ΠΈ Π² конструкции try-catch
πŸ”˜RuntimeException – Β«Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅Β» unchecked-ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
πŸ”˜Error – unchecked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Β«ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹Β» прилоТСния. НС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ (хотя тСхничСски ΠΌΠΎΠΆΠ½ΠΎ). ВСорСтичСски JVM ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΠΎΠΌ состоянии ΠΈ Π½Π΅ Π΄Π°Π²Π°Ρ‚ΡŒ большС Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ
πŸ”˜Exception (ΠΊΡ€ΠΎΠΌΠ΅ RuntimeException) – checked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

@javatasks #java
Please open Telegram to view this post
VIEW IN TELEGRAM
❀5πŸ”₯4πŸ‘3
Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово default?

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ (с Java 1.5) это слово использовалось для объявлСния Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎΠ³ΠΎ значСния элСмСнтов Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ.

Π’
Java 8 вмСстС с лямбдами ΠΈ стримами появилась острая Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ стандартныС интСрфСйсы Π½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Никто СстСствСнно Π½Π΅ собирался Π»ΠΎΠΌΠ°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ, ΠΈ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова default ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ интСрфСйса позволяСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅ΠΌΡƒ Ρ‚Π΅Π»ΠΎ. ВсС Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ старых интСрфСйсов ΡΠ½Π°Π±ΠΆΠ°ΡŽΡ‚ΡΡ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.

Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΅Π³ΠΎ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ вызываСтся Ρ‚Π΅ΠΌ ΠΆΠ΅ синтаксисом, Ρ‡Ρ‚ΠΎ ΠΈ внСшний класс ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ: InterfaceName.super.methodName().

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ подошли Π΅Ρ‰Π΅ Π½Π° шаг ΠΊ ввСдСнию Π²
Java бСспроблСмной вСрсии мноТСствСнного наслСдования – примСсям (mixin). Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ состояния, поэтому ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ примСси всё Π΅Ρ‰Ρ‘ нСдоступны.

@javatasks #java
πŸ‘7πŸ”₯4❀1
Π’ ΠΊΠ°ΠΊΠΎΠΌ порядкС ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹?

ΠŸΡ€Π°Π²ΠΈΠ»Π° примСнСния ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² поля описаны Π² JLS 8.3.1:
πŸ”˜ΠΠ΅Π»ΡŒΠ·Ρ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄Π²Π°ΠΆΠ΄Ρ‹;
πŸ”˜ΠΠ΅Π»ΡŒΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ указания Π²ΠΎΠΎΠ±Ρ‰Π΅ свободный, Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:
@Аннотации, доступ,
static final transient volatile


ВрСбования для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° находятся Π² JLS 8.4.3:
πŸ”˜Π’Π΅ ΠΆΠ΅ трСбования, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊ полю;
πŸ”˜Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚Π½ΠΎ с abstract ΠΊΡ€ΠΎΠΌΠ΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ protected ΠΈΠ»ΠΈ public;
πŸ”˜native ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ strictfp.

И Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π΅ трСбуСтся, Π½ΠΎ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ порядок:
@Аннотации, доступ,
abstract static final synchronized native strictfp

Java GuruπŸ€“ #java
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘10πŸ”₯6❀1
πŸ“ŽΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Ѐасад (Facade)

Ѐасад β€” это структурный ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ интСрфСйс для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ слоТных подсистСм. Он скрываСт ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ систСмы ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ взаимодСйствиС с Π½Π΅ΠΉ, прСдоставляя Π±ΠΎΠ»Π΅Π΅ простой ΠΈ понятный API для ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

ИспользованиС:

🟑 Когда систСма состоит ΠΈΠ· мноТСства классов, ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ доступ ΠΊ Π΅Ρ‘ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Ρƒ.
🟑 Когда Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ интСрфСйс для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с нСсколькими подсистСмами.
🟑 Когда Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ слоТной систСмой, скрыв Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

1️⃣ Π£ΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ взаимодСйствиС с комплСксной систСмой, прСдоставляя ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ интСрфСйс.
2️⃣ Π‘Π½ΠΈΠΆΠ°Π΅Ρ‚ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… классов подсистСм, облСгчая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΈ тСстированиС.
3️⃣ Π£ΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ количСство Ρ‚ΠΎΡ‡Π΅ΠΊ взаимодСйствия с систСмой, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ удобство Ρ€Π°Π±ΠΎΡ‚Ρ‹.

НСдостатки:

1️⃣ ΠœΠΎΠΆΠ΅Ρ‚ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ограничивая возмоТности систСмы.
2️⃣ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ количСство ΠΊΠΎΠ΄Π° Π·Π° счёт добавлСния Π½ΠΎΠ²ΠΎΠ³ΠΎ фасадного класса.
3️⃣ Если фасад слишком абстрактСн, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ слоТным для понимания ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ.

πŸ“Œ ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Ѐасад ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ нСсколько подсистСм ΠΏΠΎΠ΄ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±Ρ‰ΠΈΠΉ интСрфСйс, дСлая систСму Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΈ простой для использования. НапримСр, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΌΠΈ слоТной настройки, ΠΈΠ»ΠΈ Π² ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, Π³Π΄Π΅ взаимодСйствиС с мноТСством ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ. Ѐасад ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ удобство Ρ€Π°Π±ΠΎΡ‚Ρ‹ с систСмой.

βœ… Java Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° #java
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ”₯10❀6πŸ‘2
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ логичСского ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°?

ЛогичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ || ΠΈ && Π»Π΅Π²ΠΎ-ассоциативны, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ. Если ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ оказалось true Π² || ΠΈΠ»ΠΈ false Π² && – ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΡƒΠΆΠ΅ ΠΏΡ€Π΅Π΄Ρ€Π΅ΡˆΠ΅Π½, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π΅ΠΌ ΠΆΠ΅. Π’ этом случаС происходит Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Β«ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅Β» (short-circuiting) – ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΉΡΡ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅ вычисляСтся Π·Π° Π½Π΅Π½Π°Π΄ΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ.

Π­Ρ‚Ρƒ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΈΠ½ΠΎΠ³Π΄Π° ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° null Π² ΠΎΠ΄Π½Ρƒ строку:
return param != null && param.getBoolMember();


Но ΠΈΠ½ΠΎΠ³Π΄Π° такая ситуация Π²Π»Π΅Ρ‡Π΅Ρ‚ Π·Π° собой Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ»Π°Π²Π°ΡŽΡ‰ΠΈΠ΅ Π±Π°Π³ΠΈ, Ссли Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ – Π½Π΅ пСрСмСнная, Π° функция с ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌ эффСктом. Для этой ситуации Π²Π²Π΅Π΄Π΅Π½Ρ‹ вСрсии ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π±Π΅Π· ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ замыкания: | ΠΈ &. Π­Ρ‚ΠΎ логичСскиС Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ Β«Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΒ» ΠΈ Β«Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ»ΠΈΒ».

Π’Π΄ΠΎΠ±Π°Π²ΠΎΠΊ доступСн ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Β«ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ ΠΈΠ»ΠΈΒ» ^. Он ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π±ΡƒΠ»Π΅Π²Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ эквивалСнтСн Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятному !=. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ для логичСских Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² нСдоступны.


Java GuruπŸ€“ #java
❀8πŸ‘4πŸ”₯1
ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅ цСлочислСнныС Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, стоит ΠΎΡΠ²Π΅ΠΆΠΈΡ‚ΡŒ знания ΠΎ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ прСдставлСнии Ρ†Π΅Π»Ρ‹Ρ… Π·Π½Π°ΠΊΠΎΠ²Ρ‹Ρ… чисСл. Π’ Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ two's complement – для значСния 0 всС Π±ΠΈΡ‚Ρ‹ Π½ΡƒΠ»ΠΈ, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ максимального значСния Π½Π° 1 получаСтся минимальноС.

Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ &, | ΠΈ ^ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ «И», Β«Π˜Π›Π˜Β» ΠΈ Β«ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ Π˜Π›Π˜Β» (XOR) соотвСтствСнно. Π—Π΄Π΅ΡΡŒ особСнно интСрСсСн XOR:

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Β«ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΈΠ»ΠΈΒ» с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Π΄Π²Π° Ρ€Π°Π·Π° Π΄Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π—Π° счСт этого Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ выступит ΠΊΠ»ΡŽΡ‡ΠΎΠΌ;
Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ XOR рСализуСтся XOR-ΠΎΠ±ΠΌΠ΅Π½ – Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠ±ΠΌΠ΅Π½Π° значСниями ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти ΠΈ Π±Π΅Π· риска пСрСполнСния. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· популярных вопросов для собСсСдования.

Π£Π½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ отрицания (дополнСния) ~. Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π΅Π½ Β«ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΈΠ»ΠΈΒ» с самим собой – всС Π±ΠΈΡ‚Ρ‹ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. ~x эквивалСнтно -x-1. ~0 == -1.
Π‘ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ сдвиги: Π»Π΅Π²Ρ‹ΠΉ << ΠΏΡ€Π°Π²Ρ‹ΠΉ Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ >> ΠΈ ΠΏΡ€Π°Π²Ρ‹ΠΉ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ >>>. Π›Π΅Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ – Ρ‡Ρ‚ΠΎ ΡΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒ, ΠΏΡ€Π°Π²Ρ‹ΠΉ – Π½Π° сколько Π±ΠΈΡ‚ΠΎΠ².

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, дистанция сдвига, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ большС доступных разрядов – 31 для int ΠΈ 63 для long. Если ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ большС – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ младшиС 5 ΠΈ 7 Π±ΠΈΡ‚ΠΎΠ² соотвСтствСнно. Π’ΠΎ Π΅ΡΡ‚ΡŒ для int ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ x << 33 эквивалСнтно x << 2.

a << b эквивалСнтно ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡŽ a Π½Π° 2 Π² стСпСни b.
a >> b совпадаСт с Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π° 2 Π² стСпСни b, с ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ΠΌ Π²Π½ΠΈΠ·. Для ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… a Ρ‚ΠΎ ΠΆΠ΅ Ρ‡Ρ‚ΠΎ a/pow(2,b). Для Π½Π΅ дСлящихся Π½Π°Ρ†Π΅Π»ΠΎ Π½Π° pow(2,b) ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… это a/pow(2,b)-1.

Π‘Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ сдвиг Π²ΠΏΡ€Π°Π²ΠΎ Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΠ΅Ρ‚ число Π½Π΅ ΠΊΠ°ΠΊ two's complement, Π° ΠΊΠ°ΠΊ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅. Π’ΠΎ Π΅ΡΡ‚ΡŒ Integer.MIN_VALUE Π±ΡƒΠ΄Π΅Ρ‚ сдвинут Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ это сдвигаСтся число Π½Π° 1 большСС Ρ‡Π΅ΠΌ Integer.MAX_VALUE.

Π‘Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ сдвига Π²Π»Π΅Π²ΠΎ Π½Π΅ сущСствуСт, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ совпадал Π±Ρ‹ со Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ сдвигом, ΠΈ Π±Ρ‹Π» Π±Ρ‹ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ.


Java GuruπŸ€“ #java
πŸ”₯6❀4πŸ‘3
Как ΡƒΠ·Π½Π°Ρ‚ΡŒ, являСтся Π»ΠΈ A ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ B?

Π’ Java доступны Ρ‚Ρ€ΠΈ способа ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ совмСстимости Ρ‚ΠΈΠΏΠΎΠ². Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΎΠ½ΠΈ Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для Ρ€Π°Π·Π½Ρ‹Ρ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π’ порядкС убывания быстродСйствия:

instanceof – Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, самый быстрый ΠΈ самый ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ. Если Π΅ΡΡ‚ΡŒ экзСмпляр A ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ B явно, Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π½Π°Π΄ΠΎ Π΅Π³ΠΎ. Если A (Ρ‚ΠΎΡ‡Π½Π΅Π΅ Ρ‚ΠΈΠΏ хранящСй экзСмпляр A ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ) ΠΈ B Π½Π΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ наслСдования – экзСмпляр Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ B ΠΈ компиляция ΡƒΠΏΠ°Π΄Π΅Ρ‚ с ошибкой inconvertible types.

Class::isInstance – ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° A. Π•Π³ΠΎ стоит Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° экзСмпляр A Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ, Π½ΠΎ B – нСизвСстный Π½Π° этапС компиляции Ρ‚ΠΈΠΏ. Π’ΠΎ Π΅ΡΡ‚ΡŒ, для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… A a ΠΈ Class bClass, ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ bClass.isInstance(a).

Class::isAssignableFrom – ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Class<A>. ЕдинствСнноС, Ρ‡Ρ‚ΠΎ остаСтся, Ссли экзСмпляра A Π½Π΅Ρ‚. bClass.isAssignableFrom(aClass).

Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ способ – имСя экзСмпляр Ρ‚ΠΈΠΏΠ° A привСсти Π΅Π³ΠΎ ΠΊ B. Если Ρ‚ΠΈΠΏΡ‹ Π±Ρ‹Π»ΠΈ нСсовмСстимы, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ выбросит ClassCastException. Π­Ρ‚ΠΎ Π²ΠΎ всСх смыслах ΠΏΠ»ΠΎΡ…ΠΎΠΉ способ, ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΡŽ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ… Π½Π΅Ρ‚ оправдания. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ аргумСнтация описана Π² Effective
Java Item 57.

Java GuruπŸ€“ #java
❀6πŸ‘5πŸ”₯3
Π§Π΅ΠΌ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ класс отличаСтся ΠΎΡ‚ лямбды?

Лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ лСгковСсный синтаксис. НС Π½ΡƒΠΆΠ½ΠΎ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ интСрфСйса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ лямбда Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ – ΠΎΠ½ автоматичСски вывСдСтся ΠΈΠ· контСкста. Лямбда-выраТСния Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² язык Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠ°ΠΊ синтаксичСский сахар.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρƒ класса Π΅ΡΡ‚ΡŒ поля. ЭкзСмпляр Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ класса сохраняСт своС состояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ, ΠΈ мСняСт Π΅Π³ΠΎ ΠΏΡ€ΠΈ нСобходимости. Для лямбды доступСн лишь Π·Π°Ρ…Π²Π°Ρ‚ ΠΈ effectively final использованиС Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Лямбдой рСализуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс – это Ρ‚ΠΈΠΏ с СдинствСнным абстрактным ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ. Анонимным классом ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ любой Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΉ класс ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс с Π»ΡŽΠ±Ρ‹ΠΌ количСством абстрактных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Анонимный класс создаСт Π½ΠΎΠ²Ρ‹ΠΉ скоуп, лямбда Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ снаруТи, Π² лямбдС Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции Β«variable is already definedΒ», Π² Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΌ классС скроСт (shadowing) внСшнюю ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ JVM, для лямбды Π½Π΅ создаСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ .class Ρ„Π°ΠΉΠ»Π°, ΠΊΠ°ΠΊ это происходит для Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ класса. БоотвСтствСнно, Π½Π΅ происходит ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ класса. ВмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ invokedynamic ΠΈ класс гСнСрируСтся Π½Π° Π»Π΅Ρ‚Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ LambdaMetafactory. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ лямбда-выраТСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ быстрСС.


Java GuruπŸ€“ #java
πŸ”₯12❀4πŸ‘4🌭1
Как ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°?

Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚-массив. Π’ Π½Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ любоС количСство элСмСнтов. Π•Ρ‰Π΅ с Java 5 для этого случая добавился синтаксичСский сахар: Variable-length argument (vararg). Π’Ρ€ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ... ставятся ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠΎΠΌ ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈ становится ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ любоС количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π½Π΅ упаковывая ΠΈΡ… Π² массив.

На ΡƒΡ€ΠΎΠ²Π½Π΅ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ массива ΠΈ Π²Π°Ρ€Π°Ρ€Π³Π° Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ: vararg-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Foo... прСвращаСтся Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€-массив Foo[], Π½Π° этапС Π²Ρ‹Π·ΠΎΠ²Π° подставляСтся нСявноС инстанцированиС ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ массива.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ нСоднозначностСй, Π½Π° vararg Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅: ΠΈΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ послСдний Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚.

Vararg, ΠΊΠ°ΠΊ массив, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым. Иногда это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΌΡƒ повСдСнию. Допустим, ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ int... ΠΈ float.... Π’Ρ‹Π·ΠΎΠ² Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с int, ΠΊΠ°ΠΊ с Π±ΠΎΠ»Π΅Π΅ спСцифичным Ρ‚ΠΈΠΏΠΎΠΌ. НаличиС ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ с нСсовмСстимыми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ int... ΠΈ boolean..., ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊ ошибкС компиляции Β«Ambiguous method callΒ».

Когда Ρ‚ΠΈΠΏΠΎΠΌ Π²Π°Ρ€Π°Ρ€Π³Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ generic-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ warning Β«Possible heap pollution from parameterized vararg typeΒ». Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ Π² Ρ‡Π΅ΠΌ этот риск, Ρ‡Ρ‚ΠΎ ваш ΠΊΠΎΠ΄ Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ heap pollution, ΠΈ ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈΡ‚ΡŒ ΠΎΠ± этом компилятор Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ
@SafeVarargs.

Java GuruπŸ€“ #java
πŸ‘10❀3πŸ”₯2
Π§Ρ‚ΠΎ Ссли Π±Π»ΠΎΠΊ finally выбросит ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅?

Π‘Π»ΠΎΠΊ finally выполняСтся Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π±Ρ‹Π»ΠΎ Π»ΠΈ Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ Π² Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠ΅ try ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Когда ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π² try, Π½ΠΎ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π² finally, Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ интСрСсного. Π­Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ стСку Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΏΠΎΠΊΠ° Π½Π΅ попадСтся Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΅ΠΌΡƒ catch.

Вопрос ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ случай, ΠΊΠΎΠ³Π΄Π° исполнСниС ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² finally Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ выброса ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ· try. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· finally Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ собой ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· try ΠΈ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ стСку вмСсто Π½Π΅Π³ΠΎ. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ попросту Π·Π°Π±Ρ‹Ρ‚Π°.

Вакая маскировка ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ услоТняСт ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ, Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Π΅Ρ‘. НапримСр IntelliJ IDEA Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ throw Π²Π½ΡƒΡ‚Ρ€ΠΈ finally.


Java GuruπŸ€“ #java
❀6πŸ‘6πŸ”₯2
Как ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив?

Object.clone()
ΠΈ System.arraycopy(). НативныС способы копирования, самыС быстрыС ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ…. УнаслСдованный ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса clone() ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ вСсь массив Π±Π΅Π· Π»ΠΈΡˆΠ½ΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². arraycopy(), Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, максимально Π³ΠΈΠ±ΠΊΠΈΠΉ – позволяСт ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ массива ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ массив, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Arrays.copyOf(), Arrays.copyOfRange() ΠΈ всС ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π°Ρ€Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ спСциализированныС способы копирования. Π’Π½ΡƒΡ‚Ρ€ΠΈ всС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ System.arraycopy().

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· стрим.
Arrays.stream(sourceArray).toArray(). Π£Π΄ΠΎΠ±Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ удобства, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° коррСктности ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², привСдСния Ρ‚ΠΈΠΏΠΎΠ², ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ – класс SerializationUtils ΠΈΠ· Apache Commons.

ВсС пСрСчислСнныС способы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚Π½ΡƒΡŽ копию – ΠΎΠ±Π° массива Π² ΠΈΡ‚ΠΎΠ³Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π›ΡƒΡ‡ΡˆΠΈΠΉ способ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³Π»ΡƒΠ±ΠΎΠΊΡƒΡŽ копию – Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ new создаСтся пустой массив Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π·Π°Ρ‚Π΅ΠΌ Π² Ρ†ΠΈΠΊΠ»Π΅ заполняСтся копиями элСмСнтов. Stream API здСсь ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ интСрфСйс Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ многопоточности.

Π‘Π°ΠΌΡ‹ΠΉ быстрый, Π½ΠΎ уТасный ΠΏΠΎ эффСктивности способ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ копирования массива Π±Π΅Π· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ копирования ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов – сСриализация+дСсСриализация. Π‘Π»ΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΏΠ»ΠΎΡ…ΠΎΠΌΡƒ способу для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½Π°, Π½ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ быстрого ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°, ΠΈΠ»ΠΈ для тСстового ΠΊΠΎΠ΄Π°.


Java GuruπŸ€“ #java
πŸ‘9❀3πŸ”₯3
Π§Π΅ΠΌ отличаСтся Closeable ΠΎΡ‚ AutoCloseable?

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ AutoCloseable прСдставляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ рСсурса, ΠΏΠΎΠΊΠ° Ρ‚ΠΎΡ‚ Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚. Π’ СдинствСнном Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ close() ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π»ΠΎΠ³ΠΈΠΊΠ° закрытия этого рСсурса. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ – дСскриптор ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° (ObjectOutputStream).

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ этого интСрфСйса Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² языковой конструкции try-with-resource. Всё это появилось Π²
Java вСрсии 7.

Π”ΠΎ
Java 7 ΡƒΠΆΠ΅ сущСствовал ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ интСрфСйс – Closeable. Бмысл Π΅Π³ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅. Он всё Π΅Ρ‰Π΅ доступСн Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости, Π½ΠΎ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ AutoCloseable. Π§Ρ‚ΠΎΠ±Ρ‹ экзСмпляры старого Closeable Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² try-with-resource, Π½ΠΎΠ²Ρ‹ΠΉ интСрфСйс Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° старого интСрфСйса Closeable Π±Ρ‹Π»Π° Π² узости Ρ‚ΠΈΠΏΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ close(). ΠšΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ интСрфСйсС AutoCloseable с IOException Π΄ΠΎ Exception.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ – ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° close(). Π‘Ρ‚Π°Ρ€Ρ‹ΠΉ Closeable Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ идСмпотСнтности, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π½ΠΎΠ²Ρ‹ΠΉ AutoCloseable Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты.


Java GuruπŸ€“ #java
πŸ‘13πŸ”₯5
Как Java Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄?

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ – Π² классС ΠΌΠΎΠ³ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²Ρ‹Π±ΠΎΡ€ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° происходит Π½Π° этапС компиляции (Ρ€Π°Π½Π½Π΅Π΅ связываниС). Π’ дСталях Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° описан Π² спСцификации.

Π’Ρ‹Π±ΠΎΡ€ происходит Π² Π΄Π²Π° шага. На ΠΏΠ΅Ρ€Π²ΠΎΠΌ выбираСтся ΠΎΠ΄Π½Π° ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Ρ„Π°Π· – мноТСство подходящих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

1. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ подходят ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ, Π»ΠΈΠ±ΠΎ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ (upcasting) ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² ΠΈΠ»ΠΈ ссылочных Ρ‚ΠΈΠΏΠΎΠ², ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ vararg-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

2. Если Π² Ρ„Π°Π·Π΅ 1 подходящих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π΅ нашлось, ΠΊ Π΅Π΅ условиям Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ боксинга/анбоксинга ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ боксинг+Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅, Π½ΠΎ Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

3. Если ΠΈ для Ρ„Π°Π·Ρ‹ 2 Π½Π΅Ρ‚ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… сигнатур, ΠΊ условиям поиска ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ vararg-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Π’ случаС, ΠΊΠΎΠ³Π΄Π° Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ нашСлся Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°Π·Π΅, компиляция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ошибкой.

Когда Π² Ρ„Π°Π·Π΅ имССтся нСсколько подходящих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ спСцифичный срСди Π½ΠΈΡ… (Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠΉ Ρ„Π°Π·Ρ‹!).

ΠœΠ΅Ρ‚ΠΎΠ΄ A считаСтся Π±ΠΎΠ»Π΅Π΅ спСцифичным Ρ‡Π΅ΠΌ B, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΈΠΏΡ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° – ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΡ‹ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² A подошли Π±Ρ‹ ΠΈ для B, Π½ΠΎ Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Π’ условии спСцифичности говорится ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π° Π½Π΅ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ боксинг/анбоксинг Π½Π΅ учитываСтся, ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ int Π½Π΅ считаСтся Π±ΠΎΠ»Π΅Π΅ спСцифичным, Ρ‡Π΅ΠΌ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Object (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Integer). Π₯отя, Ρ†Π΅Π»ΠΎΠ΅ число ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΊΠ°ΠΊ Object, ΠΈ ΠΊΠ°ΠΊ Integer.
ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ объяснСниС.

Когда срСди ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ спСцифичный, происходит ошибка компиляции.


Java GuruπŸ€“ #java
πŸ”₯11πŸ‘5❀3
Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово assert?

assert – Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ assertTrue() ΠΈΠ· тСстовых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π­Ρ‚ΠΎ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово, ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.

Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚, Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ провСряСмоС ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° boolean. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ оказываСтся false, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° утвСрТдСния считаСтся ΠΏΡ€ΠΎΠ²Π°Π»Π΅Π½Π½ΠΎΠΉ ΠΈ выбрасываСтся AssertionError. Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΡΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½ΡƒΡŽ запись ΠΏΠ°Ρ€Ρ‹ if ΠΈ throw, с фиксированным Ρ‚ΠΈΠΏΠΎΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π’
Java Π΄ΠΎ вСрсии 4 слово assert Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ – Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° assert!

Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ„Π»Π°Π³ΠΎΠΌ -ea ΠΈΠ»ΠΈ -enableassertions ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
java. МоТно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ классы ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ. Π•ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΉ Ρ„Π»Π°Π³ -da (-disableassertions), эти Ρ„Π»Π°Π³ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ.

Assertion-Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² основном для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² состояния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ для подстраховки Π² ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ. Π’Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½Π½Ρ‹ΠΉ AssertionError ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ программиста.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° assert Π΅ΡΡ‚ΡŒ синтаксис ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° detailMessage Π² конструктор AssertionError:
assert 2*2==5 : "two times two is not five!";

Java GuruπŸ€“ #java
πŸ‘8❀5πŸ”₯3
Как нСльзя Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅?

Π­Ρ‚ΠΎΡ‚ вопрос ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ ΠΈΠ· Π΄Π²ΡƒΡ… частСй. НуТно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Π΅ΡΡ‚ΡŒ тСхничСскиС ограничСния, ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ стилистичСскиС. Π‘Ρ‚ΠΈΠ»ΡŒ – слишком большая Ρ‚Π΅ΠΌΠ°, Π½Π΅ спСцифичная Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Java, Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π½Π° Π½Π΅ΠΉ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ.

ВСхничСски компилятор Π½Π°Π»Π°Π³Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ограничСния Π½Π° ΠΈΠΌΠ΅Π½Π° ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ классов, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΈ всСго ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ. Π­Ρ‚ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ всСго Ρ‚Ρ€ΠΈ:
1. Имя Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ словом;
2. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ символ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Character.isJavaIdentifierStart();
3. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ символы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Character.isJavaIdentifierPart().

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ имя Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… символов Unicode, ΠΊΠ°ΠΊ:
β€’ Π‘ΡƒΠΊΠ²Ρ‹ (Ρ€Π°Π·Π½Ρ‹Ρ… языков)
β€’ Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ Π²Π°Π»ΡŽΡ‚ (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ $)
β€’ Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ символы (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ _)
β€’ Π”ΠΈΠ°ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠ° (combining mark, non-spacing mark)
β€’ ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, проходящиС Character.isIdentifierIgnorable() (Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Π΅ символы, Π² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ компилятором)
β€’ Π¦ΠΈΡ„Ρ€Ρ‹, числовыС символы (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ римскиС числа)

ПослСдний ΠΏΡƒΠ½ΠΊΡ‚ нСдопустим для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа ΠΈΠΌΠ΅Π½ΠΈ. Π’ΠΈΠΏ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ символа ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Character.getType().

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ слово var. Оно стоит особняком ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ являСтся Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² контСкстС Ρ‚ΠΈΠΏΠ°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ var Π² качСствС ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ.


Java GuruπŸ€“ #java
πŸ‘10πŸ”₯5🌭1
❓ГдС Ρƒ Java прилоТСния Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π°?

Π’ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Java ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ main class, содСрТащий ΠΌΠ΅Ρ‚ΠΎΠ΄ main. Π‘ Π½Π΅Π³ΠΎ начинаСтся исполнСниС всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Main class-ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ класс, Π½ΠΎ ΠΈ интСрфСйс ΠΈΠ»ΠΈ Π΅Π½Π°ΠΌ. Для JavaFX прилоТСния Π³Π»Π°Π²Π½Ρ‹ΠΉ класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ javafx.application.Application.

main ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ public static. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ strictfp. На Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΈ список ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π΅ накладываСтся.

Π’ Π³Π»Π°Π²Π½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ объявлСн СдинствСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ – массив строк. ОбС конструкции String[] ΠΈ String... ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°. НазваниС массива ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.

Когда ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ запускаСтся ΠΊΠ°ΠΊ classpath, Π³Π»Π°Π²Π½Ρ‹ΠΉ класс пСрСдаСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Если выполняСтся СдинствСнный исходник, ΠΎΠ½ ΠΈ описываСт main class.

Для исполняСмого jar-Ρ„Π°ΠΉΠ»Π° (
java -jar MyJar.jar), Π΅Π³ΠΎ Π³Π»Π°Π²Π½Ρ‹ΠΉ класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ Π² манифСстС. Π’Π½ΡƒΡ‚Ρ€ΠΈ Π°Ρ€Ρ…ΠΈΠ²Π°, Π² Ρ„Π°ΠΉΠ» META-INF/MANIFEST.MF добавляСтся строчка Π²ΠΈΠ΄Π° Main-Class: ru.itsobes.MyClass. Π˜Π½Π°Ρ‡Π΅ запуск Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ошибкой Β«no main manifest attributeΒ».

Π’ случаС, ΠΊΠΎΠ³Π΄Π° Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π³Π»Π°Π²Π½ΠΎΠΌ классС Π½Π΅ оказываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹ удовлСтворял всСм критСриям Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ°Π΄Π°Π΅Ρ‚ с ошибкой Β«Main method not foundΒ».

Π’ Π°ΠΏΠΏΠ»Π΅Ρ‚Π°Ρ… вмСсто main Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ слуТат ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ init ΠΈ start. Начиная с вСрсии
Java 9 тСхнология Π°ΠΏΠΏΠ»Π΅Ρ‚ΠΎΠ² объявлСна ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ, Π° с 11 – совсСм ΡƒΠ΄Π°Π»Π΅Π½Π°. НС Π±ΡƒΠ΄Π΅ΠΌ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Π½ΠΈΡ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

Java GuruπŸ€“ #java
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ”₯10πŸ‘5
Как ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ интСрфСйса?

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс – всё Π΅Ρ‰Ρ‘ интСрфСйс, поэтому ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ доступными стандартныС способы. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ классом, ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ экзСмпляр ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ new. МоТно ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ эти Π΄Π²Π° дСйствия, ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ класса.

ОсновноС прСимущСство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс – Π΄Π²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… способа ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

1. Лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅: (x, y) -> x * y
2. Бсылка Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄: Math::sqrt

На эти способы накладываСтся нСбольшоС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅: Ρ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°/ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ явно. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ лямбдой ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄-рСфСрСнсом нСльзя ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½ΡƒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом var. Π’Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ лямбду ΠΈΠ»ΠΈ рСфСрСнс Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ generic-Ρ‚ΠΈΠΏΠ°, этот Ρ‚ΠΈΠΏ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ интСрфСйсом (Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² Π½Π΅Π³ΠΎ).


Java GuruπŸ€“ #java
πŸ‘6πŸ”₯4🀯1
Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ статичСски?

ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ избавляСт ΠΎΡ‚ нСобходимости ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя классов: ΠΏΡ€ΠΈ использовании ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚. БтатичСскиС ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС, Π½ΠΎ для статичСских Ρ‡Π»Π΅Π½ΠΎΠ² класса.

Π‘Π°ΠΌΠΎΠ΅ распространСнноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ статичСского ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° – Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ констант ΠΈΠ· константных интСрфСйсов ΠΈ статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠ· ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ€Π½Ρ‹Ρ… классов. Но Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈ измСняСмыС статичСскиС поля Π΄Ρ€ΡƒΠ³ΠΈΡ… классов.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ интСрСсСн случай nested-класса. Он ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ являСтся ΠΈ классом, ΠΈ статичСским Ρ‡Π»Π΅Π½ΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для Π½Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ, Ρ‚Π°ΠΊ ΠΈ статичСский ΠΈΠΌΠΏΠΎΡ€Ρ‚.

Языковая конструкция static import обязана Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΌ ΠΆΠ΅, Π³Π΄Π΅ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ – ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ package ΠΈ объявлСниСм основного класса Ρ„Π°ΠΉΠ»Π°.


Java GuruπŸ€“ #java
πŸ‘3πŸ”₯2❀1