黑马程序员技术交流社区
标题:
异常方面
[打印本页]
作者:
鲍霄霄
时间:
2012-7-12 11:56
标题:
异常方面
当catch块中引发一个异常时,它的执行过程如何?
作者:
薄炳鑫
时间:
2012-7-12 12:28
try中捕获到异常后,在catch中对异常进行处理。
一般有给用户一个提示,或者是中断当前正在执行的程序。
作者:
苑占丽
时间:
2012-7-12 12:32
catch住一个异常后, 你的catch语句中写什么就怎么处理。
比如你可以输出一些信息 来提示这些异常怎么产生的或者是什么异常等等,也可以什么都不写,就不做任何处理了。赞同0| 评论
作者:
黄丽慧
时间:
2012-7-12 12:40
不是catch中引发一个异常的,而是try语句中引发的异常,你看下面这段代码:
try
{
int x = d.div(5,0);//这边调用了一个除法函数,需要对其检查是否出现算数异常,因此就放在了try语句块中。当try中出现了异常,直接就跳到了catch中进行处理
System.out.println("x="+x);
}
catch (ArithmeticException e)//catch语句块中则是对捕获的异常进行处理,可以进行自定义处理,也可以不处理,这是根据实际需要来决定的
{
System.out.println(e.toString());
System.out.println("被零除了!!");
}
作者:
曹恒业
时间:
2012-7-12 12:43
如果在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();
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2