Назад к вопросам
JuniorТеорияЧасто
Что выведет программа?
import java.util.HashSet;
public class Main {
static HashSet<String> out = new HashSet<>();
static void borrow(String t) throws LoanException { if (!out.add(t)) throw new LoanException(t); }
public static void main(String[] args) {
try {
borrow("Dune");
borrow("Dune");
} catch (LoanException e) { System.out.println(e.getMessage()); }
}
}
class LoanException extends Exception { LoanException(String t) { super(t + " is out"); } }Dune is out
- Ждать
Dune:getMessage()возвращает то, что конструктор передал вsuper, а этот конструктор добавляет к названию" is out". - Ждать, что ничего не будет выведено:
addвозвращаетfalseдля элемента, который уже есть во множестве, поэтому второйborrowбросает исключение, аcatchпечатает сообщение.
- Что выведет программа, если второй вызов —
borrow("Emma")? - Почему
mainобязан ловитьLoanExceptionи что изменится, если класс унаследуетRuntimeException?