Как исключение повторного выброса завершается внешним уловом?
enter code here
`class Rethrow
{
public static void genException()
{
int n[]={4,8,16,32,64,128};
int d[]={2,0,8,0,4};
for(int i=0;i<n.length;i++)
{
try{
System.out.println("n/d is:"+n[i]/d[i]);
}
catch(ArithmeticException exc)
{
System.out.println("Cant Divide By Zero");
throw exc;
}
catch(ArrayIndexOutOfBoundsException exc)
{
System.out.println("No match element found ");
// rethrow the exception
}
}
}
}
class RethrowDemo
{
public static void main(String args[])
{
try
{
Rethrow.genException();
}
catch(ArithmeticException exc) // catch the rethrow Exception
{
// recatch exception
System.out.println("Fatal Error "+"Program Termiated.");
}
}
}
Вопрос 1:: почему улов класса "RethrowDemo" завершает исключение, генерируемое уловом (Arithmetic Exception) класса "Rethrow".
Вопрос 2: как работает передача контроля??
1 ответ
В Java, когда происходит событие, которое нарушает нормальный поток вашего приложения Exception
объект создается, и он передается в стек вызовов для обработки вызывающей стороной или для дальнейшей обработки для обработки / обработки кем-то еще выше в иерархии.
Из-за того, что вы не можете разделить на ноль ArithmeticException
брошен с линии System.out.println("n/d is:"+n[i]/d[i]);
и так как вы делаете это в течение try...catch
блок твой catch(ArithmeticException exc)
говорит "Если есть ArithmeticException
брошенный изнутри try
тогда я здесь, чтобы справиться с этим ".
Именно в этом catch
блок вы печатаете Cant Divide By Zero
и затем повторно выбрасывая оригинальное исключение. Это затем пузыри до вызывающего метода, в вашем случае до main
метод, но так как вы делаете вызов изнутри try...catch(ArithmeticException exc)
тот catch
в main
говорит: "Я разберусь с этим ArithmeticException
что вы только что перебросили ". Именно в этот момент вы затем печатаете Fatal Error Program Termiated
и приложение заканчивается.
Существует множество учебных пособий, которые полностью объясняют, как работают исключения в Java, поэтому было бы полезно взглянуть на некоторые из них.