package com.javarush.task.task09.task0915;
import java.io.CharConversionException;
import java.io.IOException;
import java.nio.file.FileSystemException;
/*
Перехват выборочных исключений
*/
public class Solution {
public static StatelessBean BEAN = new StatelessBean();
public static void main(String[] args) {
try
{
processExceptions();
}
catch (Exception s0)
{
}
}
public static void processExceptions() {
try
{
BEAN.methodThrowExceptions();
}
catch (FileSystemException e)
{
BEAN.log(e);
throw e;
}
catch (CharConversionException e)
{
BEAN.log(e);
throw e;
}
catch (IOException e)
{
BEAN.log(e);
throw e;
}
}
public static class StatelessBean {
public void log(Exception exception) {
System.out.println(exception.getMessage() + ", " + exception.getClass().getSimpleName());
}
public void methodThrowExceptions() throws CharConversionException, FileSystemException, IOException {
int i = (int) (Math.random() * 3);
if (i == 0)
throw new CharConversionException();
if (i == 1)
throw new FileSystemException("");
if (i == 2)
throw new IOException();
}
}
}
ругается именно только в тех местах где я использую "throw e", мол must be caught or declared to be thrown...
Даниил
12 уровень
Не понимаю, что от меня хотят, написал, но оно даже не компилируется
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Павел
9 октября 2018, 23:40
Ты в catch пытаешься снова пробросить исключение выше, но метод в котором ты это делаешь не может этого сделать так как это не описано в его поведении(throws). Подробнее предыдущий оратор расписал.
0
hidden #598481
9 октября 2018, 23:25
требуется разобраться как работают исключения :)
Исключения можно либо обработать в блоке try-catch либо пробросить (throw) наружу.
Задача просит пробросить не все виды исключений, а лишь некоторые (см. условие).
Поэтому лишние throw убирай.
Затем.
Когда ты говоришь throw, ты буквально говоришь программе: в этом месте выброси исключение.
Исключение программа могла бы выбросить и сама, например исключение ввода-вывода, если бы ты читал поток, например. Поэтому, когда есть чтение потока и гипотетически возможна ситуация ошибки ввода вывода, требуется обозначить, что у тебя все под контролем, и что ты в курсе, что метод может выбросить исключение. Для этого используют специальную нотацию, при объявлении метода пишут не просто myMethod(), а myMethod throws someException, перечисляя те исключения, которые могут возникнуть в методе. У тебя этого не хватает.
Ну и наконец условие требует, чтобы в методе мейн тоже было логирование, не забудь добавить.
0