开发者社区 问答 正文

在java中一个方法抛两个异常会怎样

在一个java方法中同时用throw和throws抛出异常。会有不良的影响么。会不会有一个一个异常抛不出去的情况发生啊?

展开
收起
蛮大人123 2016-03-23 18:22:51 3961 分享 版权
2 条回答
写回答
取消 提交回答
  • 如果在一个执行分支上,不可以抛两个异常,会提示代码错误
    2019-07-17 19:11:40
    赞同 展开评论
  • 我说我不帅他们就打我,还说我虚伪

    方法声明时可以抛出异常,但是并不代表调用这个方法时会发生异常。
    测试要构造异常条件才能走入异常分支的啊。例如:

    public class ExceptionTest {
        /**
         * 判断某个列表中,某个位置处的值是否是指定的字符串
         * 可能抛出两种异常
         * @param value
         * @param list
         * @param index
         * @return
         */
        public static boolean isTargetInCertainIndex(String value,List<String> list,int index)
            throws IllegalArgumentException,IndexOutOfBoundsException {
            if(value==null||list==null){
                throw new IllegalArgumentException("date is null");
            }
    
            if(index>list.size()){
                throw new IndexOutOfBoundsException("index is out of bounds");
            }
    
            boolean flag = false;
            String data = list.get(index);
            return value.equals(data);
        }
    
        public static void main(String[] args) {
            List<String> list = new ArrayList<String>();
            list.add("hello");
            list.add("world");
            list.add("I");
    
            boolean flag = false;
            //没有异常的测试
            try {
                flag = isTargetInCertainIndex("hello",list,0);
                System.out.println("flag:"+flag);
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
    
            //一种异常的情况
            try {
                flag = isTargetInCertainIndex(null,list,0);
                System.out.println("flag:"+flag);
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
    
            //另一种异常的情况
            try {
                flag = isTargetInCertainIndex("hello",list,4);
                System.out.println("flag:"+flag);
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }

    测试一下就知道构造了三种测试用例,走入三种不同流程的。

    2019-07-17 19:11:40
    赞同 展开评论
问答分类:
问答标签:
问答地址: