黑马程序员技术交流社区
标题:
异常处理
[打印本页]
作者:
易杰
时间:
2013-4-21 11:16
标题:
异常处理
本帖最后由 易杰 于 2013-4-21 23:38 编辑
在声明方法一个时
方法体中的代码会有异常,这时异常是使用try/catch在方法体中捕获,还是声明方法时使用throws往外抛。。
为什么?
作者:
周音匀
时间:
2013-4-21 11:29
try.catch后面可以跟处理异常的代码,是由自己来处理,throw只是抛出异常,由调用方处理,也就是往上抛让更外面的catch处理,如果都没有代码处理,则整个程序异常,并运行结束
作者:
陈湘林
时间:
2013-4-21 11:31
一般都是throw外抛
作者:
王海龙2013
时间:
2013-4-21 11:49
抛出异常
在函数上通过throws声明异常,提高安全性,让调用者进行处理,否则编译失败。
调用者可继续抛出异常,或try处理问题。
声明异常时,要声明更为具体的异常,使处理可以更具体。
声明几个异常,就对应几个catch块,不要定义多余的catch块。多个catch块中异常若出现了继承
关系,父类异常catch块放在最下面。
int div(int a,int b)throws Exception//在函数上通过throws关键字声明该功能可能有问题,由调用者进行处理。
//throws 异常1,异常2 :声明多个异常
{
return a/b;
}
}
class ExceptionDemo
{
public static void main(String[] args)//调用者throws Exception继续抛出问题或通过try处理问题
{
Demo d = new Demo();
//使用try格式处理问题
try
{
int x = d.div(4,0);
System.out.pritln("x="+x);
}
catch (Exception e)//Exception e = new ArithmeticException();
{
//多态,父类方法调用子类对象覆写
System.out.pritln(e.toString());//对捕获异常对象调用方法处理
System.out.pritln("除零了");
}
//catch (异常1){}分别具体处理声明的异常
//catch (异常2){}
System.out.pritln("over");
}
}
复制代码
作者:
陈雨
时间:
2013-4-21 11:54
分情况的,
1.如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时也不可能抛出异常。这时只能try-catch处理。
2.当异常的发生是由操作者的操作失误引起时,希望问题发生时程序停掉后,对代码进行修正,这时就不声明出来,常见于RuntimeException及其子类。
3.其他的情况就是,你想将问题直接处理,就用try-catch;或者抛出来,函数内throw,函数上就必须throws声明出来
作者:
袁术森
时间:
2013-4-21 11:57
定义功能,功能内部因为传入的参数问题,导致了功能会出现问题。这时为了解决这个问题,通常,我们都会将问题通过throws声明在函数上。
目的:为了调用者在使用这个功能的时候,能明确
处理方式。也就是说throws抛出的目的是为了让调用者预先定义好问题的处理方式。
如果直接在方法体进行try cathch进行捕捉就不用在函数上进行声明了 大多都是声明往外抛给调用者,让调用者进行处理
作者:
先小涛
时间:
2013-4-21 12:16
总结是try还是抛:
1、必须try的情况是:继承的父类或者实现的接口的方法中没有异常抛出,那么子类在覆盖方法时也不能抛出异常。
2、一般定义父类或接口时,一般会预料到将要发生异常,却不能预料发生什么异常,此时会在函数上声明异常,即抛。如果预料到得异常是RuntimeException型的异常,那么也可以不抛。
3、在子类中实现父类或接口中声明过有异常的,则最好try。因为此时是具体实现,应该清楚会发生什么异常,所以最好try。当然也可抛,这样的话调用者就需要try了。
作者:
up.yfei
时间:
2013-4-21 13:07
两种都可以啊,try{}catch{}是由自己来处理异常,如果是throws的话,就是自己现在不处理,交给调用方处理。
具体情况要看具体代码了,一般的话想立刻处理就try{}catch{} 不想立刻处理的就throws
作者:
黄玉昆
时间:
2013-4-21 21:56
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2