Exceptions and Localization Flashcards

1
Q

Locale создание/получение

A

1) Есть констуктор для языка + язык и страна, + язык страна и комментарий (передавать аргументы можно в любом кейсе en или EN - конструктор выправит кейс автоматом )
2) Locale.Builder с методами setRegion, setLanguage
3) Locale.getDefault() возвращает дефолтную- можно сменить через setDefault(Locale)
4) Есть ряд предсозданных константных локалей Locale.GERMAN например

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

NumberFormat получение

A

Создается фабричными методами:
1) getInstance(OVERLOAD Locale) или getNumberInstance(OVERLOAD Locale) возвращает форматтер для чисел
2)getCurrencyInstance(OVERLOAD Locale) форматтер для валют
3)getPercentInstance(OVERLOAD Locale) форматер для процентов
4)getIntegerInstance(OVERLOAD Locale) форматтер, который округляет дробное число перед форматированием.
Методы форматтера:
1)String format(Number ) форматирует число в строковое представление согласно астроек локаля в форматтере
2)Number parse(String) парсит строку в число согласно настроек локаля в форматтере. Парсит до первого не соответствующего маске символа. Если первый же символ не соответствует маске, то только тогда выкидывает checked ParseException).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

DecimalFormat

A

Класс наследующий от NumberFormat, используемый для форматирования внешнего вида вещественного числа.
В конструктор передается паттерн, где
# обозначает цифру, которой если нету, то можно проигнорировать.
0- обозначает цифру, которую нужно дополнить нулями при отсутствии.
, а другими символами можно обозначать вид форматирования.
Метод String format(source) возвращает отформатированную строку.
ПРи это дробная часть обрезается по количеству символов справа
Например: 456 будет отображаться так
C $###.## будет $456
С 0000.00 будет 0456.00

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

DateTimeFormatter локализация

A

Имеет статические методы ofLocalizedTime/Date/DateTime(константный FormatStyle) возвращающий годную к использованию форму DateTimeFormattera (FormatStyle.LONG и FormatStyle. FULL используютсят только с определением LocalZone) FormatStyle.SHORT и FormatStyle.MEDIUM используются универсально со всеми объектами времени. В локализованную версию перед форматом можно вызвать метод withLocale(Locale) который выводит данные в локаль специфическом формате.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Установка дефолтной локали частично

A

Есть перегруженная версия setDefault которая позволяет частично установить локаль только для дисплэя или для формата setDefault(Locale.Category.DISPLAY || FORMAT, Locale) (по дефолту устанавливает в оба)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

ResourceBundle и property файлы

A

Может использовать разные источники данных- один из них property файл с парами ключа значение- разделенными = или :
В названии Property файла паттерн- имя + локаль + .properties

ResourceBundle.getBundle(bundleName, Optional Locale (default if empty)) -позволяет получить нужный бандл
Из него можно получить значения через getString(key) или getObject(key) и через keySet() вернуть список всех ключей

Ключ- всегда строка, а вот значение в зависимости от имплементации может различаться.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Поиск ключа в ResourceBundle

A

Процесс поиска ключа можно разбить на два этапа с разной поисковой логикой.
Сперва ищется наиболее подходящий ResourceBundle:
Ищется бандл с полным соответствием локали
С языком локали
Ищется бандл с полным соответствием дефолтной локали
С языком дефолтной локали
Дефолтный безлокальный бандл
Если бандл не находится то MissingResourceException
Далее в бандле ищется ключ:
Ищется ключ в возвращенном бандле
Затем в его родителе (то есть для fr_CA ищется в fr)
Затем в дефолтном безлокальном бандле
Если ключ не находится то MissingResourceException

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Форматирование плэйсхолдеров в i18n Значениях

A

Можно указывать нумерованные места вставки в значении, например hello = Hello, {1}. После возврата значения по ключу, эту строку можно форматировать с использованием MessageFormat.format(String mask,String…argsToInsert).
Если значение для плэйсхолдера не предоставлена то плэйсхолдер вернтся как есть со скобками.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Properties класс

A

Класс отвечающий за сохранение, загрузку данных из специльного файла .properties. Он не работает и не зависит от локаля, поэтому загружает конкретно с указанным проперти файлом. Наследует от HashTable поэтому имеет обычные методы коллекций но также имеет свои методы:
1)load(inputStream | Reader | ) загружает данные из файла (properties? но расширение также может быть txt и другое- главное тип хранения данных) представленного стримом
2)loadFromXml(InputStream) - загружает свойства из xml файла
3) Set setPropertyNames() возвращает сет значений параметров, значение каждого из которых можно вернуть методом String getProperty(String propertyKey, ).
!!!Есть перегруженная версия getProperty с дефолтным значением
5)устанаваливаются новые параметры методом setProperty(String,String) !!! get/setProperty нужно использовать вместо put/get наследованных от мапы

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Properties класс

A

ласс отвечающий за сохранение, загрузку данных из специльного файла .properties. Он не работает и не зависит от локаля, поэтому загружает конкретно с указанным проперти файлом. Наследует от HashTable поэтому имеет обычные методы коллекций но также имеет свои методы:

1) load(inputStream | Reader | ) загружает данные из файла (properties? но расширение также может быть txt и другое- главное тип хранения данных) представленного стримом
2) loadFromXml(InputStream) - загружает свойства из xml файла
3) значение каждого из параметров можно вернуть методом String getProperty(String propertyKey, OVERLOAD String deafultvalue).
5) устанаваливаются новые параметры методом setProperty(String,String) !!! get/setProperty нужно использовать вместо put()/get() так как put/get более ошибкоемки из за того что разрешают работать с объектами

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Unchecked и checked исключения- иерархия

A

