Проходя лекцию с исключениями у меня возникли вопросы, на которые в лекциях не было полного ответа. Поэтому я решил задать несколько конкретных вопросов у вас, и получить конкретные ответы, вместо того что бы копаться в гугле 1000 лет. Как правильно поступать с исключениями: 1. Ловить и обрабатывать постоянно? 2. Только пробрасывать? 3. Вообще не ловить? 4. Может стоит ловить все и обрабатывать? Если да то почему, если нет, аналогично – почему? 5. Для чего создавать объект-исключение?
try {
   throw new RuntimeException();
} catch(Exception except) {
   System.out.println("Перехватили исключение");
   throw except;
}
- какой смысл в коде выше создовать объект и сразу выбрасывать его в блоке catch(){} 6. Зачем повторно выбрасывать исключение?
try {
   int d = 2/0;
} catch(Exception except) {
   System.out.println("Перехватили исключение");
   throw except;
}
7. Допустим исключение было проброшено, что с ним будет дальше? 8. Объясните почему код ниже так работает, а именно: - есть требование в задаче - В блоке catch в консоли должна выводиться переменная answer, чтобы после ввода с клавиатуры "ок" все ранее введенные строки вывелись в консоли в обратном порядке. - каким образом вообще это будет работать, если я даже не прописывал "вывод в консоли в обратном порядке". - для чего в этом коде выбрасывается новое исключение? как это влияет на программу? и почему без этого "выбрасывания" строки введенные ранее не выведутся?
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        buyElephant(null, scanner);
    }

    static void buyElephant(String answer, Scanner scanner) {
        if (answer == null) {
            System.out.println("Купи слона");
        } else if (answer.toLowerCase().equals("ок")) {
            System.out.println("Так-то лучше :) Список твоих отговорок:");
            throw new SecurityException();
        } else {
            System.out.println("Все говорят \"" + answer + "\", а ты купи слона");
        }

        answer = scanner.nextLine();

        try {
            buyElephant(answer, scanner);
        } catch (Exception e) {
            System.out.println(answer);
            throw e;
        }
    }
9. Зачем нам checked-исключения? - Когда мы пишем их в сигнатуре метода, мы как бы предупреждаем что тут может возникнуть исключение, однако почему бы его сразу не обработать, и все, предупреждать не нужно. Например написал я : bufferedReader.readLine(); readLine() – будет подчеркнуто, что бы избавиться от подчеркивания нужно либо написать в сигнатуре метода throws IOException, либо обернуть в блок try{} и обработать исключение в catch(). - так вот, почему бы всегда не обрабатывать, и что будет если пробросить(куда пойдет это исключение)? p.s. Спасибо за ответы!