Класс Scanner представляет собой инструмент для считывания данных из различных источников, таких как стандартный ввод (клавиатура), файлы и строки. Он является частью пакета
Основные методы и возможности класса Scanner включают:
1️⃣ Считывание различных типов данных:
2️⃣ Управление разделителями: метод
3️⃣ Проверка наличия данных: методы
4️⃣ Обработка исключений: методы
Класс Scanner позволяет удобно считывать и обрабатывать ввод от пользователя или из файлов, что делает его полезным инструментом при создании интерактивных приложений и обработке входных данных.
java.util, и используется для обработки ввода данных в приложениях.Основные методы и возможности класса Scanner включают:
1️⃣ Считывание различных типов данных:
nextInt(), nextLong(), nextDouble() считывают числа, а next() и nextLine() считывают строки.2️⃣ Управление разделителями: метод
useDelimiter(String pattern) позволяет настроить пользовательский разделитель для ввода, по умолчанию Scanner использует пробелы как разделители.3️⃣ Проверка наличия данных: методы
hasNextInt(), hasNextDouble(), hasNext() позволяют проверить наличие следующего значения определенного типа во входных данных.4️⃣ Обработка исключений: методы
nextInt(), nextDouble() и другие могут вызвать исключения типа InputMismatchException, если ввод не соответствует ожидаемому типу данных.Класс Scanner позволяет удобно считывать и обрабатывать ввод от пользователя или из файлов, что делает его полезным инструментом при создании интерактивных приложений и обработке входных данных.
👍18🔥4👌1
В Java цикл for-each позволяет перебирать элементы массивов, коллекций и других итерируемых объектов без необходимости использовать индексы или итераторы. Однако, для того чтобы вы могли использовать for-each для перебора элементов своего собственного класса, этот класс должен реализовать интерфейс
В результате можно использовать for-each для перебора элементов этого класса, как если бы это был обычный массив или коллекция.
Вы можете адаптировать этот пример для своих собственных классов, реализуя интерфейс
Iterable и предоставить метод iterator(), возвращающий объект, реализующий интерфейс Iterator.В результате можно использовать for-each для перебора элементов этого класса, как если бы это был обычный массив или коллекция.
Вы можете адаптировать этот пример для своих собственных классов, реализуя интерфейс
Iterable и предоставив соответствующий итератор, чтобы использовать for-each для вашего класса.👍20👏2
Наследование конструкторов
В Java конструкторы не наследуются в том смысле, в котором наследуются методы и поля. Конструкторы - это специальные методы, используемые для инициализации объектов класса, и они не наследуются автоматически от суперкласса.
Однако в подклассе вы можете вызвать конструктор суперкласса с помощью ключевого слова
Таким образом, если вы хотите в подклассе сохранить все конструкторы суперкласса, то их нужно явно объявить в подклассе.
В Java конструкторы не наследуются в том смысле, в котором наследуются методы и поля. Конструкторы - это специальные методы, используемые для инициализации объектов класса, и они не наследуются автоматически от суперкласса.
Однако в подклассе вы можете вызвать конструктор суперкласса с помощью ключевого слова
super. Это позволяет вам использовать конструкторы суперкласса для инициализации наследуемых полей и выполнения дополнительных операций, связанных с наследованием.Таким образом, если вы хотите в подклассе сохранить все конструкторы суперкласса, то их нужно явно объявить в подклассе.
👍14🔥1👏1
Java 9 ввел важное изменение в структуру приложений — модульную систему Java (Java Platform Module System, JPMS). Эта система была внедрена для улучшения масштабируемости, обеспечения лучшей изоляции и повышения устойчивости приложений. Вот основные концепции модульной системы:
1️⃣ Модуль (Module): Модуль в Java представляет собой логическую группу пакетов, которая обеспечивает определенный уровень инкапсуляции. Модули позволяют явно определить, какие классы или пакеты являются открытыми для других модулей, а какие остаются внутренними (закрытыми).
2️⃣ Декларация модуля (Module Declaration): Файл module-info.java добавляется в корневой каталог модуля и содержит информацию о модуле, такую как его имя, зависимости от других модулей и экспортируемые пакеты.
3️⃣ Команды модулей (Module Commands): Java 9 ввела новые команды, связанные с модулями, такие как --module-path для указания пути к модульным файлам, и --module для запуска конкретного модуля.
4️⃣ Проекции модулей (Module Resolutions): Модульная система предоставляет новый механизм разрешения зависимостей между модулями, что делает управление зависимостями более эффективным.
5️⃣ Системные модули (System Modules): Java 9 включает ряд системных модулей, таких как
Использование модульной системы в Java позволяет более четко определять зависимости и предоставляет механизмы для управления видимостью классов и пакетов. Это сделано с целью сделать код более чистым, безопасным и удобным для поддержки в больших проектах.
1️⃣ Модуль (Module): Модуль в Java представляет собой логическую группу пакетов, которая обеспечивает определенный уровень инкапсуляции. Модули позволяют явно определить, какие классы или пакеты являются открытыми для других модулей, а какие остаются внутренними (закрытыми).
2️⃣ Декларация модуля (Module Declaration): Файл module-info.java добавляется в корневой каталог модуля и содержит информацию о модуле, такую как его имя, зависимости от других модулей и экспортируемые пакеты.
3️⃣ Команды модулей (Module Commands): Java 9 ввела новые команды, связанные с модулями, такие как --module-path для указания пути к модульным файлам, и --module для запуска конкретного модуля.
4️⃣ Проекции модулей (Module Resolutions): Модульная система предоставляет новый механизм разрешения зависимостей между модулями, что делает управление зависимостями более эффективным.
5️⃣ Системные модули (System Modules): Java 9 включает ряд системных модулей, таких как
java.base, java.sql, и другие, которые предоставляют основные библиотеки и функциональность.Использование модульной системы в Java позволяет более четко определять зависимости и предоставляет механизмы для управления видимостью классов и пакетов. Это сделано с целью сделать код более чистым, безопасным и удобным для поддержки в больших проектах.
👍12🔥2❤1🥰1👏1
XPath (XML Path Language) — язык запросов к элементам XML-документа. Разработан для организации доступа к частям документа XML в файлах трансформации XSLT и является стандартом консорциума W3C. XPath призван реализовать навигацию по DOM в XML. В XPath используется компактный синтаксис, отличный от принятого в XML.
Строка XPath описывает способ выбора нужных элементов из массива элементов, которые могут содержать вложенные элементы. Начинается отбор с переданного множества элементов, на каждом шаге пути отбираются элементы, соответствующие выражению шага, и в результате оказывается отобрано подмножество элементов, соответствующих данному пути.
JXPath предоставляет API для обхода графов JavaBeans, DOM и других типов объектов с использованием синтаксиса XPath.
С помощью JXPath вы можете читать и записывать свойства JavaBeans, получать и устанавливать элементы массивов, коллекций, Map, различных объектов контекста в сервлетах и т. д. Другими словами, JXPath применяет концепции XPath к альтернативным объектным моделям.
При работе со сложными структурами данных, JXPath может здорово сократить код.
Строка XPath описывает способ выбора нужных элементов из массива элементов, которые могут содержать вложенные элементы. Начинается отбор с переданного множества элементов, на каждом шаге пути отбираются элементы, соответствующие выражению шага, и в результате оказывается отобрано подмножество элементов, соответствующих данному пути.
JXPath предоставляет API для обхода графов JavaBeans, DOM и других типов объектов с использованием синтаксиса XPath.
С помощью JXPath вы можете читать и записывать свойства JavaBeans, получать и устанавливать элементы массивов, коллекций, Map, различных объектов контекста в сервлетах и т. д. Другими словами, JXPath применяет концепции XPath к альтернативным объектным моделям.
При работе со сложными структурами данных, JXPath может здорово сократить код.
👍10❤1🔥1🥰1
Объектно-ориентированное программирование (ООП) - это парадигма программирования, которая базируется на концепции "объектов". Она предоставляет способ организации кода, который позволяет разрабатывать более модульные, масштабируемые и легко поддерживаемые программы. Основными концепциями ООП являются классы, объекты, инкапсуляция, наследование и полиморфизм. Вот более подробное описание этих концепций:
1⃣ Классы и объекты: Класс - это шаблон или чертеж, описывающий структуру и поведение объекта. Объект - это экземпляр класса, который содержит данные и методы, определенные в этом классе. Классы служат для определения объектов, а объекты - для создания конкретных экземпляров.
2⃣ Инкапсуляция: Инкапсуляция - это механизм, который позволяет скрыть внутренние детали реализации класса от внешнего мира и предоставлять доступ только к необходимым данным и методам. Это делается с помощью модификаторов доступа, таких как private, protected и public.
3⃣ Наследование: Наследование позволяет создавать новые классы на основе существующих классов, наследуя их свойства и методы. Это способствует повторному использованию кода и созданию иерархии классов. Родительский класс называется базовым классом, а наследующий класс - производным.
4⃣ Полиморфизм: Полиморфизм означает способность объектов разных классов реагировать на одну и ту же операцию по-разному. Это может быть достигнуто с помощью перегрузки операторов, абстрактных классов и интерфейсов. Полиморфизм позволяет упростить обработку объектов разных типов и сделать код более гибким.
ООП способствует разделению ответственности в программе, облегчает ее сопровождение и расширение, а также повышает повторное использование кода. Часто используется в разработке больших и сложных приложений, где необходимо управлять множеством объектов и их взаимодействием. Популярные языки программирования, поддерживающие ООП, включают Java, C++, C#, Python, и многие другие.
1⃣ Классы и объекты: Класс - это шаблон или чертеж, описывающий структуру и поведение объекта. Объект - это экземпляр класса, который содержит данные и методы, определенные в этом классе. Классы служат для определения объектов, а объекты - для создания конкретных экземпляров.
2⃣ Инкапсуляция: Инкапсуляция - это механизм, который позволяет скрыть внутренние детали реализации класса от внешнего мира и предоставлять доступ только к необходимым данным и методам. Это делается с помощью модификаторов доступа, таких как private, protected и public.
3⃣ Наследование: Наследование позволяет создавать новые классы на основе существующих классов, наследуя их свойства и методы. Это способствует повторному использованию кода и созданию иерархии классов. Родительский класс называется базовым классом, а наследующий класс - производным.
4⃣ Полиморфизм: Полиморфизм означает способность объектов разных классов реагировать на одну и ту же операцию по-разному. Это может быть достигнуто с помощью перегрузки операторов, абстрактных классов и интерфейсов. Полиморфизм позволяет упростить обработку объектов разных типов и сделать код более гибким.
ООП способствует разделению ответственности в программе, облегчает ее сопровождение и расширение, а также повышает повторное использование кода. Часто используется в разработке больших и сложных приложений, где необходимо управлять множеством объектов и их взаимодействием. Популярные языки программирования, поддерживающие ООП, включают Java, C++, C#, Python, и многие другие.
👍11❤3🔥2
Метод equals() используется для сравнения двух объектов на равенство. Он определен в классе
Контракт equals
При переопределении метода
Рефлексивность
для любого заданного значения x, выражение
Заданного — такого, что
Симметричность
для любых заданных значений x и y,
Транзитивность
для любых заданных значений x, y и z, если
Согласованность
для любых заданных значений x и y повторный вызов
Сравнение null
для любого заданного значения x вызов
Object и, по умолчанию, выполняет сравнение ссылок на объекты (то есть проверяет, являются ли объекты одним и тем же объектом в памяти). Многие классы переопределяют этот метод, чтобы сравнивать содержимое объектов, а не только ссылки.Контракт equals
При переопределении метода
equals разработчик должен придерживаться основных правил, определенных в спецификации языка Java.Рефлексивность
для любого заданного значения x, выражение
x.equals(x) должно возвращать true.Заданного — такого, что
x != nullСимметричность
для любых заданных значений x и y,
x.equals(y) должно возвращать true только в том случае, когда y.equals(x) возвращает true.Транзитивность
для любых заданных значений x, y и z, если
x.equals(y) возвращает true и y.equals(z) возвращает true, x.equals(z) должно вернуть значение true.Согласованность
для любых заданных значений x и y повторный вызов
x.equals(y) будет возвращать значение предыдущего вызова этого метода при условии, что поля, используемые для сравнения этих двух объектов, не изменялись между вызовами.Сравнение null
для любого заданного значения x вызов
x.equals(null) должен возвращать false.👍11❤3🔥3
Является ли слово палиндромом
Суть алгоритма в том, что бы сравнивать поочередно первую букву с последней, вторую с предпоследней и так далее. Как только одна из пар не совпадет, сразу выходим - слово не палиндром.
Количество итераций это размер слова деленное на 2, потому как за раз мы проверяем две буквы.
Счетчик i это индекс очередной буквы слева, а j справа.
Палиндром это слово которое читается одинаково слева направо и справа налево.
Суть алгоритма в том, что бы сравнивать поочередно первую букву с последней, вторую с предпоследней и так далее. Как только одна из пар не совпадет, сразу выходим - слово не палиндром.
Количество итераций это размер слова деленное на 2, потому как за раз мы проверяем две буквы.
Счетчик i это индекс очередной буквы слева, а j справа.
Палиндром это слово которое читается одинаково слева направо и справа налево.
👍16❤1👏1
Динамическое программирование (Dynamic Programming, DP) - это метод решения сложных задач путем разбиения их на более простые подзадачи и решения каждой подзадачи только один раз, сохраняя результаты вычислений для избежания повторных вычислений. Затем эти результаты могут быть использованы для построения решения исходной задачи, что значительно сокращает время выполнения программы. Этот метод часто используется в оптимизации, оптимальном управлении и решении задач, где необходимо максимизировать или минимизировать какую-то целевую функцию.
Примером задачи, которая часто решается с использованием динамического программирования, является задача о рюкзаке (Knapsack problem), где необходимо выбрать определенное количество предметов с определенными весами и стоимостями так, чтобы сумма весов не превышала заданную вместимость рюкзака, а сумма стоимостей была максимальной.
Примером задачи, которая часто решается с использованием динамического программирования, является задача о рюкзаке (Knapsack problem), где необходимо выбрать определенное количество предметов с определенными весами и стоимостями так, чтобы сумма весов не превышала заданную вместимость рюкзака, а сумма стоимостей была максимальной.
👍13🤩3
Ключевое слово instanceof — это бинарный оператор, и мы можем использовать его для проверки того, является ли определенный объект экземпляром заданного типа. Следовательно, результат операции либо истинен, либо ложен. Кроме того, ключевое слово instanceof — это наиболее распространенный и простой способ проверить, является ли объект подтипом другого типа.
Обратите внимание, если с помощью instanceof проверить переменную содержащую
Обратите внимание, если с помощью instanceof проверить переменную содержащую
null, то результат всегда будет false.👍11👎1🔥1
SequencedCollection
В Java 21 появилась новая группа интерфейсов коллекций, самым основным из которых является
Две основных реализации интерфейса
В Java 21 появилась новая группа интерфейсов коллекций, самым основным из которых является
SequencedCollection. Он расширяет базовый интерфейс Collection, добавляя в него ряд полезных методов для манипуляций с первым и последним элементами, а также для инвертирования коллекции:interface SequencedCollection<E> extends Collection<E> {
void addFirst(E e);
void addLast(E e);
E getFirst();
E getLast();
E removeFirst();
E removeLast();
SequencedCollection<E> reversed();
} Две основных реализации интерфейса
List (ArrayList и LinkedList) также поддерживают этот интерфейс.👍20🔥3
Что выведет код?
Anonymous Quiz
11%
всегда Pain
12%
всегда Gain
24%
всегда Main
29%
Pain или Gain
24%
ошибка компиляции
❤13😁2🔥1
Функциональное программирование (ФП) - это парадигма программирования, которая базируется на работе с функциями как основными строительными блоками программ. В ФП данные рассматриваются как неизменяемые и функции рассматриваются как математические функции, которые принимают входные данные и возвращают результат без видимых побочных эффектов. Вот основные концепции функционального программирования:
1⃣ Функции как объекты первого класса: В функциональном программировании функции рассматриваются как объекты первого класса, что означает, что они могут быть переданы как аргументы в другие функции, возвращены из других функций и сохранены в переменных.
2⃣ Неизменяемость: В ФП данные считаются неизменяемыми, что означает, что после создания объекта его нельзя изменить. Вместо этого создаются новые объекты с измененными значениями. Это способствует более предсказуемому и безопасному поведению программы.
3⃣ Функции без побочных эффектов: Функции в ФП должны быть без побочных эффектов, что означает, что они не должны изменять глобальное состояние программы или какие-либо внешние переменные. Это делает код более чистым и предсказуемым.
4⃣ Рекурсия: Рекурсия является важной концепцией в функциональном программировании. Вместо циклов, ФП часто использует рекурсивные функции для выполнения итераций.
5⃣ Функции высшего порядка: Функции высшего порядка - это функции, которые могут принимать другие функции в качестве аргументов или возвращать их в качестве результатов. Это позволяет абстрагировать общие операции и создавать более гибкий и модульный код.
6⃣ Каррирование и частичное применение: Каррирование - это процесс преобразования функции с несколькими аргументами в последовательность функций, каждая из которых принимает по одному аргументу. Это способствует созданию функций с частичным применением, что делает код более гибким.
Функциональное программирование часто используется в ситуациях, где требуется обработка и анализ данных, а также в многозадачных и распределенных системах. Языки программирования, поддерживающие ФП, включают Haskell, Lisp, Scala, Clojure, и функциональные возможности в языках, таких как Python, JavaScript и Java. ФП позволяет писать более декларативный и выразительный код, что может способствовать повышению производительности и упрощению разработки в некоторых случаях.
1⃣ Функции как объекты первого класса: В функциональном программировании функции рассматриваются как объекты первого класса, что означает, что они могут быть переданы как аргументы в другие функции, возвращены из других функций и сохранены в переменных.
2⃣ Неизменяемость: В ФП данные считаются неизменяемыми, что означает, что после создания объекта его нельзя изменить. Вместо этого создаются новые объекты с измененными значениями. Это способствует более предсказуемому и безопасному поведению программы.
3⃣ Функции без побочных эффектов: Функции в ФП должны быть без побочных эффектов, что означает, что они не должны изменять глобальное состояние программы или какие-либо внешние переменные. Это делает код более чистым и предсказуемым.
4⃣ Рекурсия: Рекурсия является важной концепцией в функциональном программировании. Вместо циклов, ФП часто использует рекурсивные функции для выполнения итераций.
5⃣ Функции высшего порядка: Функции высшего порядка - это функции, которые могут принимать другие функции в качестве аргументов или возвращать их в качестве результатов. Это позволяет абстрагировать общие операции и создавать более гибкий и модульный код.
6⃣ Каррирование и частичное применение: Каррирование - это процесс преобразования функции с несколькими аргументами в последовательность функций, каждая из которых принимает по одному аргументу. Это способствует созданию функций с частичным применением, что делает код более гибким.
Функциональное программирование часто используется в ситуациях, где требуется обработка и анализ данных, а также в многозадачных и распределенных системах. Языки программирования, поддерживающие ФП, включают Haskell, Lisp, Scala, Clojure, и функциональные возможности в языках, таких как Python, JavaScript и Java. ФП позволяет писать более декларативный и выразительный код, что может способствовать повышению производительности и упрощению разработки в некоторых случаях.
👍8💯2❤1🔥1
Класс Console
В JDK 6 и более поздних версиях мы можем использовать класс
Если нам нужно прочитать конфиденциальную информацию, например пароль, мы можем использовать метод
В JDK 6 и более поздних версиях мы можем использовать класс
Console из пакета java.io для чтения и записи в консоль.Если нам нужно прочитать конфиденциальную информацию, например пароль, мы можем использовать метод
readPassword(), чтобы запросить у пользователя пароль и прочитать пароль из консоли с отключенным эхом.👍17🔥4
public class Increment {
public static void main(String[] args) {
int j = 0;
for (int i = 0; i < 100; i++) {
j = j++;
}
System.out.println(j);
}
}❤3👍2
🎉5
Стековая память
Для оптимального запуска приложения, JVM делит память на стек и кучу. Всякий раз, когда мы объявляем новые переменные и объекты, вызываем новый метод, объявляем строку или выполняем аналогичные операции, JVM выделяет память для этих операций либо из стековой памяти, либо из кучи.
Стековая память в Java используется для распределения статической памяти и выполнения потока - каждый поток исполнения в Java имеет свой собственный стек, создаваемый вместе с потоком. Этот стек содержит кадры стека, каждый из которых представляет вызов метода. Каждый кадр содержит примитивные значения, специфичные для метода (переданные в метод и объявленные в нем), и ссылки на объекты, находящиеся в куче.
Стековая память следует принципу LIFO. Последний метод, добавленный в стек при вызове, будет первым, который завершится (выйдет из стека) при завершении выполнения.
Когда метод завершает выполнение, соответствующий ему кадр стека очищается, поток возвращается к вызывающему методу, и место становится доступным для следующего метода.
Ключевые особенности стека:
👉 Он увеличивается и уменьшается по мере вызова и возврата новых методов соответственно.
👉 Переменные внутри стека существуют только до тех пор, пока работает метод, создавший их.
👉 Он автоматически выделяется и освобождается, когда метод завершает выполнение.
👉 Каждый рекурсивный вызов метода также создает новый кадр стека
👉 Если эта память заполнена, Java выдает java.lang.StackOverFlowError.
👉 Доступ к этой памяти происходит быстрее по сравнению с кучей.
👉 Эта память является потокобезопасной, поскольку каждый поток работает в своем собственном стеке.
Для оптимального запуска приложения, JVM делит память на стек и кучу. Всякий раз, когда мы объявляем новые переменные и объекты, вызываем новый метод, объявляем строку или выполняем аналогичные операции, JVM выделяет память для этих операций либо из стековой памяти, либо из кучи.
Стековая память в Java используется для распределения статической памяти и выполнения потока - каждый поток исполнения в Java имеет свой собственный стек, создаваемый вместе с потоком. Этот стек содержит кадры стека, каждый из которых представляет вызов метода. Каждый кадр содержит примитивные значения, специфичные для метода (переданные в метод и объявленные в нем), и ссылки на объекты, находящиеся в куче.
Стековая память следует принципу LIFO. Последний метод, добавленный в стек при вызове, будет первым, который завершится (выйдет из стека) при завершении выполнения.
Когда метод завершает выполнение, соответствующий ему кадр стека очищается, поток возвращается к вызывающему методу, и место становится доступным для следующего метода.
Ключевые особенности стека:
👉 Он увеличивается и уменьшается по мере вызова и возврата новых методов соответственно.
👉 Переменные внутри стека существуют только до тех пор, пока работает метод, создавший их.
👉 Он автоматически выделяется и освобождается, когда метод завершает выполнение.
👉 Каждый рекурсивный вызов метода также создает новый кадр стека
👉 Если эта память заполнена, Java выдает java.lang.StackOverFlowError.
👉 Доступ к этой памяти происходит быстрее по сравнению с кучей.
👉 Эта память является потокобезопасной, поскольку каждый поток работает в своем собственном стеке.
👍17❤1🔥1
DataInputStream и DataOutputStream предоставляют методы для чтения и записи примитивных данных из и в поток ввода/вывода. Эти классы добавляют функциональность к обычным потокам ввода/вывода, позволяя удобно считывать и записывать данные различных типов, таких как целые числа, числа с плавающей запятой, символы и т.д., без необходимости вручную преобразовывать их в байты.
👍11👏1
Чистый код: создание, анализ и рефакторинг
Автор: Роберт Мартин
Эту книгу должен прочитать каждый разработчик. А затем перечитывать каждый год! 😁 Плюс для джавистов в том что в книге все примеры написаны на Java.
"Чистый код" Роберта Мартина – это практическое руководство для разработчиков, нацеленное на улучшение качества программного кода. Автор предлагает читателям принципы и практики, которые помогут создавать код, который легко понимать, поддерживать и изменять. Книга рассматривает множество аспектов программирования, включая именование переменных, организацию функций, обработку ошибок, комментирование и многое другое. С использованием конкретных примеров и иллюстраций автор помогает программистам развивать навыки написания "чистого кода" для повышения эффективности и удовлетворения требований современной разработки программного обеспечения.
Автор: Роберт Мартин
Эту книгу должен прочитать каждый разработчик. А затем перечитывать каждый год! 😁 Плюс для джавистов в том что в книге все примеры написаны на Java.
"Чистый код" Роберта Мартина – это практическое руководство для разработчиков, нацеленное на улучшение качества программного кода. Автор предлагает читателям принципы и практики, которые помогут создавать код, который легко понимать, поддерживать и изменять. Книга рассматривает множество аспектов программирования, включая именование переменных, организацию функций, обработку ошибок, комментирование и многое другое. С использованием конкретных примеров и иллюстраций автор помогает программистам развивать навыки написания "чистого кода" для повышения эффективности и удовлетворения требований современной разработки программного обеспечения.
👍21🔥2