JavaCore3: Procedure Java Flashcards

1
Q

Какие примитивные типы данных есть в Java?

A

byte 8 бит -2^7 .. -2^7 - 1;
short 16 бита -2^15 .. -2^15 -1;
int 32 бита -2^31 .. -2^31 -1;
long 64 битов -2^63 .. -2^63 -1;
double 64 битов ;
float 32 битов ;
char 16 бит ;
boolean 4 бита (1 бит в массивах);

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

Что такое char?

A

это символьный тип данных, который хранит в себе номер символа в формате юникода и занимает 2 байта, поэтому диапазон хранимых значений от 0 до 65535.

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

Что такое классы-обертки?

A

Классы обертки являются ссылочными типами данных в отличии от их аналогов-примитивов, и хранят внутри себя значение примитива.

Объекты классов-оберток являются неизменяемыми (Immutable)).
Используются для реализации дженериков.

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

Что такое автоупаковка ?

A

Автоупаковка - присвоение классу-обертке значения примитивного типа, без явного использования конструктора класса.

Целочисленные классы оберток созданных с помощью авто упаковки кэшируются JVM и обертки с одинаковыми значениями будут иметь ссылку на один объект.

Autoboxing происходит:
- При присвоении значения примитивного типа переменной соответствующего класса-обёртки.
- При передаче примитивного типа в параметр метода, ожидающего соответствующий ему класс-обёртку.

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

Что такое автораспаковка?

A

Автораспаковка - преобразование класса-обёртки в соответствующий ему примитивный тип.
Если при распаковке класс-обёртка был равен null, произойдет исключение java.lang.NullPointerException.

Unboxing происходит:
- При присвоении экземпляра класса-обёртки переменной соответствующего примитивного типа.
- При передаче объекта класса-обёртки в метод, ожидающий соответствующий примитивный тип.
- В выражениях, в которых один или оба аргумента являются экземплярами классов-обёрток. Так как арифметические операторы и операторы сравнения (исключение == и !=) применяются только к примитивным типам. При сравнении классов-обёрток оператором == или !=, происходит сравнение по ссылкам, а не по значениям и может возникнуть путаница.

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

Что такое явное и неявное приведение типов?

A

Привидение типов - это перевод одного типа данных в другой путем его расширения или сужения.

Явное приведение - явное сужение от большего к меньшему. Необходимо явно указать сужаемый тип.

Неявное приведение – автоматическое расширение типа переменной от меньшего к большему.

В случае с объектами мы можем делать неявное(автоматическое) приведение от наследника к родителю, но не наоборот, иначе получим ClassCastException.

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

Почему не рекомендуется изменять строки в цикле? Что рекомендуется использовать?

A

Т.к. строка неизменяемый класс, то возрастает потребление ресурсов при редактировании, т.к. каждую итерацию при редактировании будет создаваться новый обьект строки.

Рекомендуется использовать StringBuilder или StringBuffer.

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

Почему строки не рекомендуется использовать для хранения паролей?

A

1) Так как строки в Java хранятся в пуле строк, то пароль в виде обычного текста будет доступен в памяти, пока сборщик мусора не очистит её. И поскольку String используются в String pool для повторного использования, существует довольно высокая вероятность того, что пароль останется в памяти надолго, что совсем не безопасно.
char[] можно очистить сразу, например вызвав
Arrays.fill(password, ‘\0’);

2) Java сама по себе рекомендует использовать метод getPassword () из класса JPasswordField, который возвращает char [].
3) С типом String всегда существует опасность того, что текст, хранящийся в строке будет напечатан в файле логов или в консоли. В то же время в случае использования Array, вы не будете печатать содержимое массива, а только его расположение в памяти.

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

Q

Почему String неизменяемый и финализированный класс?

A

