如果在catch块中引发了新的异常,当然是抛出这个新的异常给调用该方法的方法,后面的代码不再执行,但是如果有finally方法块,会执行其中的内容,为了更好地说明这个执行过程,下面附加我的验证代码。
class ExceptionTest
{
public static void method() throws NoException
{
Demo d = new Demo();
try
{
int x = d.div(4,-1);
System.out.println("x="+x);
}
catch (FuShuException e)
{
System.out.println(e.toString());
throw new NoException("FuShuException中发生NoException!"); //这里代表着在catch中出现新的异常,抛出
}
finally
{
System.out.println("finally");//finally中存放的是一定会被执行的代码。
}
}
public static void main(String[] args) // throws NoException
{
try
{
method();
}
catch (NoException e) //抛出后的异常在这里被捕获,并在catch中处理;
//如果不处理,就在main函数中抛出,交给JVM处理;
//一般不建议不处理,自己处理能自定义提示信息,方便解决问题。
{
System.out.println(e.toString());
}
System.out.println("over");
}
}
class FuShuException extends Exception
{
FuShuException(String msg)
{
super(msg);
}
}
class NoException extends Exception
{
NoException(String msg)
{
super(msg);
}
}
class Demo
{
int div(int a,int b)throws FuShuException
{
if(b<0)
throw new FuShuException("除数为负数");
return a/b;
}
}
为了演示异常中出现异常的处理方法,定义了2个自定义异常FuShuException和NoException,都继承于Exception类。
最后,附上异常处理原则。(都是毕老师总结的,认真看视频就知道了) 1,处理方式有两种:try 或者 throws。
2,调用到抛出异常的功能时,抛出几个,就处理几个。一个try可以对应多个catch。
3,多个catch,父类的catch放到最下面。
4,catch内,需要定义针对性的处理方式。不要简单的定义printStackTrace,输出语句。
try
{
throw new AException();
}
catch (AException e)
{
throw e;
}
如果该异常处理不了,但并不属于该功能出现的异常。
可以将异常转换后,在抛出和该功能相关的异常。
或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去,
当调用者知道。并处理。也可以将捕获异常处理后,转换新的异常。
try
{
throw new AException();
}
catch (AException e)
{
// 对AException处理。
throw new BException();
}
|