Java

Зачем нужно ключевое слово default?

В ранних версиях Java с помощью этого служебного слова можно было объявлять значения по умолчанию. В восьмой версии было решено пополнить существующие интерфейсы современными методами. Но, для того, чтобы обеспечить совместимость со старыми версиями, было решено добавлять методы и отмечать их словом default. Поэтому новые методы имеют дефолтную реализацию. Новый метод, объявленный как default, можно […]
Читать полностью

Что делает volatile?

Ключевое слово volatile применяют при разработке многопоточных приложений. Оно оказывает 2 эффекта. Во-первых, чтение или запись данных в поле, обозначенное этим модификатором, становится атомарным. Во-вторых, между пара связанных событий запись и чтение имеют отношение happens-before (то есть второе действие в курсе изменений, сделанных первым событием). Чтобы лучше разобраться, рассмотрим следующий код: В результате работы, программа […]
Читать полностью

Что такое synchronized?

Synchronized – это служебное слово, с помощью которого можно запретить доступ к методу, помеченному как синхронный (Synchronized), на время пока его держит другой Synchronized поток. То есть одновременно могут выполняться не более одной части кода отмеченной служебным словом как Synchronized. Также это требуется для методов wait, notifyAll, а также notify.
Читать полностью

Чем отличаются checked и unchecked исключения?

С помощью этого вопроса проверяют знание иерархии классов, используемых для обработки исключений. Исключения checked требуется обрабатывать в блоке catсh. Исключения unchecked обрабатывать необязательно. Базовым в иерархии классов, предназначенных для обработки исключений, является Throwable. У него есть два наследника: error – него входят непроверяемые (которые называются unchecked) исключения, которые сигнализируют о серьёзных, системных ошибках приложения, в […]
Читать полностью

Какие бывают модификаторы в Java?

В Java определены такие модификаторы: private, protected, public – применяются для задания прав, относятся к разделу «Классы»; synchronized, volatile – нужны для управления многопоточностью; static – служит для привязки субъекта (обычно это переменная) не к конкретному экземпляру, а ко всему классу (в этом случае, значение субъекта будет одинаковым для всех экземпляров); native данный модификатор предназначен […]
Читать полностью

Какие существуют литералы в Java?

Литерал – это набор символов, которая обозначает значение констант примитивных типов. Это: integer (целочисленный). Примеры: 324, 0хfb65, 0b10100; floating-point, float, double (с плавающей точкой). Примеры: 756.12, 0.8, 5.2е3; char (символы). Примеры: ‘d’, ‘\n’ (спецсимвол), ‘\u00F1’ (escape-последовательность); Строковый литерал. Пример – “Hello”; boolean (логические). Имеется два: true и false; специальный – null.
Читать полностью

Чем отличается final finally finalize?

Эти три служебных слова относятся к разным разделам языка Java. Метод finalise – это сборщик мусора, который вызывается Java машиной автоматически. При этом он не может быть вызван если есть ссылки на объект. Также виртуальная машина не может его вызвать более одного раза. При этом не гарантируется даже что он вообще будет запущен. Выполнять его […]
Читать полностью

Как прочитать InputStream в строку?

Часто строковые данные попадают в приложение в виде потока, например, так читаются текстовые файлы, данные получаемые из сети, через сокет или ввод информации пользователем на клавиатуре. Поэтому удобнее обрабатывать их также в потоке. Обычно это делается в такой последовательности: заводится символьный массив, который выполняет роль буфера, входящий поток записывается в этот массив, по мере заполнения […]
Читать полностью

Как разбить строку на слова?

В Java есть класс StringTokenizer, которые можно использовать для разбиения строк. Для него необходимо задать разделители, по которым строка будет разбита на «токены». Но он уже считается устаревшим и используется только для обратной совместимости. Сейчас рекомендуется использовать метод String.split(). В него передаётся регулярное выражение (разделитель) и лимит токенов (необязательный параметр). Даже если разделитель состоит из […]
Читать полностью

Особенности работы класса Matcher

Класс Matcher предназначен для работы с регулярными выражениями. Матчер применяется на ко всей строке, а к предварительно установленному «региону». По умолчанию он совпадает со всей строкой. При необходимости его можно изменять. С помощью методов regionStart и regionEnd можно посмотреть установленные границы. Для изменения границ существует метод region. У экземпляров объекта Matcher есть свойство transparentBounds, с […]
Читать полностью

Как применить регулярное выражение?

