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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张综 于 2012-11-14 19:37 编辑

什么时候用throw跑出异常。什么时候用trycatch捕捉异常?傻傻分不清楚啊。。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 鼓励下 。

查看全部评分

6 个回复

倒序浏览
个人理解是 在方法声明部分  throw来抛出异常,然后在下面的方法主体里在try  和catch.
用throws  不处理往外面抛,给其他代码处理异常。
不知道我的理解对不对~

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 提倡原创 。

查看全部评分

回复 使用道具 举报
1.当出现的异常解决不了,要让调用者来处理时,则要将异常抛出,在方法内部用throw来抛出,
如果抛出的异常不是Runtime异常及其子类异常时,则要在方法上进行声明,用throws来声明
2.当方法内部可以进行异常处理时,用try chath 来进行捕获并处理
3.以上为我的个人理解,希望能够帮到楼主

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 很给力!

查看全部评分

回复 使用道具 举报
蔡兆军 发表于 2012-11-13 22:34
个人理解是 在方法声明部分  throw来抛出异常,然后在下面的方法主体里在try  和catch.
用throws  不处理往 ...

想要纠正你一个问题
throw是用在方法内部进行抛出异常的
而throws是用在方法上进行异常声明的
回复 使用道具 举报
Java提供的是异常处理的抓抛模型。
Java程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。
如果一个方法内抛出异常,该异常会被抛到调用方法中。如果异常没有在调用方法中处理,它继续被抛给这个调用方法的调用者。这个过程将一直继续下去,直到异常被处理。这一过程称为捕获(catch)异常。
如果一个异常回到main()方法,并且main()也不处理,则程序运行终止。
程序员通常只能处理Exception,而对Error无能为力。
异常处理是通过try-catch-finally语句实现的。

try
{
        ......        //可能产生异常的代码
}
catch( ExceptionName1 e )
{
        ......        //当产生ExceptionName1型异常时的处置措施
}
catch( ExceptionName2 e )
{
......         //当产生ExceptionName2型异常时的处置措施
}  
[ finally{
......         //无条件执行的语句
                }  ]
public class Test8_2{
              public static void main(String[] args)    {
                     String friends[]={"lisa","bily","kessy"};
              try {
                     for(int i=0;i<5;i++) {
                              System.out.println(friends[i]);
                        }
              }
                catch(ArrayIndexOutOfBoundsException e)  {
                      System.out.println("index err");
              }
              System.out.println("\nthis is the end");
       }
}
try
        捕获异常的第一步是用try{…}语句块选定捕获异常的范围,将可能出现异常的代码放在try语句块中。
catch (Exceptiontype e)
        在catch语句块中是对异常对象进行处理的代码。每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。
如果明确知道产生的是何种异常,可以用该异常类作为catch的参数;也可以用其父类作为catch的参数。
        可以用ArithmeticException类作为参数,也可以用RuntimeException类作为参数,或者用所有异常的父类Exception类作为参数。但不能是与ArithmeticException类无关的异常,如NullPointerException,那么,catch中的语句将不会执行。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
如果要将错误在当前处解决,用try{//可能发生异常区}catch(Exception e){//处理异常区}
如果自己处理不了这个exception,要将错误抛向外部,有的时候有人想这么处理这个异常,有人想那么处理异常,而你写的代码却不知道他们到底想怎么样,两边都不能得罪,简单就用throws把异常给抛出去让他们自己去处理异常

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 淡定

查看全部评分

回复 使用道具 举报
王玮 中级黑马 2012-11-14 19:23:51
7#
有那么一句话:上层不关心的异常就try,catch掉,自己处理。
                     上层关心的异常一般都throw
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马