public class Solution {
public static void main(String[] args) throws Exception {
try {
ArrayList<String> list = new ArrayList<String>();
String s = list.get(18);
} catch (IndexOutOfBoundsException e) {
String s = e.getClass().toString(); // ЧТО ДЕЛАЕТ ЭТА СТРОКА? ПОЧЕМУ БЕЗ НЕЕ НЕ РАБОТАЕТ?
System.out.println(s);
}
}
}Mikhail
19 уровень
String s = e.getClass().toString(); // ЧТО ДЕЛАЕТ ЭТА СТРОКА? ПОЧЕМУ БЕЗ НЕЕ НЕ РАБОТАЕТ?
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #598481
27 ноября 2018, 10:57решение
У любого объекта в Java есть методы getClass и toString, и исключение здесь не исключение (простите, не удержался от каламбура).
Так вот. Вы ловите исключение IndexOutOfBoundsException e, где IndexOutOfBoundsException - это тип (класс) исключения, а "е" - имя переменной, в которую оно записывается.
e.getClass() - этот метод вернет вам переменную типа Class, в которой по сути и будет храниться тип этого исключения (IndexOutOfBoundsException).
А поскольку Class тоже является наследником класса Object, у него также есть метод toString(), который в данном случае возвращает фразу "class java.lang.IndexOutOfBoundsException".
К слову, когда вы выводите что бы то ни было на консоль, у этого объекта автоматически вызывается метод toString(). То есть вы увидели бы ровно такой же код, если бы заменили это
на это:
+13
Margarita
15 августа 2019, 09:13
спасибо большое за доступное объяснение!
0
EdwardAndroid Developer в Csi
3 октября 2019, 06:30
но что эта часть кода делает ?
заранее спасибо
0
hidden #598481
3 октября 2019, 07:34
Возвращает класс объекта "е" как объект класса Class.
Прости, но без тавтологии здесь не обойтись.
Выполни такой код, станет понятнее
Вывод будет такой:
Т.е. в переменной listClass у нас будет лежать объект ArrayList.class, т.к. сравнение нам вернуло true. Другими словами, в переменной класса Class лежит сам класс ArrayList. Он имеет такое строковое представление: class java.util.ArrayList
+3