A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© freeboyhrk 中级黑马   /  2013-3-31 16:01  /  1712 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 freeboyhrk 于 2013-4-3 11:03 编辑

谁帮我详细讲讲,具体什么情况抛,什么情况try啊?

点评

如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢  发表于 2013-4-2 20:05

8 个回复

倒序浏览
首先要清楚,如果没有try的话,出现异常会导致程序崩溃。
而try则可以保证程序的正常运行下去,比如说:
try{
int i = 1/0;
}catch(Exception e){
........
}
一个计算的话,如果除数为0,则会报错,如果没有try的话,程序直接崩溃。用try的话,则可以让程序运行下去,并且输出为什么出错!
try的话,配合log4j使用会对程序的日后维护帮助很大。


这个是在网上找到的  希望能帮助到你

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
http://blog.csdn.net/idulx/article/details/7332588

你自己看看这个链接  说的挺相信的
回复 使用道具 举报
1、定义功能时,功能中有什么问题,都应该进行预先的处理比如try catch.如果处理不了,应该通过throws声明抛出,让调用者进行处理。
2、调用了抛出异常的功能的函数,应该进行处理,如果使用try catch处理的话,被调用的功能上抛出几个异常,就应该对应几个catch语句,必须要对多个异常进行针对性的处理。
3、如果出现多个catch中存在着父类异常的catch,那么这个catch一定放在catch的最后,通常这种情况在面试很多见。
4、如果函数内抛出异常,那么一定要在函数上声明,否则编译失败,但是要注意函数内抛出的异常是运行时异常(RuntimeException),那么函数上是可以不用throws声明的。
5、如果函数内抛出了异常,进行了本功能内部的处理,但是处理的并不完全,这时应该在异常处理中,继续将异常抛出,让在函数上声明让调用者知道问题的存在,但是有可能需要将异常进行转换,尽量抛出调用者识别的异常,处理起来更方便。
6、当子类覆盖父类中的异常声明的方法时,子类方法只能声明父类的异常或者该异常的子类。如果父类抛出了多个异常,那么子类在覆盖时买智能抛出父类异常的子集。
7、如果父类和接口中的方法没有声明抛出过异常,那么子类的覆盖父类方法时,也不能抛出异常,如果子类中的方法发生了异常,那么子类只能try catch不能用throws声明,只能try,不能抛,如果非要在函数内抛出异常,那么只能抛出RuntimeException,因为这种异常不用在函数声明上。


这是我的笔记   希望能帮到你。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
没有规律,完全看业务需求,看你需要在哪一层捕获异常进行处理或者记录日志。
例如:
如果是工具类,需要其他类来调用使用的话最好是throws。
如果是正式使用的话肯定需要try catch。
另外再给你点异常处理的规则:
    第一、try语句不能单独存在,可以和catch、finally组成 try...catch...finally、try...catch、try...finally三种结构,catch语句可以有一个或多个,finally语句最多一个,try、catch、finally这三个关键字均不能单独使用。

    第二、try、catch、finally三个代码块中变量的作用域分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。

    第三、多个catch块时候,Java虚拟机会匹配其中一个异常类或其子类,就执行这个catch块,而不会再执行别的catch块。

    第四、throw语句后不允许有紧跟其他语句,因为这些没有机会执行。

    第五、如果一个方法调用了另外一个声明抛出异常的方法,那么这个方法要么处理异常,要么声明抛出。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
其实很简单,如果出现异常,我们能解决,那么我们就不抛给上一步就要用catch   里面写你处理的语句,比如说x/y,如果Y输入的是o ,那么我们可以给他一个提示说非法数据什么的,这样就不用抛,如果异常是这一步不能处理的,那么我们就需要抛给上一步用到throw   

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
万蕾 中级黑马 2013-3-31 16:50:05
7#
抛出异常是为了告诉调试着或者自己,这段代码存在问题,在下次使用时就需要使用者注意或优先解决这个问题才能正常使用。或者说这是自己在编译时期遗留下来的问题,因为需要谨慎思考解决方案,而暂时搁置的一段有问题的代码。(我觉得就如同做试卷一样吧,先把难的题目作上标记一边下次回头思考。)
而try应该就是把有问题的代码框起来,先不去看它,继续下面的程序。对于调试者来说,try{}catch{}使用较多。(我觉得这就像是批改试卷吧,把有问题的代码圈起来,作上标记,告诉你这里是错误的。可能需要自己改正,或者别人帮你改正)
这是我的理解,仅供参考!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
咳咳,我觉得还是有代码才能把这个问题说清楚~

当能够预料到处理产生的异常的时候,而且想让业务层(尽量不要在业务层处理异常,把异常抛到控制器让控制器去处理)的代码看起来简洁,那就throw出一个RuntimeException





然后控制器就需要使用 try 代码块了,因为我需要处理业务层来的各种知道的异常或者不知道的





另一种经常用到try finally 代码块的是 资源的关闭,这个大家应该比较清楚~



关于checked和unchecked Exception的问题,Spring之父和thinking in java的作者曾经辩论过,我个人觉得还是尽量避免checked异常吧,除非你实在觉得这个异常具有毁灭性的灾难,你需要用户程序员去注意~~~


还有,楼主的学习方法有问题,你至少应该自己去查资料再来问,你信不信我这个帖子的收获比你大~


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
黄小贝 发表于 2013-3-31 16:54
咳咳,我觉得还是有代码才能把这个问题说清楚~

当能够预料到处理产生的异常的时候,而且想让业务层(尽量 ...

嗯,谢谢你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马