Очередь в Java
Описать работу очереди можно одной фразой: «Первый вошёл — последний вышел». Другими словами, элементы добавление первые в очередь будут получены первые остальных.
Для реализации очередей в Java есть интерфейс Queue<E> и метод pull(), который удаляет первый элемент в очереди и возвращает его.
#java #lesson #collections
Описать работу очереди можно одной фразой: «Первый вошёл — последний вышел». Другими словами, элементы добавление первые в очередь будут получены первые остальных.
Для реализации очередей в Java есть интерфейс Queue<E> и метод pull(), который удаляет первый элемент в очереди и возвращает его.
#java #lesson #collections
Выбрасываем исключения
Кто-то передал функции null? Давайте скажем об этом. Или заставил считать площадь квадрата с отрицательной стороной? Выдаём ошибку и перестаём работать!
Чтобы выдать исключение используется throw вместе с исключением, которое мы хотим выдать. Например, IllegalArgumentException.
Главное не забудьте написать после определения функции throws ExceptionType, иначе ничего не заработает.
#java #lesson #exception
Кто-то передал функции null? Давайте скажем об этом. Или заставил считать площадь квадрата с отрицательной стороной? Выдаём ошибку и перестаём работать!
Чтобы выдать исключение используется throw вместе с исключением, которое мы хотим выдать. Например, IllegalArgumentException.
Главное не забудьте написать после определения функции throws ExceptionType, иначе ничего не заработает.
#java #lesson #exception
Итераторы
Это объекты, по которым можно "пройтись". Итератором считается объект, который реализовал интерфейс
Такие итераторы можно получить, например, у ArrayList, поскольку он реализует Collection, а значит у него есть метод
#java #lesson #collections
Это объекты, по которым можно "пройтись". Итератором считается объект, который реализовал интерфейс
Iterator <E>
. Такие итераторы можно получить, например, у ArrayList, поскольку он реализует Collection, а значит у него есть метод
Iterator<E> iterator()
. #java #lesson #collections
Константа
Помимо переменных в Java данные можно хранить в константах. Язык не разрешает менять эти значения. Но зачем они тогда нужны, почему нельзя просто написать число?
Магические числа это плохая практика, поэтому мы даём им имена в виде констант. Не 0, а SUCCESSEXITCODE.
Или, например, число pi. которое мы можем заново использовать, а не вводить каждый раз 3.14...
#java #lesson #vars
Помимо переменных в Java данные можно хранить в константах. Язык не разрешает менять эти значения. Но зачем они тогда нужны, почему нельзя просто написать число?
Магические числа это плохая практика, поэтому мы даём им имена в виде констант. Не 0, а SUCCESSEXITCODE.
Или, например, число pi. которое мы можем заново использовать, а не вводить каждый раз 3.14...
#java #lesson #vars
Ключевое слово var
Начиная с Java 10 в язык было добавлено слово var, которое позволяет определить переменную, на записывая тип.
Нет, это не динамическая типизация, просто язык сам просчитывает тип переменной на основе того, что в неё записали.
В таком случае переменную обязательно надо инициализировать, иначе выдаст ошибку.
#java #lesson #vars
Начиная с Java 10 в язык было добавлено слово var, которое позволяет определить переменную, на записывая тип.
Нет, это не динамическая типизация, просто язык сам просчитывает тип переменной на основе того, что в неё записали.
В таком случае переменную обязательно надо инициализировать, иначе выдаст ошибку.
#java #lesson #vars
InterruptedException
Думаю, вы заметили, что мы везде обрабатываем эту ошибку. Пока поток ожидает, кто-то может прервать его работу.
Ещё можно приостановить работу во время выполнения какого-то действия за счёт проверки
#java #lesson #multithreading
Думаю, вы заметили, что мы везде обрабатываем эту ошибку. Пока поток ожидает, кто-то может прервать его работу.
Thread.stop()
это устаревший метод, который просто убивал поток. Сейчас есть Thread.interrupt()
который говорит, что потоку надо закончить работу.Ещё можно приостановить работу во время выполнения какого-то действия за счёт проверки
!Thread.currentThread().isInterrupted()
.#java #lesson #multithreading
Создание потока
Для этого вам нужно создать новый класс и унаследовать его от класса Thread или от интерфейса Runnable.
Первый вариант не очень, поскольку нарушает принцип SOLID и добавляет в иерархию классов Thread.
Поэтому лучше всего использовать Runnable. К тому же, его можно определять как лямбду, как на фото выше.
#java #lesson #multithreading
Для этого вам нужно создать новый класс и унаследовать его от класса Thread или от интерфейса Runnable.
Первый вариант не очень, поскольку нарушает принцип SOLID и добавляет в иерархию классов Thread.
Поэтому лучше всего использовать Runnable. К тому же, его можно определять как лямбду, как на фото выше.
#java #lesson #multithreading
Синхронизация потоков
Потоки, как ни крути, работают с памятью и бывает такое, что два потока могут одновременно обратится и/или изменить один и тот же объект.
Это может привести к ошибке согласованности памяти. Самое простое решение — использовать synchronized.
#java #lesson #multithreading
Потоки, как ни крути, работают с памятью и бывает такое, что два потока могут одновременно обратится и/или изменить один и тот же объект.
Это может привести к ошибке согласованности памяти. Самое простое решение — использовать synchronized.
#java #lesson #multithreading
Жизненный цикл потока
Поток в процессе жизни меняет свой статус. Как только он создан, поток обретает статус NEW.
После того, как мы вызывали
Когда поток жив, но не активен, то статус или BLOCKED (из-за synchonized), или WAITING (
Если поток больше не выполняется (завершился успешно или с ошибкой), то получает TERMINATED.
Узнать состояние потока сейчас можно с
#java #lesson #multithreading
Поток в процессе жизни меняет свой статус. Как только он создан, поток обретает статус NEW.
После того, как мы вызывали
thread.start()
, он обретает состояние RUNNABLE. Когда поток жив, но не активен, то статус или BLOCKED (из-за synchonized), или WAITING (
Thread.join()
), или TIMED_WAITING (thread.sleep()
).Если поток больше не выполняется (завершился успешно или с ошибкой), то получает TERMINATED.
Узнать состояние потока сейчас можно с
thread.getState()
.#java #lesson #multithreading
Проблемы многопоточности: Starvation
Или голодание. В таком случае потоки не заблокированы, но при этом не выполняют работу. Им просто не хватает ресурсов.
Поэтому пока одни потоки на себя берут всё время выполнения, другие не могут выполниться. Есть очень хороший пример.
#java #lesson #multithreading
Или голодание. В таком случае потоки не заблокированы, но при этом не выполняют работу. Им просто не хватает ресурсов.
Поэтому пока одни потоки на себя берут всё время выполнения, другие не могут выполниться. Есть очень хороший пример.
#java #lesson #multithreading
Перегрузка функций
Если у вас есть несколько функций с одним и тем же именем, но они принимают разные типы, то будет вызван тот что больше всего подходит.
Перегрузка позволяет нам менять поведение функции в зависимости от типа или кол-ва параметров, которые мы получили.
Самой простой пример —
#java #lesson #overloading
Если у вас есть несколько функций с одним и тем же именем, но они принимают разные типы, то будет вызван тот что больше всего подходит.
Перегрузка позволяет нам менять поведение функции в зависимости от типа или кол-ва параметров, которые мы получили.
Самой простой пример —
System.out.println()
. Если вы посмотрите определение метода, то увидите что он принимает и String, и char, и int.#java #lesson #overloading
Интерфейсы
Интерфейсы определяют некоторый функционал, который предстоит сделать. Как с целями на новый год, они как бы есть, но их ещё надо реализовать.
В одном классе может использоваться несколько интерфейсов. Внутри интерфейсов может быть только определение! Никаких переменных, никаких реализаций!
Интерфейсы используются, когда нам нужен какой-то функционал, но мы не знаем, как он будет работать. Например, получить данные. По HTTP? Считать с файла? Задать вопрос пользователю?
#java #lesson #oop
Интерфейсы определяют некоторый функционал, который предстоит сделать. Как с целями на новый год, они как бы есть, но их ещё надо реализовать.
В одном классе может использоваться несколько интерфейсов. Внутри интерфейсов может быть только определение! Никаких переменных, никаких реализаций!
Интерфейсы используются, когда нам нужен какой-то функционал, но мы не знаем, как он будет работать. Например, получить данные. По HTTP? Считать с файла? Задать вопрос пользователю?
#java #lesson #oop
.stream()
С Java 8 мы можем обрабатывать коллекции (списки, множества): фильтровать (
Также ничто нам не мешает пройтись по списку (
📌 Документация
#java #lesson #collections
С Java 8 мы можем обрабатывать коллекции (списки, множества): фильтровать (
.filter()
), сортировать (.sorted()
), преобразовывать (.map()
).Также ничто нам не мешает пройтись по списку (
.forEach()
), сохранить в виде другого типа (.collect()
) или посчитать значений (.reduce()
).📌 Документация
#java #lesson #collections
Awesome Java.
A curated list of awesome Java frameworks, libraries and software.
https://github.com/akullpp/awesome-java
#collections
A curated list of awesome Java frameworks, libraries and software.
https://github.com/akullpp/awesome-java
#collections
GitHub
GitHub - akullpp/awesome-java: A curated list of awesome frameworks, libraries and software for the Java programming language.
A curated list of awesome frameworks, libraries and software for the Java programming language. - akullpp/awesome-java
Spring
Этот фреймворк позволяет нам создавать свои веб сайты, REST API, микросервисы, при этом не сильно нагружая программиста.
У него много преимуществ, но я выделю главные: безопасность, скорость популярность (новичкам в разы проще найти новую информацию).
#java #lesson #web
Этот фреймворк позволяет нам создавать свои веб сайты, REST API, микросервисы, при этом не сильно нагружая программиста.
У него много преимуществ, но я выделю главные: безопасность, скорость популярность (новичкам в разы проще найти новую информацию).
#java #lesson #web
Лучшие проекты на Java на Github
RxJava (46к звёзд) — дополнение для Java, которое используется для создания асинхронных и событийных программ.
Elasticsearch (61к звёзд) — RESTfull поисковой движок на Java. На данный момент — самый популярный.
Spring Boot (63к звёзд) — в разы упрощает разработку приложений на spring.
#java #lesson #github
RxJava (46к звёзд) — дополнение для Java, которое используется для создания асинхронных и событийных программ.
Elasticsearch (61к звёзд) — RESTfull поисковой движок на Java. На данный момент — самый популярный.
Spring Boot (63к звёзд) — в разы упрощает разработку приложений на spring.
#java #lesson #github
Spring
Этот фреймворк позволяет нам создавать свои веб сайты, REST API, микросервисы, при этом не сильно нагружая программиста.
У него много преимуществ, но я выделю главные: безопасность, скорость популярность (новичкам в разы проще найти новую информацию).
#java #lesson #web
Этот фреймворк позволяет нам создавать свои веб сайты, REST API, микросервисы, при этом не сильно нагружая программиста.
У него много преимуществ, но я выделю главные: безопасность, скорость популярность (новичкам в разы проще найти новую информацию).
#java #lesson #web
Пишем свой сайт
Если вам вдруг захотелось написать свой сайт, так ещё и на Java, без всяких велосипедов и кучи библиотек, то вам поможет grails.
Этот фреймворк основан на Spring Boot, использует упрощённый язык Groovy и даже позволяет запускать React и Angular.
📌 Документация
#java #lesson #web
Если вам вдруг захотелось написать свой сайт, так ещё и на Java, без всяких велосипедов и кучи библиотек, то вам поможет grails.
Этот фреймворк основан на Spring Boot, использует упрощённый язык Groovy и даже позволяет запускать React и Angular.
📌 Документация
#java #lesson #web
☕️ Тестируем Java
Протестированный код лучше, чем код с кучей багов. Чтобы ручками не проверять его работоспособность, пишут автоматические тесты.
JUnit — одна из самых популярных библиотек для проверки кода на Java. Она позволит вам за пару минут проверить функционал.
📖 Документация
#java #lesson #testing
Протестированный код лучше, чем код с кучей багов. Чтобы ручками не проверять его работоспособность, пишут автоматические тесты.
JUnit — одна из самых популярных библиотек для проверки кода на Java. Она позволит вам за пару минут проверить функционал.
📖 Документация
#java #lesson #testing
Log4j 2
Каким бы ни было ваше приложение, всё равно стоит вести логи, иначе вы не поймёте, кто или что сломало ваш проект на продакшене.
Библиотек очень много (Log4j, Log5j, Log4j 2, Logback, SLF4J), но лучшей библиотекой для логирования сейчас является Log4j 2.
📖 Документация
#java #lesson #logging
Каким бы ни было ваше приложение, всё равно стоит вести логи, иначе вы не поймёте, кто или что сломало ваш проект на продакшене.
Библиотек очень много (Log4j, Log5j, Log4j 2, Logback, SLF4J), но лучшей библиотекой для логирования сейчас является Log4j 2.
📖 Документация
#java #lesson #logging