В следующем фрагменте кода есть случаи, когда процессы не могут обрабатывать NullPointerException
и IllegalStateException
. А именно в том случае, когда у меня есть входные значения val=-4
или val=-2
.
Я читал, что добавление throws
после сигнатур методов поможет. Но код все равно прерывается, если я передам упомянутые значения.
public class Test extends Throwable{
public static void processA(int val ) throws NullPointerException, IllegalStateException{
try{
System.out.println("1");
processB(val);
}catch(ArithmeticException e){
System.out.println("2");
}
System.out.println("3");
}
public static void processB(int val) throws NullPointerException, IllegalStateException{
try{
System.out.println("4");
processC(val);
}catch(NullPointerException e){
System.out.println("5");
processC(val+4);
}finally{
System.out.println("6");
}
System.out.println("7");
}
public static void processC(int val)throws NullPointerException, IllegalStateException, ArithmeticException{
System.out.println("8");
if(val<1) throw new NullPointerException();
if(val==1) throw new ArithmeticException();
if(val>1) throw new IllegalStateException();
System.out.println("9");
}
public static void main(String[] args) throws Exception {
processA(1); //processA(-2) or processA(-4)
}
}
try-catch
или повторно передать исключение своему вызывающему объекту. Компилятор также выдаст вам сообщение об ошибке, говорящее, что исключение должно быть обработано, но это произойдет только для исключений checked. Те, которые вы выбрасываете, являются непроверенными исключениями. Это означает, что в вашем случае вы можете игнорировать их из объявления метода. - person Nicholas K   schedule 30.01.2019