Java Learning
19.8K subscribers
1.58K photos
1 video
3 files
950 links
№ 5079899194

Обучающий канал по Java

Ссылка для друга - https://t.iss.one/+ZEYYht6-46w5MDM6

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
Что за зверь "Matcher"?

Класс Java Matcher (java.util.regex.Matcher) создан для поиска некоторого множества вхождений регулярного выражения в одном тексте и поиска по одному шаблону в разных текстах. Класс Java Matcher имеет много полезных методов.

Например:

• boolean matches(): вернет значение true при совпадении строки с шаблоном.
• boolean find(): вернет значение true при обнаружении подстроки, совпадающей с шаблоном, и перейдет к ней.
• int start(): вернет значение индекса соответствия.
• int end(): вернет значение индекса последующего соответствия.
• String replaceAll(String str): вернет значение измененной строки подстрокой str.

Другие методы Matcher можно найти в официальной документации.

Рассмотрите простой пример работы с Pattern и Matcher.
👍4
#Вопросы_с_собеседования
Какая разница между абстрактным классом и интерфейсом?

Абстрактный класс:
• абстрактные классы имеют дефолтный конструктор; он вызывается каждый раз, когда создается потомок этого абстрактного класса;
• содержит как абстрактные методы, так и не абстрактные. По большому счету может и не содержать абстрактных методов, но все равно быть абстрактным классом;
• класс, который наследуется от абстрактного, должен реализовать только абстрактные методы;
• абстрактный класс может содержать Instance Variable

Интерфейс:
• не имеет никакого конструктора и не может быть инициализирован;
• только абстрактные методы должны быть добавлены (не считая default methods);
• классы, реализующие интерфейс, должны реализовать все методы (не считая default methods);
• интерфейсы могут содержать только константы.
👍14
Статический вложенный класс в Java

Статический внутренний класс — это вложенный класс, который является статическим членом внешнего класса. Доступ к нему возможен без создания экземпляра внешнего класса с использованием других статических элементов. Как и статические члены, статический вложенный класс не имеет доступа к переменным экземпляра и методам внешнего класса. Синтаксис статического вложенного класса в Java выглядит следующим образом:

class MyOuter {
static class Nested_Demo {
}
}

Создание экземпляра статического вложенного класса немного отличается от экземпляра внутреннего класса.

Следующая программа показывает, как использовать статические вложенные классы.
👍4👎1
Generics

Всегда старайтесь типизировать ваши коллекции, методы и классы. Это избавляет сразу от 2-х потенциальных проблем: приведение типов и ошибок выполнения. Также назначение таких коллекций легче воспринимать. Особенно часто этим пренебрегают мои американо-индусские коллеги. Если же ваша коллекция должна содержать обьекты разных типов — используйте <?>, а еще лучше <? extends someType> тогда зная общий класс/интерфейс для всех обьектов вам не прийдется делать приведение типов и применять оператор instanceOf.
👍20🔥4
Также напоминанию, что у нас есть чат для обсуждений
@Java_Learning_Chat
👍1
Что выведет код сверху?
Anonymous Quiz
30%
10
38%
9
24%
0
8%
RuntimeException
🔥24👍9👎7
Шестнадцатеричный формат

За этим нет большой истории. Иногда нам нужно преобразовать строки в шестнадцатеричный формат, байты или символы. Начиная с Java 17 вы можете использовать класс HexFormat. Просто создайте экземпляр HexFormat, а затем вы можете отформатировать, например, входную таблицу byte в шестнадцатеричную строку. Вы также можете, например, преобразовать входную шестнадцатеричную строку в таблицу байтов, как показано выше.
👍3
Bit Set

Что, если нам нужно выполнить какие-то операции с массивами битов? Вы будете использовать для этого boolean[]?

Для этого есть более эффективный с точки зрения использования памяти метод.

Это класс BitSet, позволяющий нам хранить массивы битов и манипулировать ими. По сравнению с boolean[] он требует в 8 раз меньше памяти. Мы можем выполнять логические операции над массивами, такими как, например and, or, xor.

Допустим, у нас есть два входных массива битов. Мы хотим провести на них операцию xor.

Уточню, операция xor, возвращает только те элементы, которые имеются только в одном массиве, но не в другом. Для этого нам нужно создать два экземпляра BitSet и вставить туда элементы, как показано ниже. Наконец, вы должны вызвать метод xor в одном из BitSet объектов, указав в качестве аргумента второй BitSet объект.
👍8🎉2
Что выведет код сверху?
Anonymous Quiz
8%
InfinityInfinity
20%
NanNaN
27%
InfinityNaN
9%
NanInfinity
36%
Error
🔥22👍6
Класс-оболочка и тип данных

В приведенном выше примере второй оператор печати не будет отображать значение true, поскольку сравниваются ссылки на объекты класса-оболочки, а не их значения.
👍2😱1
👍3
Что выведет код сверху?
Anonymous Quiz
34%
12
37%
11
24%
01
6%
10
👍16🔥11😁10👎5
#Вопросы_с_собеседования

Какие два класса не наследуются от Object?

Ответ: Не ведитесь на провокации, нет таких классов: все классы прямо или через предков наследуются от класса Object!
👍19
Что выведет код сверху?
Anonymous Quiz
13%
0
11%
1
16%
2
14%
3
5%
4
41%
Error
👍14
Метод fill()

Присваивает определенное значение int к каждому элементу указанного целочисленного массива. Такой же метод может быть использован всеми другими примитивными типами данных (byte, short, int и т.д.).
🔥14
Interface for Consts

Очень часто встречаются интерфейсы для описания констант. Это не правильно с точки зрения ООП. Интерфейс должен описывать поведение, не больше не меньше. Этот пункт не очень принципиален, тем более что результат компиляции будет один и тот же, но все же java это ООП язык и было бы хорошо придерживаться его принципов.
👍2
#Вопросы_с_собеседования

Создание бесконечного цикла на пустом месте

Дан блок кода(см картинку). Дополните его так, чтобы цикл стал бесконечным.

«Ничего сложного», — скажете вы. Скорее всего, вы не раз попадали в такую историю: решая задачи по Java, вы создавали бесконечный цикл и думали, как от него избавиться. Тут же наоборот. Хитрость в том, что сам цикл и условия выхода из него менять нельзя. Есть только две итерации. Тем не менее, их вполне достаточно, чтобы создать бесконечный цикл.

Похоже, что он должен работать только для двух итераций, но его можно сделать бесконечным, за счет использования переполнения. Уже догадались, как?
👍2