1) Для возможности реализации String pool. При изменяемости строк было бы невозможно реализовать интернирование, поскольку если какая-либо переменная изменит значение, это отразится также и на остальных переменных, ссылающихся на эту строку.
2) Безопасность:
Поскольку в Java строки используются для передачи параметров для авторизации, открытия файлов и т.д. — неизменяемость позволяет избежать проблем с доступом.
3) Для многопоточности. Неизменяемые строки потокобезопасны
Так как строка неизменяемая то, она безопасна для много поточности и один экземпляр строки может быть совместно использован различными потоками.
4) Строки используются classloader, и неизменность обеспечивает правильность
загрузки класса.
5) Ключ для HashMap
Поскольку строка неизменная, её hashcode кэшируется в момент создания и нет никакой необходимости рассчитывать его снова. Это делает строку отличным кандидатом для ключа в Map.

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

Что делает метод intern() в классе String?

A

Метод intern() используется для сохранения строки в пуле строк или получения ссылки, если
такая строка уже находится в пуле.

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

Можно ли использовать строки в конструкции switch?

A

Да, начиная с Java 7.
При этом согласно документации Java 7 для строк в switch, компилятор Java формирует более эффективный байткод, чем для сцепленных условий if-else.

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

Какая основная разница между String, StringBuffer, StringBuilder?

A

Класс String является неизменяемым (immutable) - модифицировать объект такого класса нельзя, можно лишь заменить его созданием нового экземпляра.

Класс StringBuffer изменяемый - использовать StringBuffer следует тогда, когда необходимо часто модифицировать содержимое, потокобезопасный

Класс StringBuilder был добавлен в Java 5 и он во всем идентичен классу StringBuffer за исключением того, что он не синхронизирован и поэтому его методы выполняются значительно быстрей, потоконебезопасный

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

Что такое StringJoiner?

A

Класс StringJoiner используется, чтобы создать последовательность строк, разделенных
разделителем с возможностью присоединить к полученной строке префикс и суффикс:
~~~
public static void main(String[] args) {
StringJoiner joiner = new StringJoiner(“, “);
joiner.add(“John”);
joiner.add(“Jane”);
joiner.add(“Jim”);

String result = joiner.toString();
System.out.println(result); // John, Jane, Jim
~~~

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

Существуют ли в java многомерные массивы?

A

Многомерные массивы в их классическом понимании в java не существуют.
Многомерный массив всегда прямоугольный и неразрывен в памяти.
А то, что в java считается многомерным - в других языках ещё называют “зубчатым массивом” или массивом массивов

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

Какими значениями инициируются переменные по умолчанию?

A

yte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char ‘\u0000’
boolean false
**Объекты (в том числе String) ** — null
Локальные (в методе) переменные не имеют значений по умолчанию, их имеют поля класса.
Не static-поле класса будет инициализировано после того, как будет создан объект этого класса.
А static-поле будет инициализировано тогда, когда класс будет загружен виртуальной Java машиной

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

Что такое сигнатура метода?

A

Сигнатура метода - название метода и его параметры.

В сигнатуру метода не входит возвращаемое значение, а также бросаемые им исключения.
А сигнатура метода в сочетании с типом возвращаемого значения и бросаемыми исключениями называется контрактом метода

17
Q

Расскажите про метод main

A

Метод main() — Является, точкой входа в программу и вызывается JVM.
С его первой строки будет начато выполнение программы.
Как только заканчивается выполнение метода main(), так сразу же завершается работа самой программы.
static - чтобы JVM смогла загрузить его во время компиляции.
public static void и сигнатура - обязательное декларирование.
Может быть перегружен.
В приложении может быть несколько таких методов.
Если метод отсутствует, то компиляция возможна, но при запуске будет получена ошибка Error: Main method not found

18
Q

Каким образом переменные передаются в методы, по значению или по ссылке?

A

В Java параметры всегда передаются только по значению, что определяется как «скопировать значение и передать копию»:
- копируется значение примитива и передается в метод, исходный примитив неизменен, так как в метод ушла его копия
- копируется ЗНАЧЕНИЕ ССЫЛКИ на объект, поэтому объект может быть изменен в методе.

19
Q

Если передать массив и изменить его в методе, то будет ли изменяться текущий массив?

A

Да, текущий массив изменится тоже.