Исключения бывают обязательные для обработки (все наследники класса Exception кроме RuntimeException + сам Throwable), и необязательные (исключения класса RunTimeException, и ошибки класса Error). Ошибки не имеет смысла обрабатывать, т.к. программными методами их не решить.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Представители Error

A

ExceptionInInitializerError - ошибка, которую вызывает исключение возникшее при статической инициализации (в статическом инициализаторе или при инициализации статической переменной). Она в виде ошибке так как исключение вызвало то, что не загрузился целый класс.
StackOverflowError- переполнение размера стэка методов- чаще всего в результате продолжительной или бесконечной рекурсии.
NoClassDefFoundError - происходит когда при компиляции класс был доступен а при runtime уже нет.
OutOfMemoryError - исчерпание памяти, бывает четырех видов: JavaHeap space, PermGen space, GC overhead limit exceeded, unable to create new native thread.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Представители RuntimeException

A

ArithmeticException (ошибка деления на ноль)
ArrayIndexOutOfBoundsException (ошибка выхода индекса за величину массива).
IllegalArgumentException
NumberFormatException - потомок IllegalArgumentException , происходит например при парсе String в int если в строке отсутствуют числа.
IllegalStateExecption и UnsupportedOperationException - рантайм исключения при работе с потоками и коллекциями.
ArrayStoreException - возникает при неверном типе объекта помещенном в массив, который привели к более широкому типу.
DateTimeEception- ошибка при парсе строки в дату.
MissingResourceException- попытка доступа к bundle файлу, которго нет или к ключу которого нет
ClassCastException
NullPointerException

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q
NumberFormatException
IllegalStateExecption и UnsupportedOperationException
ArrayStoreException
DateTimeEception
MissingResourceException
A

потомок IllegalArgumentException , происходит например при парсе String в int если в строке отсутствуют числа.

рантайм исключения при работе с потоками и коллекциями.

возникает при неверном типе объекта помещенном в массив, который привели к более широкому типу.

ошибка при парсе строки в дату.

попытка доступа к bundle файлу, которго нет или к ключу которого нет

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Представители Checked исключений

A
  • Все исключения из пакета IO - FileNotFoundException,NotSerializableException, предки IOException;
  • Все иключения из пакета sql(SQLException);
  • ParseException (из пакета text- при парсе строки в число)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Отличия closeable от autocloseable

A

closeable(пакет java.io) ребенок autoclosable (java.lang)
autoclosable Объявляет что кидает Exception
а closable что кидает IOException

17
Q

try with resources

A

Синтаксис Try(обьявление и инициализация объектов (можно нескольких) реализующих интерфейс autocloseable){
работа с данными переменными}.

После окончания блока кода {} в том числе при выбросе ислключения автозакрываемые объекты гаранитрованно закроются сами.
Если объектов блоке инициализации несколько, то закрываться они будут в обратном порядке. В блоке инициализации разделять их нужно как обычно- точкой с запятой- в конце она не обязательна.

Закрытие объектов инициализации происходит перед выполнением catch и finally блока.

!!! Можно объявить переменную которая будет автозакрываться в try-with-resource блоке до блока, но только если она final или effectively final. Также стоит помнить что после блока этот объект уже будет закрыт.

18
Q

Подавленные исключения в try-with-resources

A

Если в теле блока кидается исключение, и затем исключение кидается также при автозакрытии ресурса, то второе исключение подавляется (supressed)- т.е. добавляется в первое исключение в его спимсок supressed (exception.getSupressed()) . При этом подавленное исключение не будет отлавливаться catch Блоками так как его уже по сути нету- оно просто добавлено к первичному исключению.

При этом если дополнительное исключение кидается в finally то оно не считается подавленным а просто затеняет все предыдущие исключения.

19
Q

assert

A
Синтаксис (скобки и message опциональны)
assert someBool;
assert (someBool);
assert someBool: message;
assert (someBool): message;
Мессэдж не обязан быть строкой- подойдет любой объект- вызывается его toString()
!!!assert- ключевое слово Java

Если ассерты активированы в рантайме (по дефолту деактивированы и best practice- не активировать их в проде) и ассерт фэйлится то кидается AssertionError

20
Q

Как активировать assert -ы

A
  • ea или -enableassertions активирует ассерты
  • da или -disableassertions дезактивирует ассерты

Можно использовать :название_пакета (… для всех классов и подпакетов) для активации/дезактивации конкретного пакета
java -ea:com.main… -da:com.main.Test - активирует для всего пакета кроме Test класса

21
Q

DateTimeFormatter паттерны

A
Есть константные значения типа ISO_LOCAL_DATE и т.д.
Можно создать методом ofPattern(String pattern)
Паттерны имеют следующие составляющие:
y год
M месяц
d день 
h часы
m минуты
s секунды
a AM/PM
z название таймзоны
Z оффсет таймзоны

Если в паттерн нужно включить свободный текст, то его нужно экранировать одинарной кавычкой (сама она экранируется еще одной кавычкой) “mm at time`s ss”
Если же при создании паттерна указать составляющие которые не предусмотрены то будет IllegalArgumentException

22
Q

Ошибка при формате/парсинге неверного типа даты

A

1) При попытке вывести (форматировать) время или дату форматтером который ожидает единицы времени которые отсутствуют, то будет UnsupportedTemporalTypeException (например при выводе ISO_ZONED_DATE_TIME_FORMAT ом просто локального времени так как форматер ожидает информацию про зону )
2) При попытке парсинга даты которая не полностью соответствует паттерну будет DateTimeParseException

23
Q

Мультисинтакс исключений

A

Можно объединять неродственные исключения в мультиблок через | , при этом типы должны быть не родственными, и переменная исключения будет неявно final, так как ее тип сложно определить на этапе компиляции.