Створення модуля
У Java модулі являють собою логічні групи пакетів, які можуть бути використані для організації програми. Створення модуля починається зі створення файлу module-info.java в кореневому каталозі модуля. У цьому файлі визначається ім'я модуля, його залежності та експортовані пакети.
Після створення модуля його можна використовувати в інших додатках, вказавши його ім'я в опції командного рядка --module.
Створення модулів дає змогу краще організувати додатки та керувати їхніми залежностями, що може спростити розробку та обслуговування коду.
#java
Code Ukraine
У Java модулі являють собою логічні групи пакетів, які можуть бути використані для організації програми. Створення модуля починається зі створення файлу module-info.java в кореневому каталозі модуля. У цьому файлі визначається ім'я модуля, його залежності та експортовані пакети.
Після створення модуля його можна використовувати в інших додатках, вказавши його ім'я в опції командного рядка --module.
Створення модулів дає змогу краще організувати додатки та керувати їхніми залежностями, що може спростити розробку та обслуговування коду.
#java
Code Ukraine
Механізм Assertions
Механізм Assertions являє собою інструмент для перевірки умов у коді. Він використовується для вираження та перевірки припущень, які мають бути істинними під час виконання програми. Assertions дають змогу програмісту ввімкнути або вимкнути перевірку умов залежно від режиму виконання програми.
Важливо зазначити, що за замовчуванням механізм Assertions у Java вимкнено. Для його активації необхідно запустити JVM з прапором "-ea" (або "-enableassertions").
#java
Code Ukraine
Механізм Assertions являє собою інструмент для перевірки умов у коді. Він використовується для вираження та перевірки припущень, які мають бути істинними під час виконання програми. Assertions дають змогу програмісту ввімкнути або вимкнути перевірку умов залежно від режиму виконання програми.
Важливо зазначити, що за замовчуванням механізм Assertions у Java вимкнено. Для його активації необхідно запустити JVM з прапором "-ea" (або "-enableassertions").
#java
Code Ukraine
Для чого потрібне ключове слово super?
Як і багато інших ключових слів, super має кілька різних значень залежно від контексту:
1. Задати нижню межу generic-типу: Consumer<? super Number>
2. звернутися до члена класу-батька, який перекритий (shadowed) членами спадкоємця або локальними змінними: int foo = super.foo
3. Викликати в конструкторі конструктор батька: SubClass() { super("subclass param"); }
4. У разі невизначеності, уточнити батьківський тип (на картинці)
#java
Code Ukraine
Як і багато інших ключових слів, super має кілька різних значень залежно від контексту:
1. Задати нижню межу generic-типу: Consumer<? super Number>
2. звернутися до члена класу-батька, який перекритий (shadowed) членами спадкоємця або локальними змінними: int foo = super.foo
3. Викликати в конструкторі конструктор батька: SubClass() { super("subclass param"); }
4. У разі невизначеності, уточнити батьківський тип (на картинці)
#java
Code Ukraine
У чому відмінність між приватним конструктором і фінальним класом?
Обмеження області видимості конструктора до приватного не дозволяє викликати його зі спадкоємця, що призводить до неможливості успадкування. Ця властивість часто використовується для утилітарних класів і синглтонів. Якщо застосувати породжувальний патерн, то можна повернути можливість інстанціювання ззовні.
Якщо додати оголошенню класу модифікатор final, це також заборонить від нього успадковуватися, вже без зайвого обмеження на використання конструктора зовні. Це основне застосування цих двох підходів.
З точки зору можливості успадкування, обмеження через private конструктор слабше. Від такого класу, якщо він не фінальний, можна успадковувати внутрішні та вкладені підкласи. Публічний вкладений клас може спрацювати як "PublicExample" - дати зовнішнім класам успадковуватися через себе.
#java
Code Ukraine
Обмеження області видимості конструктора до приватного не дозволяє викликати його зі спадкоємця, що призводить до неможливості успадкування. Ця властивість часто використовується для утилітарних класів і синглтонів. Якщо застосувати породжувальний патерн, то можна повернути можливість інстанціювання ззовні.
Якщо додати оголошенню класу модифікатор final, це також заборонить від нього успадковуватися, вже без зайвого обмеження на використання конструктора зовні. Це основне застосування цих двох підходів.
З точки зору можливості успадкування, обмеження через private конструктор слабше. Від такого класу, якщо він не фінальний, можна успадковувати внутрішні та вкладені підкласи. Публічний вкладений клас може спрацювати як "PublicExample" - дати зовнішнім класам успадковуватися через себе.
#java
Code Ukraine
Records
Records - це новий тип даних, доданий у Java 14, який дає змогу визначити клас із набором властивостей, аналогічних до полів класу, але незмінних і доступних тільки для читання. Вони надають зручний спосіб оголошення простих незмінних об'єктів зі скороченим синтаксисом.
#java
Code Ukraine
Records - це новий тип даних, доданий у Java 14, який дає змогу визначити клас із набором властивостей, аналогічних до полів класу, але незмінних і доступних тільки для читання. Вони надають зручний спосіб оголошення простих незмінних об'єктів зі скороченим синтаксисом.
#java
Code Ukraine
Багатовимірні масиви
У Java багатовимірні масиви являють собою масиви, елементами яких є інші масиви. Вони дають змогу організувати дані у вигляді таблиці або матриці з кількома вимірами.
Багатовимірні масиви в Java можуть мати будь-яку кількість вимірів, і ви можете створювати та використовувати масиви з потрібною вам кількістю вимірів для зберігання та обробки даних.
#java
Code Ukraine
У Java багатовимірні масиви являють собою масиви, елементами яких є інші масиви. Вони дають змогу організувати дані у вигляді таблиці або матриці з кількома вимірами.
Багатовимірні масиви в Java можуть мати будь-яку кількість вимірів, і ви можете створювати та використовувати масиви з потрібною вам кількістю вимірів для зберігання та обробки даних.
#java
Code Ukraine
Патерн проєктування Observer
Паттерн Observer є одним із популярних поведінкових паттернів проектування. Він використовується для реалізації механізму, за якого об'єкти (спостерігачі) можуть автоматично отримувати повідомлення про зміни в іншому об'єкті (суб'єкті). Це особливо корисно, коли одні об'єкти залежать від стану інших і мають реагувати на його зміни.
#java
Code Ukraine
Паттерн Observer є одним із популярних поведінкових паттернів проектування. Він використовується для реалізації механізму, за якого об'єкти (спостерігачі) можуть автоматично отримувати повідомлення про зміни в іншому об'єкті (суб'єкті). Це особливо корисно, коли одні об'єкти залежать від стану інших і мають реагувати на його зміни.
#java
Code Ukraine
Статичний ініціалізатор
Статичний ініціалізатор - блок коду, який виконується під час першого завантаження класу або під час першого звернення до статичного члена класу (змінної або методу). Статичний ініціалізатор зазвичай використовується для ініціалізації статичних змінних або виконання інших дій, які потрібні тільки один раз, під час завантаження класу.
#java
Code Ukraine
Статичний ініціалізатор - блок коду, який виконується під час першого завантаження класу або під час першого звернення до статичного члена класу (змінної або методу). Статичний ініціалізатор зазвичай використовується для ініціалізації статичних змінних або виконання інших дій, які потрібні тільки один раз, під час завантаження класу.
#java
Code Ukraine
ExecutorService
ExecutorService - це інтерфейс у Java, який надає високорівневий спосіб керування виконанням завдань (потоків) у фоновому режимі. Він є частиною пакета java.util.concurrent і надає абстракцію над управлінням потоками виконання, що полегшує створення та управління потоками в багатозадачних додатках.
ExecutorService дає змогу розробникам створювати пули потоків, якими автоматично керує пул, а не створюють і не знищують щоразу вручну. Це знижує накладні витрати на створення і знищення потоків, що може бути дорогою операцією.
#java
Code Ukraine
ExecutorService - це інтерфейс у Java, який надає високорівневий спосіб керування виконанням завдань (потоків) у фоновому режимі. Він є частиною пакета java.util.concurrent і надає абстракцію над управлінням потоками виконання, що полегшує створення та управління потоками в багатозадачних додатках.
ExecutorService дає змогу розробникам створювати пули потоків, якими автоматично керує пул, а не створюють і не знищують щоразу вручну. Це знижує накладні витрати на створення і знищення потоків, що може бути дорогою операцією.
#java
Code Ukraine
Stream API
Потужний інструмент для обробки даних у Java. Дозволяє виконувати операції над послідовностями елементів декларативним способом, а не за допомогою імперативних циклів.
Насамперед з колекції потрібно отримати
#java
Code Ukraine
Потужний інструмент для обробки даних у Java. Дозволяє виконувати операції над послідовностями елементів декларативним способом, а не за допомогою імперативних циклів.
Насамперед з колекції потрібно отримати
.stream()
, а потім викликати потрібну функцію: filter(), reduce()
та інші.#java
Code Ukraine
Події та слухачі
У Java події та слухачі використовуються для обробки подій, які виникають у програмі. Події можуть бути пов'язані з діями користувача, такими як клік миші, натискання клавіші або зміна тексту в полі введення, або з іншими діями, такими як завершення роботи потоку або отримання даних з мережі.
Слухачі (Listeners) у Java - це інтерфейси, які дозволяють реєструвати обробники подій. Коли відбувається подія, відповідний слухач викликає метод обробки події, який реалізується класом, що зареєстрував слухач.
#java
Code Ukraine
У Java події та слухачі використовуються для обробки подій, які виникають у програмі. Події можуть бути пов'язані з діями користувача, такими як клік миші, натискання клавіші або зміна тексту в полі введення, або з іншими діями, такими як завершення роботи потоку або отримання даних з мережі.
Слухачі (Listeners) у Java - це інтерфейси, які дозволяють реєструвати обробники подій. Коли відбувається подія, відповідний слухач викликає метод обробки події, який реалізується класом, що зареєстрував слухач.
#java
Code Ukraine
Оператор return
Оператор
Якщо ж в оголошенні методу зазначено, що він повертає якесь значення, то оператор
#java
Code Ukraine
Оператор
return
використовується для виконання явного повернення з методу. Якщо метод повертає значення void, то оператор return не є необхідним. Його можна використовувати при достроковому виході з методу.Якщо ж в оголошенні методу зазначено, що він повертає якесь значення, то оператор
return
необхідний. Після нього вказується значення, що повертається з методу.#java
Code Ukraine
Порожня колекція замість Null
Якщо ваша програма може повернути колекцію, яка не містить жодних значень, переконайтеся, що повертається порожня колекція, а не Null. Це заощадить вам час на різні перевірки і позбавить від багатьох помилок.
#java
Code Ukraine
Якщо ваша програма може повернути колекцію, яка не містить жодних значень, переконайтеся, що повертається порожня колекція, а не Null. Це заощадить вам час на різні перевірки і позбавить від багатьох помилок.
#java
Code Ukraine
Сеттери
У Java сеттери (setters) є методами класу, які використовуються для встановлення значень приватних змінних (полів) класу. Вони забезпечують механізм інкапсуляції даних, даючи змогу контролювати доступ до полів класу і забезпечувати безпеку даних.
#java
Code Ukraine
У Java сеттери (setters) є методами класу, які використовуються для встановлення значень приватних змінних (полів) класу. Вони забезпечують механізм інкапсуляції даних, даючи змогу контролювати доступ до полів класу і забезпечувати безпеку даних.
#java
Code Ukraine
Порожня колекція замість Null
Якщо ваша програма може повернути колекцію, яка не містить жодних значень, переконайтеся, що повертається порожня колекція, а не Null. Це заощадить вам час на різні перевірки і позбавить від багатьох помилок.
#java
Code Ukraine
Якщо ваша програма може повернути колекцію, яка не містить жодних значень, переконайтеся, що повертається порожня колекція, а не Null. Це заощадить вам час на різні перевірки і позбавить від багатьох помилок.
#java
Code Ukraine
Створення модуля
У Java модулі являють собою логічні групи пакетів, які можуть бути використані для організації програми. Створення модуля починається зі створення файлу module-info.java в кореневому каталозі модуля. У цьому файлі визначається ім'я модуля, його залежності та експортовані пакети.
Після створення модуля його можна використовувати в інших додатках, вказавши його ім'я в опції командного рядка --module.
Створення модулів дає змогу краще організувати додатки та керувати їхніми залежностями, що може спростити розробку та обслуговування коду.
#java
Code Ukraine
У Java модулі являють собою логічні групи пакетів, які можуть бути використані для організації програми. Створення модуля починається зі створення файлу module-info.java в кореневому каталозі модуля. У цьому файлі визначається ім'я модуля, його залежності та експортовані пакети.
Після створення модуля його можна використовувати в інших додатках, вказавши його ім'я в опції командного рядка --module.
Створення модулів дає змогу краще організувати додатки та керувати їхніми залежностями, що може спростити розробку та обслуговування коду.
#java
Code Ukraine
Бінарний пошук у масивах
Припустимо, ми хочемо вставити новий елемент у відсортовану таблицю.
В іншому разі вона повертає точку вставки, яку ми можемо використовувати для підрахунку індексу для нового ключа:
Метод
#java
Code Ukraine
Припустимо, ми хочемо вставити новий елемент у відсортовану таблицю.
Arrays.binarySearch()
повертає індекс ключа пошуку, якщо він міститься в таблиці. В іншому разі вона повертає точку вставки, яку ми можемо використовувати для підрахунку індексу для нового ключа:
-(insertion point)-1
. Метод
binarySearch
є найпростішим і найефективнішим методом пошуку елемента у відсортованому масиві в Java.#java
Code Ukraine
Зазвичай інтерпретовані мови, як Python або JavaScript, вважають повільнішими за компільовані (C, Rust). Але завдяки Just-In-Time (JIT) компіляції вони можуть значно прискорюватися. Як це працює? Розбираємося! 🔍
Що таке JIT-компіляція?
JIT-компіляція – це гібридний підхід між інтерпретацією та традиційною компіляцією.
🔹 Звичайна інтерпретація – код виконується рядок за рядком, що може бути повільним.
🔹 Звичайна компіляція – код заздалегідь перекладається у машинний код, що дає високу швидкість.
🔹 JIT-компіляція – код спочатку виконується як інтерпретований, але гарячі (часто використовувані) фрагменти перекладаються у машинний код під час роботи програми.
Результат? Висока швидкість виконання без втрати гнучкості!
1️⃣ Інтерпретатор запускає код і відстежує, які частини виконуються найчастіше.
2️⃣ Гарячий код передається JIT-компілятору, який перекладає його у машинний код.
3️⃣ Збережений машинний код використовується замість повторної інтерпретації.
🔁 Це дозволяє прискорювати роботу програм під час виконання!
Де використовується JIT?
Чи є недоліки?
🔹 Початкові затримки – JIT-компілятору потрібен час на аналіз та компіляцію.
🔹 Більше споживання пам’яті – збережений машинний код займає додатковий простір.
🔹 Складність реалізації – вбудовування JIT у мову вимагає серйозних оптимізацій.
Але виграш у швидкості для довготривалих процесів перекриває ці мінуси!
Висновок
JIT-компіляція – це магія, що дозволяє інтерпретованим мовам бути швидкими. Завдяки адаптивному підходу вони можуть спочатку бути гнучкими, а потім – продуктивними!
#програмування #JIT #компіляція #JavaScript #Java #Python
Code Ukraine
Please open Telegram to view this post
VIEW IN TELEGRAM
Безкоштовний курс від Codecademy, який навчить вас основам Java, включно з об'єктно-орієнтованим програмуванням і створенням простих додатків.
#java #курс
Code Ukraine
Please open Telegram to view this post
VIEW IN TELEGRAM