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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

看到一个问题问在try中可以抛出异常吗?自己试了下,是可以的,但是好像只能放在try语句的最后一行,不知道是不是这样的,还有在catch中抛异常可能是处理不了或者想反馈给调用者信息,那么在try中抛异常的作用是什么?Java允许这样做应该有他的原因吧?
自己实验的代码如下:
public class test3 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                try{
                        int[] arr=new int[3];
                        arr[0]=1;
                        System.out.println(arr[0]);
                        throw new RuntimeException("ss");
                }
                catch(Exception e){
                        e.printStackTrace();
                }
        }

}

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
如果该异常处理不了,但是并不属于该功能出现的异常,可以将异常转换后,在抛出和该功能相关的异常或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去,当调用者知道,并处理,也可以将捕获异常处理后转换新的异常

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
哥们,估计是BUG吧,我也想知道,请大牛解答!!
回复 使用道具 举报
有些异常是可以修复的。但你又不知道如何修复,只好抛给调用你这个方法的人来修复了。如
你:
public void a(int a){
int val = 10 /a;  //这里a = 0时会出异常,你可以捕获,但你又不知道调用你这个方法的人的意图,只好把异常抛给他
}
所以你保证那个方法就只有你用的话,那你不用抛出异常了。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
可以啊 ,就像你写的代码,直接 throw new RuntimeException("ss");那么当代码运行到这里,绝对会把异常抛给jvm,而jvm直接停止运行。所以这一行必须在最后,因为在它后面的语句也执行不到。另外catch中捕获的是别的异常,可以这么理解,try中抛出多个异常,而他只是捕捉其中的一些异常,另外的一些就被你抛出去了。所以是没有问题的。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
当捕获的异常,本功能处理不了时,可以继续在catch中抛出。
try
{
   throw new AException();
}
catch (AException e)
{
    throw new BException();
}
如果该异常处理不了时,但并属于该功能出现的异常,可以将异常转换后,再抛出和该功能相关的异常。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
在try中可以抛出异常 、
Java的异常处理是通过5个关键字来实现的:try,catch,throw,throws,finally。
throw和throws都是抛出异常的,但塔门有区别:
throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。
throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法声明中指明要跑出的异常;如果要捕捉throw抛出的异常,则必须使用try—catch语句。可见,throw可以主动抛出异常,也就是可以在try中抛出异常。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

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