黑马程序员技术交流社区

标题: 在try中可以抛异常吗?什么时候会用到这种情况 [打印本页]

作者: 一直很安静    时间: 2013-11-26 10:48
标题: 在try中可以抛异常吗?什么时候会用到这种情况
看到一个问题问在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    时间: 2013-11-26 11:07
如果该异常处理不了,但是并不属于该功能出现的异常,可以将异常转换后,在抛出和该功能相关的异常或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去,当调用者知道,并处理,也可以将捕获异常处理后转换新的异常
作者: 忄雾飞扬    时间: 2013-11-26 11:07
哥们,估计是BUG吧,我也想知道,请大牛解答!!
作者: 邓伟    时间: 2013-11-26 11:24
有些异常是可以修复的。但你又不知道如何修复,只好抛给调用你这个方法的人来修复了。如
你:
public void a(int a){
int val = 10 /a;  //这里a = 0时会出异常,你可以捕获,但你又不知道调用你这个方法的人的意图,只好把异常抛给他
}
所以你保证那个方法就只有你用的话,那你不用抛出异常了。
作者: 回天之力    时间: 2013-11-26 11:27
可以啊 ,就像你写的代码,直接 throw new RuntimeException("ss");那么当代码运行到这里,绝对会把异常抛给jvm,而jvm直接停止运行。所以这一行必须在最后,因为在它后面的语句也执行不到。另外catch中捕获的是别的异常,可以这么理解,try中抛出多个异常,而他只是捕捉其中的一些异常,另外的一些就被你抛出去了。所以是没有问题的。
作者: 帅气的冬瓜    时间: 2013-11-26 11:41
当捕获的异常,本功能处理不了时,可以继续在catch中抛出。
try
{
   throw new AException();
}
catch (AException e)
{
    throw new BException();
}
如果该异常处理不了时,但并属于该功能出现的异常,可以将异常转换后,再抛出和该功能相关的异常。
作者: 容嬷嬷当年也是    时间: 2013-11-26 13:18
在try中可以抛出异常 、
Java的异常处理是通过5个关键字来实现的:try,catch,throw,throws,finally。
throw和throws都是抛出异常的,但塔门有区别:
throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。
throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法声明中指明要跑出的异常;如果要捕捉throw抛出的异常,则必须使用try—catch语句。可见,throw可以主动抛出异常,也就是可以在try中抛出异常。





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