Для использования регулярных выражений в Java используется пакет java.util.regex, входящий в стандартную библиотеку. Основная работа выполняется с помощью методов класса Pattern. Фабричный метод Pattern.compile(“Регулярное выражение”) создаёт регулярное выражение, не привязывая его к тексту. Этот метод потокобезопасный и неизменяемый (иммутабельный). Чтобы работать с регулярным выражением и применить его к конкретному тексту нужно создать экземпляр класса Matcher, […]
Читать полностью

Из чего состоит String?

Ответ на этот вопрос зависит от версии Java. Во всех версиях есть два обязательных поля: массив char[] value, в котором хранятся символы строки и переменная int hash, в которой храниться хэш-сумма. В версиях Java младше 7 были поля offset и count. Они использовались для повторного использования массивов из билдеров и строк, без необходимости их пересоздания. […]
Читать полностью

Как обойти строчку?

В языке Java строки хранятся в кодировке UTF-8. В ней один символ храниться в code point, который может состоять из одного или двух значений char (то есть занимающих в памяти столько же места, сколько и одна переменная типа char). То есть, для ответа на вопрос нужно понимать, строка состоит из значений типа char или code […]
Читать полностью

Какие бывают строковые классы?

Для работы со строками, в Java, кроме String, существуют ещё два класса: StringBuffer и StringBuilder. В отличие от String они реализуют паттерн строитель (Builder), и способны изменять строки без создания нового объекта. Эти два класса очень похожи друг на друга, и используют одинаковые методы и конструкторы. Но между ними есть различие. Класс StringBuffer появился первым, […]
Читать полностью

new String(«Hello_42») == «Hello_» + 42

Вопросы такого типа, о сравнении строковых и числовых констант, задают для проверки знаний о пуле строк (string pool) или, как его ещё называют пул литералов (literal pool). Он нужен для оптимизации использования компилятора. Если строка встречается несколько раз, то компилятор Java заменяет все упоминания таких строк ссылкой на её экземпляр. Благодаря этому, строка храниться в […]
Читать полностью

toString

toString() – это public-метод, объявленный в классе Object, который вызывается автоматически, для преобразования объектов в текст. По умолчанию он возвращает строку «полное.имя.класса@хэш_В_Шестнадцатеричном_Виде» (это может выглядеть как «java.lang.Object@1c413d89»). Обратите внимание, что часть, идущая после @ — это не адрес в памяти. Реализация по умолчанию несёт немного пользы. Поэтому в пользовательском классе его рекомендуется переопределять, даже если […]
Читать полностью

Где у Java приложения точка входа?

Выполнение программ, написанных на Java, начинается со специального метода который называется main() и входит в главный класс. В качестве главного можно использовать не только обычный class, но и интерфейс, и даже перечисление enum. В JavaFX main класс должен реализовать интерфейс javafx.application.Applicaton. Метод main обязательно должен быть отмечен как public и static. Также он может иметь […]
Читать полностью

Как нельзя называть переменные?

Если не учитывать стилистические, то технических три: Нельзя использовать зарезервированные в Java слова; Первый используемый символ обязан соответствовать Charactr.isJavaIdentiferStart(); Все символы, начиная со второго, обязаны соответствовать Charactr.isJavaIdentiferPart(). В общем случае имя может состоять из:  букв разных алфавитом и языков; специальных символов, например, $; цифры. В качестве первого символа нельзя использовать цифры. Для определения типа символа […]
Читать полностью

Что такое Keyword?

Keyword – это заданная последовательность букв, цифр и символов, которую нельзя использовать для задания именования переменных, методов и всех остальных идентификаторов. Перечислим их: четыре зарезервированных слова, которые не относятся к ключевым: var, null, true, false; слова, отвечающие за логику работа приложения, задания типов переменных, объявления классов, модификаторы и другие: short, private, final, enum, try, strictfp, […]
Читать полностью

Есть ли в Java goto?

goto – это оператор безусловного перехода в любое место приложения. В данный момент все специалисты пришли к единому мнению, что его использование может внести путаницу, его использование вредно и опасно, к тому же без него, в современных языках высокого уровня, вполне можно обойтись без goto. Поэтому напрямую в Java он не используется. Но разработчики могут […]
Читать полностью

Kotlin-практикум с Иваном Ветровым

Запишись бесплатно и получи приглашение на персональную работу

Бесплатная предзапись

Идет набор на персональный практикум — свободных мест: 8

  • Персональная работа с Иваном Ветровым 10 дней
  • 25 задач с персональным код-ревью
  • Настройка профессиональных инструментов
  • 3 проекта для портфолио + рекомендации
Подробнее про Onboarding
Специальное предложение - изучение Android разработки со скидкой