OutOfMemoryError
«OutOfMemoryError» ошибка в Java, указывающая на то, что приложению не хватило памяти для выполнения операции. Это может произойти, когда программа пытается выделить больше памяти, чем доступно в куче (heap), которая используется для хранения объектов и данных во время выполнения Java-приложения.
В результате JVM (Java Virtual Machine) больше не может выделить дополнительную память, и возникает ошибка «OutOfMemoryError».
#для_начинающих
«OutOfMemoryError» ошибка в Java, указывающая на то, что приложению не хватило памяти для выполнения операции. Это может произойти, когда программа пытается выделить больше памяти, чем доступно в куче (heap), которая используется для хранения объектов и данных во время выполнения Java-приложения.
В результате JVM (Java Virtual Machine) больше не может выделить дополнительную память, и возникает ошибка «OutOfMemoryError».
#для_начинающих
👍13❤1
Лямбды как параметры и результаты методов
В Java лямбда-выражения — это компактный способ представления анонимных функций. Они часто используются для передачи функциональности как параметров в методы и возвращаются в качестве результатов методов, когда требуется работать с функциональным программированием.
#для_продвинутых
В Java лямбда-выражения — это компактный способ представления анонимных функций. Они часто используются для передачи функциональности как параметров в методы и возвращаются в качестве результатов методов, когда требуется работать с функциональным программированием.
#для_продвинутых
👍9❤2
Удачное и неудачное использование Optional
Удачным примером использования
Неудачным примером использования
Optional — это контейнер для объекта, который может содержать или не содержать значение null.Удачным примером использования
Optional является метод orElseGet(), который позволяет вернуть значение по умолчанию, если значение Optional равно null. (изображение 1)Неудачным примером использования
Optional является метод get(), который вызывает исключение NoSuchElementException, если значение Optional равно null. (изображение 2)👍9
Метод ordinal() в Enum
Метод
#для_начинающих
Метод
ordinal() является частью класса Enum. Класс Enum используется для создания типов данных, представляющих ограниченное множество значений, таких как перечисления (enumerations). Метод ordinal() возвращает порядковый номер (индекс) конкретного элемента перечисления в объявленном порядке.#для_начинающих
🔥9
Агрегация
Агрегация — это отношение между классами, когда один класс содержит ссылки на объекты другого класса. Это также называется «композицией» или «составным объектом». Важно отметить, что агрегация является одним из способов управления отношениями между классами в ООП.
Примером агрегации может быть, например, класс «Университет», который содержит коллекцию объектов класса «Студент». В этом случае, «Университет» агрегирует (содержит) множество объектов «Студент». Важно, чтобы объекты «Студент» оставались независимыми и могли существовать отдельно от объекта «Университет».
#для_продвинутых
Агрегация — это отношение между классами, когда один класс содержит ссылки на объекты другого класса. Это также называется «композицией» или «составным объектом». Важно отметить, что агрегация является одним из способов управления отношениями между классами в ООП.
Примером агрегации может быть, например, класс «Университет», который содержит коллекцию объектов класса «Студент». В этом случае, «Университет» агрегирует (содержит) множество объектов «Студент». Важно, чтобы объекты «Студент» оставались независимыми и могли существовать отдельно от объекта «Университет».
#для_продвинутых
👍16
Абстрактные классы
Абстрактные классы — это классы, которые не могут быть инстанциированы напрямую, то есть нельзя создать объект абстрактного класса при помощи оператора new. Они предназначены для обеспечения базовой структуры и функциональности для других классов, которые наследуются от них. Абстрактные классы представляют собой в некотором роде «заготовки» для подклассов, указывая на общие атрибуты и методы, которые они должны реализовать.
#для_начинающих
Абстрактные классы — это классы, которые не могут быть инстанциированы напрямую, то есть нельзя создать объект абстрактного класса при помощи оператора new. Они предназначены для обеспечения базовой структуры и функциональности для других классов, которые наследуются от них. Абстрактные классы представляют собой в некотором роде «заготовки» для подклассов, указывая на общие атрибуты и методы, которые они должны реализовать.
#для_начинающих
👍8❤2
Стек-трейс
Стек-трейс (stack trace) представляет собой список вызовов методов в обратном хронологическом порядке, начиная с метода, в котором произошло исключение. Стек-трейс позволяет отследить, какие методы были вызваны перед возникновением исключения, и предоставляет информацию о местоположении, где произошло исключение.
#для_продвинутых
Стек-трейс (stack trace) представляет собой список вызовов методов в обратном хронологическом порядке, начиная с метода, в котором произошло исключение. Стек-трейс позволяет отследить, какие методы были вызваны перед возникновением исключения, и предоставляет информацию о местоположении, где произошло исключение.
#для_продвинутых
👍14
Checked exceptions
Checked exceptions — это исключения, которые должны быть обработаны или объявлены в сигнатуре метода при помощи
Если вы вызываете метод, который объявляет checked exception, вы должны либо обработать это исключение с помощью конструкции
#для_начинающих
Checked exceptions — это исключения, которые должны быть обработаны или объявлены в сигнатуре метода при помощи
throws ключевого слова. Они обычно представляют собой ситуации, которые программист может предвидеть и обработать. Примеры таких исключений включают: IOException, SQLException, FileNotFoundException.Если вы вызываете метод, который объявляет checked exception, вы должны либо обработать это исключение с помощью конструкции
try-catch, либо продолжить передачу исключения вверх по стеку вызовов.#для_начинающих
👍11
unchecked exception
unchecked exception (непроверяемое исключение) относится к исключениям, которые не требуется обязательно обрабатывать или объявлять в секции
#для_начинающих
unchecked exception (непроверяемое исключение) относится к исключениям, которые не требуется обязательно обрабатывать или объявлять в секции
throws метода. Эти исключения наследуются от класса RuntimeException или его подклассов. Они обычно свидетельствуют о ситуациях, которые могут возникнуть в ходе выполнения программы, но которые, как правило, связаны с ошибками программирования или непредвиденными ситуациями.#для_начинающих
👍13❤1
High cohesion
High cohesion (высокая связанность) — это принцип проектирования программного обеспечения, который означает, что компонент или модуль программы должен иметь чёткую и ограниченную ответственность, а все его функции и элементы должны быть связаны логически и тесно между собой. Это позволяет создать более структурированный и легко поддерживаемый код.
В Java принцип высокой связанности можно применить, следуя ряду практик:
1. Разделение функциональности
2. Ограниченная ответственность
3. Минимизация зависимостей
4. Принцип единственной ответственности (Single Responsibility Principle)
5. Группировка по функциональности
#для_продвинутых
High cohesion (высокая связанность) — это принцип проектирования программного обеспечения, который означает, что компонент или модуль программы должен иметь чёткую и ограниченную ответственность, а все его функции и элементы должны быть связаны логически и тесно между собой. Это позволяет создать более структурированный и легко поддерживаемый код.
В Java принцип высокой связанности можно применить, следуя ряду практик:
1. Разделение функциональности
2. Ограниченная ответственность
3. Минимизация зависимостей
4. Принцип единственной ответственности (Single Responsibility Principle)
5. Группировка по функциональности
#для_продвинутых
👍6❤1
Метод clone()
Метод
Однако следует помнить, что метод clone() выполняет поверхностное копирование только для примитивных типов данных и ссылок на объекты. Для глубокого клонирования, то есть создания копии объекта и всех его вложенных объектов, вам потребуется реализовать собственную логику клонирования, чтобы гарантировать, что все вложенные объекты также будут скопированы.
#для_начинающих
Метод
clone() предназначен для создания поверхностной копии (shallow copy) объекта. Это означает, что он создает новый объект, который является копией исходного объекта, но содержит ссылки на те же самые объекты внутри, что и исходный объект. Процесс клонирования выполняется с помощью реализации интерфейса Cloneable.Однако следует помнить, что метод clone() выполняет поверхностное копирование только для примитивных типов данных и ссылок на объекты. Для глубокого клонирования, то есть создания копии объекта и всех его вложенных объектов, вам потребуется реализовать собственную логику клонирования, чтобы гарантировать, что все вложенные объекты также будут скопированы.
#для_начинающих
👍6
Прокси-объект
Прокси-объект (Proxy Object) — это объект, который действует как промежуточный слой между клиентским кодом и реальным объектом. Прокси-объект позволяет выполнять дополнительные действия перед или после вызовов методов реального объекта, а также контролировать доступ к этим методам.
Прокси-объекты в Java реализуются с помощью интерфейсов и динамического создания классов во время выполнения. Для создания прокси-объекта в Java существует два основных способа: с использованием JDK Proxy и с использованием библиотеки CGLIB.
#для_продвинутых
Прокси-объект (Proxy Object) — это объект, который действует как промежуточный слой между клиентским кодом и реальным объектом. Прокси-объект позволяет выполнять дополнительные действия перед или после вызовов методов реального объекта, а также контролировать доступ к этим методам.
Прокси-объекты в Java реализуются с помощью интерфейсов и динамического создания классов во время выполнения. Для создания прокси-объекта в Java существует два основных способа: с использованием JDK Proxy и с использованием библиотеки CGLIB.
#для_продвинутых
👍8
👍20❤2
Фундаментальное руководство по пакетам в Java
Java-пакеты реализуют так называемое пространство имен (namespace), позволяющее использовать в проекте файлы с одинаковыми именами.
Смотреть статью
Java-пакеты реализуют так называемое пространство имен (namespace), позволяющее использовать в проекте файлы с одинаковыми именами.
Смотреть статью
👍6❤3
Ковариантность типов
Ковариантность типов — это вариантность типов в системе типов языка программирования. Ковариантность означает, что типы могут быть связаны отношением «родитель-потомок» в иерархии классов или интерфейсов, и этот относительный порядок сохраняется при передаче аргументов методам или возвращении значений из методов. Другими словами, ковариантность позволяет использовать подтип (потомок) вместо его родителя без необходимости явного приведения типов.
#для_начинающих
Ковариантность типов — это вариантность типов в системе типов языка программирования. Ковариантность означает, что типы могут быть связаны отношением «родитель-потомок» в иерархии классов или интерфейсов, и этот относительный порядок сохраняется при передаче аргументов методам или возвращении значений из методов. Другими словами, ковариантность позволяет использовать подтип (потомок) вместо его родителя без необходимости явного приведения типов.
#для_начинающих
👍15❤1
Что такое «fail-fast поведение»?
Fail-fast поведение (fail-fast behavior) — это принцип в программировании, который подразумевает, что программа должна обнаруживать ошибки и некорректные условия как можно раньше и немедленно генерировать исключения или останавливать выполнение, чтобы предотвратить дальнейшие некорректные операции и минимизировать возможные повреждения данных или неправильное поведение программы.
В Java fail-fast поведение реализуется с использованием механизмов. Если в процессе выполнения программы обнаруживается какое-либо нарушение, например, попытка доступа за пределы массива или передача недопустимого аргумента в метод, генерируется исключение, и выполнение программы прерывается.
#для_продвинутых
Fail-fast поведение (fail-fast behavior) — это принцип в программировании, который подразумевает, что программа должна обнаруживать ошибки и некорректные условия как можно раньше и немедленно генерировать исключения или останавливать выполнение, чтобы предотвратить дальнейшие некорректные операции и минимизировать возможные повреждения данных или неправильное поведение программы.
В Java fail-fast поведение реализуется с использованием механизмов. Если в процессе выполнения программы обнаруживается какое-либо нарушение, например, попытка доступа за пределы массива или передача недопустимого аргумента в метод, генерируется исключение, и выполнение программы прерывается.
#для_продвинутых
👍8
Прямой обход дерева
Прямой обход дерева (pre-order traversal) — это один из способов обхода бинарного дерева. В этом способе сначала посещается корневой узел, затем левое поддерево и затем правое поддерево. Прямой обход широко используется для вывода структуры дерева и выполнения операций на каждом узле в нужном порядке.
#для_продвинутых
Прямой обход дерева (pre-order traversal) — это один из способов обхода бинарного дерева. В этом способе сначала посещается корневой узел, затем левое поддерево и затем правое поддерево. Прямой обход широко используется для вывода структуры дерева и выполнения операций на каждом узле в нужном порядке.
#для_продвинутых
👍10
Мёртвая нить
Мёртвая нить (deadlock) означает ситуацию, когда две или более нити (потока исполнения) блокируются и ожидают ресурсы, которые удерживают друг друга, что приводит к тому, что ни одна из них не может продолжить свою работу. В итоге программа оказывается в застойном состоянии, так как нити блокируют друг друга и не могут разблокироваться без внешнего вмешательства.
Чтобы избежать мёртвой нити, следует стремиться к тому, чтобы нити блокировали ресурсы в одном и том же порядке. Если это невозможно, можно использовать техники, такие как использование метода
#для_начинающих
Мёртвая нить (deadlock) означает ситуацию, когда две или более нити (потока исполнения) блокируются и ожидают ресурсы, которые удерживают друг друга, что приводит к тому, что ни одна из них не может продолжить свою работу. В итоге программа оказывается в застойном состоянии, так как нити блокируют друг друга и не могут разблокироваться без внешнего вмешательства.
Чтобы избежать мёртвой нити, следует стремиться к тому, чтобы нити блокировали ресурсы в одном и том же порядке. Если это невозможно, можно использовать техники, такие как использование метода
tryLock() из java.util.concurrent.locks.Lock, которые позволяют более гибко управлять блокировками и избегать мёртвой нити.#для_начинающих
👍9🔥1😱1