Java Exception

原创 2016年08月30日 09:18:05

异常种类:

Checked Exception:因为用户的原因导致的异常,程序员需要处理
Error:因为系统的原因导致的异常,程序员不需要处理
Runtime Exception:因为程序员的逻辑问题导致的异常,需要处理

异常体系

Throwable
  |-- Error
  |-- Exception
       |-- RuntimeException
       |-- CheckedException

try-catch-finally

try必须加catch或者finally中的一个
try-with-resource其实就是try-finally,一个语法糖而已

常见的面试题

return
throw
出现再try catch finally中的情况

  1. 当return出现在try中,并且被执行了(如果return之前发生了异常就是没有被执行)
    eg.
     public static int testException() {
        int b = 0;
        try {
            b = 1;
            return b;
        } catch (ArithmeticException e) {
            System.out.println(b);
        } finally {
            System.out.println(b);
            b=2;
        }
        return 0;    
    }

调用:

     System.out.println(testException());

输出:

    1
    1

也就是说,return不影响finally的执行,return的执行过程是:计算return后面的表达式的值,然后压入一个返回栈中,接着去执行finally代码块finally中更改b这个变量并不会影响返回栈中的值。但是如果finally中有return语句的话,之前的返回值就会被抛弃。(相当于又往返回栈中压入了一个新的数据,所以栈顶变了)
eg.

     public static int testException() {
        int b = 0;
        try {
            b = 1;
            return b;
        } catch (ArithmeticException e) {
            System.out.println(b);
        } finally {
            System.out.println(b);
            b=2;
            return b;
        }  
    }

调用:

    System.out.println(testException());

输出为:

        1
        2

当return出现在catch代码块中和出现在try中的分析过程是一样的,当catch中的return被执行就会先计算return之后表达式的值,然后压入返回栈中,finally中更改return返回的变量的值是不会影响返回栈顶的值的,但是如果在finally中有return语句,那么就是向返回栈中压入了新的数据。

  1. 当throw同时出现在try和finally中,并被执行
    eg.
    public static void testException() throws Exception {
        try {
            throw new Exception("exceptionA");
        }finally {
            throw new Exception("exceptionB");
        }
    }

此时try中的异常被抑制掉了,也就是被抛弃了,对外只有finally中的异常被抛出

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

JAVA之Exception篇(2)——性能

  • 2013年08月30日 20:48
  • 14KB
  • 下载

java Exception

  • 2011年09月10日 00:00
  • 96KB
  • 下载

Java中的Checked Exception——美丽世界中潜藏的恶魔?

Java中的Checked Exception——美丽世界中潜藏的恶魔?   在使用Java编写应用的时候,我们常常需要通过第三方类库来帮助我们完成所需要的功能。有时候这些类库所提供的很多API都通过...

java开发exception部分

  • 2014年12月16日 12:14
  • 343KB
  • 下载

nested exception is java.sql.SQLException: Data truncated for column 'PassWord' at row 72

Cause: java.sql.SQLException: Data truncated for column 'PassWord' at row 72

浅谈java异常[Exception]

从异常角度来说这样严格的程序确实是万无一失,所有的异常都能捕获。但是站在编程人员的角度,万一这个程序出错了我们该如何分辨是到底是那引起的呢,io还是jdbc...所以,这种写法很值得当做一个反例。大家...

java exception

  • 2014年06月25日 20:13
  • 32KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java Exception
举报原因:
原因补充:

(最多只允许输入30个字)