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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 袁世宇 黑马帝   /  2011-11-21 18:50  /  3284 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 袁世宇 于 2011-11-21 22:38 编辑

什么时候用try catch?什么时候用throws?

9 个回复

倒序浏览
本帖最后由 hou3172568 于 2011-11-21 19:13 编辑

当你想捕获到异常的时候用try{}catch{};当你不想处理它,想直接往外抛,直接显示出异常信息时就用throws。
如:try{......
          }catch(Exception e){这里面就可以写上出现异常了你想让程序怎么办}

public void method()throws Exception{方法里面出现异常你什么也做不了,直接抛出了}

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
崔浩 黑马帝 2011-11-21 19:13:59
藤椅
如果一个方法会有异常,但你并不想处理这个异常,就在方法名后面用throws,这样这个异常就会抛出,谁调用了这个方法谁就要处理这个异常,或者继续抛出,使用方法
对于会觉得会有异常抛出的程序块,用try{}包住,然后用catch来抓住这个异常,在catch中对异常做处理,
在try中如果有异常的话,程序会转到catch而不会中断,通常这两个是配合使用的,如果你不想因为程序有错,而抛出一大堆异常的话,你就把该程序try起来,

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
冯敏 黑马帝 2011-11-21 19:29:32
板凳
当一个方法或类中存在异常,但你只是编写该方法或该类,就一直用throw向上抛,谁调用谁处理(用try{}catch),当你使用的时候有必要用try{}catch处理一下

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
自身的错误用try,catch  用户输入错误,软件自身解决不了的问题用throw  如用户输入错误!
回复 使用道具 举报
  try-catch是用来处理别人抛出的exception的,当你觉得你有足够的能力以及足够的信息处理该方法中可能出现的异常时,就使用它。而当你觉得你没有能力处理时,你就要首先声明该方法可能出现异常,抛出异常,将该异常交给调用者处理,当调用者也没能力处理时,它又一层一层往上抛,直到主函数解决异常为止。我们需要明白的是:throws抛出的异常最终都是在try-catch中解决的。这样就感觉有点像:老板和打工仔的关系。老板(throws)就只管分发任务,而就难为了try-catch了。  
回复 使用道具 举报

首先说明一下:
  throw总是出现在函数体中,用来抛出一个异常。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块
  throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。对大多数Exception子类来说,Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型。如果异常的类型是Error或 RuntimeException, 或它们的子类,这个规则不起作用, 因为这在程序的正常部分中是不期待出现的。

对于非RuntimeException(被检测异常):
1.当用throw将异常抛出时,必须用throws来声明异常,调用者必须给出相应的处理,要么也throws,交给jvm去处理;要么用try...catch...finally去捕捉异常。
2.可以不用将异常throw出去,这时可用throws来声明可能出现的异常,并且调用者也要给出处理,要么也throws,要么try..catch..finally
3.有时也可以不用将异常throw出去,也可不用throws 声明异常,直接用try..catch..finally来捕捉就行

对于RuntimeException(属于非检测异常):
RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。
处理RuntimeException的原则是:
1.如果出现RuntimeException,那么程序就会停掉,并且一定是程序员的错误。这时jvm也无能为力,只有修正代码。
例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。
2.如果抛出了RuntimeException,可以用throws来声明,也可不用声明。也可用try..catch来捕捉,但这时一旦出了RuntimeException,try..catch也不起作用了,程序仍然会停掉。因为这是程序员的操作有误,只能修正代码了。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
moonlight 黑马帝 2011-11-21 21:45:33
8#
throws  声明方法时候,如果不声明throws的话,那么一般的Exception都要在这个方法中终结,也就是说一定要有相应的catch处理,否则编译时会产生错误。如果方法声明了throws的话,可以交给上一级方法去处理以此类推,但是有些Exception可以不加捕捉,编译也会通过。继承Exception类, 可以自己定义Exception,对于特定的状态,用throw抛出专用 的例外。关键字:try、catch  用个形象的比喻,如果说throws相当于职业介绍中介的话,那try和 catch就 是一对倒霉的打工仔,throws只是告诉编译器--方法可能产生的异常问题,然后把问题处理抛给try和catch。,他们一个负 责发现异常关系,一个负责异常捕获。
回复 使用道具 举报
袁世宇 黑马帝 2011-11-21 22:36:52
9#
多谢大家了
回复 使用道具 举报
刘永昌 黑马帝 2011-11-21 23:13:00
10#
虽然很多人已经答得很好了,这几天我就要申请考试了,分数还不够,希望老师给力给力,不甚感激!

一般编程处理异常都用 try- catch 的这样才显得严谨,应为在catch 块里面有具体的处理方式(毕老师讲,在实际开发中该try的地方一定不能偷懒抛),
若是异常代码块不需要在当前方法体里面处理,则用throws 把异常声明抛出,在平时练习的时候,为了使代码块紧凑,易于观看可以用throws声明抛出,让调用它的方法体去处理。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马