黑马程序员技术交流社区

标题: 异常 [打印本页]

作者: 王广彬    时间: 2012-8-10 01:04
标题: 异常
class Math{
        public int div(int i,int j) throws Exception{        // 定义除法操作,如果有异常,则交给被调用处处理
                int temp = i / j ;       
                return temp ;
        }
};
public class ThrowsDemo01{
        public static void main(String args[]){
                Math m = new Math() ;               
                try{
                        System.out.println("除法操作:" + m.div(10,2)) ;
                }catch(Exception e){
                        e.printStackTrace() ;       
                }
        }
};

如果现在在主方法的声明上也使用了throws关键字,是不是就意味着主方法也可以不处理异常了?
作者: 牛杨    时间: 2012-8-10 01:14
本帖最后由 牛杨 于 2012-8-10 01:17 编辑

如果现在在主方法的声明上也使用了throws关键字,是不是就意味着主方法也可以不处理异常了?
对的 只要是在main方法上声明使用throws ,那么你这个异常就抛给了jvm了 。
在运行这个程序的时候,jvm会调用自己默认的异常处理方式进行异常处理。

对于你这个除数为0的异常,其实也不用在函数上throws之也没问题。因为 对于运行时异常(除数为0的异常就是运行时异常)你可以 不用在函数上声明之 也可以,甚至于你不处理都可以,到最后丢给jvm进行处理
但是对于编译时期出现的异常。比如我们操作流时常见的IOException异常,这就是编译时异常。对于这种编译时异常 必须要处理之(处理方式可以抛出之,也可以捕获之)。
但是建议 最好还是用try—catch块捕获之,然后在catch块中转换成其他形式的运行时异常
作者: 王健    时间: 2012-8-10 01:15
本帖最后由 王健 于 2012-8-10 01:17 编辑

会,,,main方法就会默认抛给JVM执行的话,是会报错的,,
main方法是如何处理异常的。
A:在main里面编写代码进行处理
B:交给jvm自己进行处理。采用的是jvm的默认处理方式。
其实就是相当于调用了异常对象的printStackTrace()方法。
作者: 武鹏玉    时间: 2012-8-10 01:15
java中的main函数抛出的异常由JVM(java虚拟机)处理。

在java程序中如果异常都向外抛,直到try{}catch处捕获;

楼主所说的是这种情况:
如果到了主方法(main方法)仍没有捕获,异常就由java虚拟机(java运行环境)处理




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