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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package yichang;

public class Question {
        public static void func()throws Exception{//为什么不加throws Exception 就编译错误?
                try{
                        throw new Exception();
                }
                finally{
                        System.out.println("B");
                }
        }
        public static void main(String[] args) {
                try{
                        func();
                        System.out.println("A");
                }
                catch (Exception e) {
                        // TODO: handle exception
                        System.out.println("C");
                }
                System.out.println("D");
        }
}

4 个回复

倒序浏览
你的fun()函数里try了但是怎么没catch呢??try{}catch(){}和throws是异常处理的两种方法不该一块在一个函数里用啊
回复 使用道具 举报
本帖最后由 少年闰土 于 2015-6-1 13:09 编辑

首先说执行结果吧:
B
C
D
原因:首先程序以main方法为入口,进入main函数后调用func方法,在func方法中你使用了try和finally语句块,在这里不管执行try语句块是否出现异常都会执行finally语句块,所以会打印B
然后继续分析main方法,main方法的try语句块中的func方法抛出了Exception异常所以A不会打印,并且会被catch 捕获所以直接跳到catch语句块中执行打印C
main执行完try-catch语句块后继续执行下一行程序,所以打印D,至此main执行完毕,程序结束。
另外,之所以在func方法声明中要用throws关键字声明此方法可能会抛出异常Exception,是因为在func函数中你throw了一个Exception异常,但是你没有用catch语句去捕获处理,这样就必须声明func方法会抛出异常,方便在调用func方法的方法中处理。
回复 使用道具 举报
蜗牛的异想世界 发表于 2015-6-1 11:24
你的fun()函数里try了但是怎么没catch呢??try{}catch(){}和throws是异常处理的两种方法不该一块在一个函 ...

谢谢哦,虽然题目过去好久了,大家相互进步
回复 使用道具 举报
少年闰土 发表于 2015-6-1 13:07
首先说执行结果吧:
B
C

思路很清晰,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马