黑马程序员技术交流社区

标题: try...catch和throws区别。 [打印本页]

作者: cyc523633157    时间: 2014-8-3 10:32
标题: try...catch和throws区别。
本帖最后由 cyc523633157 于 2014-8-4 12:56 编辑

简要说明try...catch和throws区别。

作者: 怀念黑海岸    时间: 2014-8-3 11:14
本帖最后由 怀念黑海岸 于 2014-8-3 15:51 编辑

有一天,你发现你的屋子又脏又乱,而你是一个勤快的人,你该怎么办呢,恩没错,自己动手打扫,这就是try{}catch{},你不想打扫就叫个钟点工来帮你打扫就是使用throws。
一般建议,哪儿出现的问题就在哪儿吧他解决了。哪儿跌倒了哪儿爬起来不是主要原因,而是因为对产生异常的地方进行处理能有效的分离程序正常流程代码和问题处理代码,这对于运行程序来说,也是健壮性的提升嘛,除非产生了你这儿实在无法处理的异常你才往外抛。
至于什么时候使用哪种办法处理异常也是有一些原则的,比如如果你要重写一个父类或者接口中的方法,但是这个方法在父类和接口中并未声明有异常抛出,那你在重写这个方法是却产生了异常,那你该怎么办呢?
最常见的就是多线程中你要重写Thread或者Runnable中的run方法,你在run方法中如果使用sleep方法时就会产生中断异常,你是该抛出呢还是不抛出呢?
      秉承着:谁污染谁治理,谁开发谁保护的原则,这儿产生的异常你要自己就吧它给处理掉,这儿就得用try语句块,而不是单纯的跑出去。
      简而概之:父类或者接口中的方法没有抛出异常的话那么子类和实现类中的重写方法也不能抛出异常。

作者: 孤守星空    时间: 2014-8-3 11:19
throws是直接把问题扔给别人虚拟机,try,catch是自己处理异常
作者: 张涛的狂怒    时间: 2014-8-3 11:33
学习了:)
作者: yuli2039    时间: 2014-8-3 11:53
补充一下自己的理解,发生异常时的处理方式有两种,要么抛出,要么try、catch处理。当异常的发生的时候我们希望给调用者一个反馈,而不是直接处理掉,这时我们就可以throws抛出。
简单举个例子:
Person类有两个子类Student和worker,都具有吃饭方法,而Student有学习方法,worker有工作方法,都是子类特有方法,如果我们要调用学习方法,但是你传入的对象是worker,这时候就抛出异常,告诉调用者,传入的对象错误!而不是自行try、catch处理掉,不提示调用者!!!
作者: liqi    时间: 2014-8-3 12:06
怀念黑海岸 发表于 2014-8-3 11:14
有一天,你发现你的屋子又脏又乱,而你是一个勤快的人,你该怎么办呢,恩没错,自己动手打扫,这就是try{}c ...

发现你举得例子都挺好,理解的都很深。对,代码和异常都写到一块,不方便阅读,分离开,提高了健壮性
作者: LFW    时间: 2014-8-3 13:53
有一个歹徒,你是警察,抓住了歹徒,你try-catch就是就地枪毙,throws就是移交法院警局
作者: likeermei    时间: 2014-8-3 14:12
try catch是不想暴漏出去的异常,throws是自己解决不了或者是故意向外暴漏的异常,针对java的异常很多大牛都说是个鸡肋,造成了过多的冗余代码,但很多小白又很喜欢它,简化了自己处理的逻辑。到现在都还一直在争论,本人涉入你叫浅显,工作中几乎没用到。当然工作能力很一般,所以才想加入深圳42期。共同努力
作者: liubea    时间: 2014-8-3 14:15
我的理解是try...catch是自己解决异常,throws是抛出去给别人解决异常。
作者: lijiang    时间: 2014-8-3 15:33
我擦,都是讲故事的
作者: 怀念黑海岸    时间: 2014-8-3 15:44
liqi 发表于 2014-8-3 12:06
发现你举得例子都挺好,理解的都很深。对,代码和异常都写到一块,不方便阅读,分离开,提高了健壮性 ...

呵呵 客气客气
作者: 李煜    时间: 2014-8-3 15:51
声情并茂
作者: xj55646    时间: 2014-8-3 15:59
try{}catch{}是自己拦截异常并且处理,而throws是将异常抛给此方法的调用者
作者: 何磊    时间: 2014-8-3 16:39
yuli2039 发表于 2014-8-3 11:53
补充一下自己的理解,发生异常时的处理方式有两种,要么抛出,要么try、catch处理。当异常的发生的时候我们 ...

赞一个!!
作者: 文盲庄稼汉    时间: 2014-8-3 16:40
嗯。最后一句话非常重要
作者: alvinbx    时间: 2014-8-3 16:42
try..catch 代码块,是指,你接收try代码块抛出异常,并在catch代码块中处理掉。
作者: 晓风    时间: 2014-8-4 11:07
try--catch:
    1,try--catch用在方法内部;
    2,try--catch是在方法内部直接将异常处理掉,如果出现异常,则调用者不用处理;但如果在catch块中处理时,用到了throw关键子将异常抛出,则此时要在方法上用throws声明抛出的异常,且如果抛出的是非RuntimeException类型的异常的话,调用者必须对异常进行处理。
throws:
    1,throws是在方法参数列表后使用,是用于声明该方法会抛出声明异常;
    2,使用throws关键字时,无论方法十分真的有异常,如果抛出的异常是非RuntimeException类型的话,调用者都必须要处理。
作者: 楚风★憧憬    时间: 2014-8-4 15:44
异常的2种处理方式;try{}catch(){}捕获会发生异常的代码,然后catch(){}给出相应的处理,
throws()将异常抛出去给虚拟机,让编译通过。不进行处理
作者: cyc523633157    时间: 2014-8-4 15:46
楚风★憧憬 发表于 2014-8-4 15:44
异常的2种处理方式;try{}catch(){}捕获会发生异常的代码,然后catch(){}给出相应的处理,
throws()将异常 ...

恩,你答的太对了。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2