Кроссплатформенность
Это способность одного и того же кода запускаться на разных машинах, на разных операционных системах и работать при этом стабильно.
В Java такое достигается за счёт JVM (Java virtual machine). Эта система берёт ваш код и переводит его в понятный компьютеру язык.
Задач у JVM, на самом деле, несколько больше. Виртуальная машина ещё занимается организацией памяти и сборкой мусора.
#java #lesson #theory
Это способность одного и того же кода запускаться на разных машинах, на разных операционных системах и работать при этом стабильно.
В Java такое достигается за счёт JVM (Java virtual machine). Эта система берёт ваш код и переводит его в понятный компьютеру язык.
Задач у JVM, на самом деле, несколько больше. Виртуальная машина ещё занимается организацией памяти и сборкой мусора.
#java #lesson #theory
Generics
Обобщения (Generics) позволяют нам уйти от жёстких ограничений используемых типов. Так мы сохраняем типобезопасность, но при этом используем разные классы.
Возьмём, к примеру, банковский счёт, где id может быть и Integer, и String, и UUID. Тогда нам надо создать класс, который принимает тип T и подставляет его там, где нужно.
При вызове обобщения передаются так:
#lesson #java #theory
Обобщения (Generics) позволяют нам уйти от жёстких ограничений используемых типов. Так мы сохраняем типобезопасность, но при этом используем разные классы.
Возьмём, к примеру, банковский счёт, где id может быть и Integer, и String, и UUID. Тогда нам надо создать класс, который принимает тип T и подставляет его там, где нужно.
При вызове обобщения передаются так:
Account<Integer>
. На месте, где раньше стоял T будет Integer.#lesson #java #theory
Atomic
Блокировки тяжеловесны, они мешают остальным потокам выполнятся, так как блокируют их, что сильно снижает производительность.
Разработчики придумали неблокирующие алгоритмы. Их сложнее реализовывать, но они более масштабируемые и быстрые.
Классы для реализации неблокирующих программ находятся в пакете
📌 Документация
#java #lesson #concurrent
Блокировки тяжеловесны, они мешают остальным потокам выполнятся, так как блокируют их, что сильно снижает производительность.
Разработчики придумали неблокирующие алгоритмы. Их сложнее реализовывать, но они более масштабируемые и быстрые.
Классы для реализации неблокирующих программ находятся в пакете
java.util.concurrent.atomic
. 📌 Документация
#java #lesson #concurrent
Atomic
Блокировки тяжеловесны, они мешают остальным потокам выполнятся, так как блокируют их, что сильно снижает производительность.
Разработчики придумали неблокирующие алгоритмы. Их сложнее реализовывать, но они более масштабируемые и быстрые.
Классы для реализации неблокирующих программ находятся в пакете
📌 Документация
#java #lesson #concurrent
Блокировки тяжеловесны, они мешают остальным потокам выполнятся, так как блокируют их, что сильно снижает производительность.
Разработчики придумали неблокирующие алгоритмы. Их сложнее реализовывать, но они более масштабируемые и быстрые.
Классы для реализации неблокирующих программ находятся в пакете
java.util.concurrent.atomic
. 📌 Документация
#java #lesson #concurrent
javadoc
Это генератор документации в HTML-формате из комментариев исходного кода Java. Комментарии для документации определяются так:
У javadoc есть дескрипторы:
#java #lesson #javadoc
Это генератор документации в HTML-формате из комментариев исходного кода Java. Комментарии для документации определяются так:
/** комментирование документации */
.У javadoc есть дескрипторы:
@author
, @version
, @since
, @see
, @param
, @return
, которые определяют какое значение мы записываем в комментариях.#java #lesson #javadoc
Не оставляйте try/catch блоки пустыми
Обязательно выводите ошибки или обрабатывайте их! Если их игнорировать, будет трудно найти баг и придётся дебажить код.
Исключения стоит выводить хотя бы через
#java #lesson #best_practices
Обязательно выводите ошибки или обрабатывайте их! Если их игнорировать, будет трудно найти баг и придётся дебажить код.
Исключения стоит выводить хотя бы через
System.out.println()
, но ещё лучше воспользоваться логгером log4j.#java #lesson #best_practices
Scanner
Класс, способный получать данные от пользователя через командную строку. На вход Scanner принимает строку или I/O объект.
Если это String, то объект можно использовать для последовательного считывания строк.
Если это I/O объект, то позволяет считывать разные типы данных: строки, числа и подобное. Для получения данных от пользователя, передаём
#java #lesson #scanner
Класс, способный получать данные от пользователя через командную строку. На вход Scanner принимает строку или I/O объект.
Если это String, то объект можно использовать для последовательного считывания строк.
Если это I/O объект, то позволяет считывать разные типы данных: строки, числа и подобное. Для получения данных от пользователя, передаём
System.in
.#java #lesson #scanner
Stream API
Мощный инструмент для обработки данных в Java. Позволяет выполнять операции над последовательностями элементов декларативным способом, а не с помощью императивных циклов.
Первым делом из коллекции нужно получить
#java #lesson #stream
Мощный инструмент для обработки данных в Java. Позволяет выполнять операции над последовательностями элементов декларативным способом, а не с помощью императивных циклов.
Первым делом из коллекции нужно получить
.stream()
, а потом вызывать нужную функцию: filter()
, reduce()
и другие. #java #lesson #stream
Ключевые типы и их классы
Структура языка Java сильно завязана на ООП. По этой причине, практически всё с чем вы взаимодействуете в Java — объект.
Даже привычные для всех типы int, float, char и так далее — это всё сокращения объекта. Другими словами, их легко можно заменить соответствующими им классами: Integer, Float и Character.
Однако, у сокращений типов есть одна особенность — они не могут быть null.
#java #lesson #theory
Структура языка Java сильно завязана на ООП. По этой причине, практически всё с чем вы взаимодействуете в Java — объект.
Даже привычные для всех типы int, float, char и так далее — это всё сокращения объекта. Другими словами, их легко можно заменить соответствующими им классами: Integer, Float и Character.
Однако, у сокращений типов есть одна особенность — они не могут быть null.
#java #lesson #theory
implements и extends
Одной из основных догм в ООП является наследование. В Java можно наследовать как и классы, так и интерфейсы, но делается это по-разному.
Ключевое слово extends привязывает к классу родительский класс и только один. В своё время ключевое слово implements привязывает к классу один или несколько интерфейсов, которые класс должен реализовать.
#java #lesson #oop
Одной из основных догм в ООП является наследование. В Java можно наследовать как и классы, так и интерфейсы, но делается это по-разному.
Ключевое слово extends привязывает к классу родительский класс и только один. В своё время ключевое слово implements привязывает к классу один или несколько интерфейсов, которые класс должен реализовать.
#java #lesson #oop
В чём разница между абстрактными классами и интерфейсами?
С первого взгляда эти два объекта выполняют одну и тоже функцию — планирование классов. Однако не всё так очевидно.
Абстрактные классы — это такие же обычные классы, но некоторые их методы можно «оставить на потом». Другими словами метод объявленный ключевым словом abstract не надо реализовывать, он будет реализован в дочерних объектах.
Интерфейсы же являются описанием структуры методов класса, которые нужно реализовать. В интерфейсах нельзя объявлять переменные.
#java #lesson #oop
С первого взгляда эти два объекта выполняют одну и тоже функцию — планирование классов. Однако не всё так очевидно.
Абстрактные классы — это такие же обычные классы, но некоторые их методы можно «оставить на потом». Другими словами метод объявленный ключевым словом abstract не надо реализовывать, он будет реализован в дочерних объектах.
Интерфейсы же являются описанием структуры методов класса, которые нужно реализовать. В интерфейсах нельзя объявлять переменные.
#java #lesson #oop
Stream Filter
Метод Stream::filter позволяет отфильтровывать значения из набора данных.
Синтаксис:
#java #lesson #stream
Метод Stream::filter позволяет отфильтровывать значения из набора данных.
Синтаксис:
.filter(object -> condition)
Работает он предельно просто: он проходит по каждому элементу из массива и проверяет его с помощью лямбды object -> condition
. Если результат равен true, значение оставляем в массиве.#java #lesson #stream
Кортежи в Java
Часто бывает ситуация, когда надо вернуть из метода несколько объектов одного разного типа. На этот случай придуманы кортежи.
В Java кортежи реализованы интерфейсом Cortege<F, S> и имплементированы классом CortageChain. Чтобы хранить в нём данные, достаточно с помощью дженериков задать типы и присвоить им значения.
Важной особенностью кортежей является возможность выстраивать цепочки, например так:
Часто бывает ситуация, когда надо вернуть из метода несколько объектов одного разного типа. На этот случай придуманы кортежи.
В Java кортежи реализованы интерфейсом Cortege<F, S> и имплементированы классом CortageChain. Чтобы хранить в нём данные, достаточно с помощью дженериков задать типы и присвоить им значения.
Важной особенностью кортежей является возможность выстраивать цепочки, например так:
Cortege<Long, Cortege<String, Cortege<Float, Cortege.End>>>
#java #lesson #collectionsТеория дженериков в Java
Дженерики — это невероятно важная часть языка Java, которую вы используете повсеместно. Их суть в обобщении типов, тем самым делая классы и методы гибкими.
Использовать дженерики можно в классах и методы. Обозначаются они стрелочными скобками и именем типа <T> (примеры вы можете увидеть выше).
По сути дженерики это лишь синтаксический сахар, поскольку в скомпилированном коде они не отличимы от обычного преобразования типов.
#java #lesson #oop
Дженерики — это невероятно важная часть языка Java, которую вы используете повсеместно. Их суть в обобщении типов, тем самым делая классы и методы гибкими.
Использовать дженерики можно в классах и методы. Обозначаются они стрелочными скобками и именем типа <T> (примеры вы можете увидеть выше).
По сути дженерики это лишь синтаксический сахар, поскольку в скомпилированном коде они не отличимы от обычного преобразования типов.
#java #lesson #oop
Рефлексии в Java
Рефлексия — это механизм, который позволяет получить данные из структуры классов, методов и полей.
Сам же механизм рефлексии позволяет обрабатывать типы, отсутствующие при компиляции, но появившиеся во время выполнения программы.
Рефлексия и наличие логически целостной модели выдачи информации об ошибках дает возможность создавать корректный динамический код.
#java #lesson #theory
Рефлексия — это механизм, который позволяет получить данные из структуры классов, методов и полей.
Сам же механизм рефлексии позволяет обрабатывать типы, отсутствующие при компиляции, но появившиеся во время выполнения программы.
Рефлексия и наличие логически целостной модели выдачи информации об ошибках дает возможность создавать корректный динамический код.
#java #lesson #theory
Аннотации в Java
По сути своей аннотации — это метаданные объектов структуры класса и самого класса, который в дальнейшем обрабатывается.
Аннотации бывают встроенными, а также можно создать свои, но самые ключевые из них это Target и Retention.
Target принимает один или несколько типов, которым можно привязать дочернюю аннотацию. Получить их можно из ElementType.
Retention же обозначает на каком уровне будет находится и обрабатываться аннотация. Всего их три: RUNTIME, CLASS и SOURCE
#java #lesson #reflection
По сути своей аннотации — это метаданные объектов структуры класса и самого класса, который в дальнейшем обрабатывается.
Аннотации бывают встроенными, а также можно создать свои, но самые ключевые из них это Target и Retention.
Target принимает один или несколько типов, которым можно привязать дочернюю аннотацию. Получить их можно из ElementType.
Retention же обозначает на каком уровне будет находится и обрабатываться аннотация. Всего их три: RUNTIME, CLASS и SOURCE
#java #lesson #reflection
Немного про JVM
В отличии от JIT компиляторов таких языков как C/C++, код Java компилируется в свой байткод. По сути это ваш код, сжатый и упрощённый до простых операций.
Обрабатывать этот байткод будет JRE и виртуальная машина JVM — выделенная область для процессов Java со своей инфраструктурой.
Такой способ компиляции имеет много преимуществ, в частности — кроссплатформенность.
Спектр поддерживаемых устройств невероятно велик: от кнопочных телефоном и банкоматов до компьютеров и сервером NASA.
#java #theory
В отличии от JIT компиляторов таких языков как C/C++, код Java компилируется в свой байткод. По сути это ваш код, сжатый и упрощённый до простых операций.
Обрабатывать этот байткод будет JRE и виртуальная машина JVM — выделенная область для процессов Java со своей инфраструктурой.
Такой способ компиляции имеет много преимуществ, в частности — кроссплатформенность.
Спектр поддерживаемых устройств невероятно велик: от кнопочных телефоном и банкоматов до компьютеров и сервером NASA.
#java #theory