【Android开发】Java 异常 Exception

前言: Java 中 Exception 继承自Throwable。在程序的编译、运行过程中,JVM检测、捕获这些异常,保证程序运行的健壮性。

Exception 分类

Exception 总共有两大类:

  1. Unchecked Exception(Runtime Exception)
  • Checked Exception(非Runtime Exception)

提醒:所有的RuntimeException都是Unchecked Exception,其余的全是CheckedException.
区别:Unchecked 与Checked 区别在于,对于CheckedException,我们必须对其检查处理,也就是必须添加try…catch…捕获异常、或者throw 抛出异常。而对于UncheckedException,可以选择处理,也可以不处理。推荐不处理这些异常。

【Android开发】Java 异常 Exception_第1张图片
常见异常.png

异常处理

  • try 块:用于捕获异常。其后可接零个或多个catch块,若没有catch块,则必须跟一个finally块。
  • catch 块:用于处理try捕获到的异常。
  • finally 块:无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。其实 finally 语句块是在 try 或者 catch 中的 return 语句之前执行的。更加一般的说法是,finally 语句块应该是在控制转移语句之前执行,控制转移语句除了 return 外,还有 break 和 continue。

在以下特殊情况下,finally块不会被执行:
1)在finally语句块中 发生了异常。
2)try或者catch中System.exit(0)退出程序。
3)程序所在的线程死亡。
4)计算机断电、失火、或遭遇病毒攻击

【Android开发】Java 异常 Exception_第2张图片
异常处理.png
  • 代码示例:
//该代码直接借用的@Dandan Meng 的,他写的很棒,我就没有再去创建
public class ExceptionTest
{
    public static void main(String[] args)
    {
        int c = 0;
        try
        {
            int a = 3;
            int b = 0;

            // 这块代码出现了异常 ,除数不能为0 
            c = a / b;
            // 那么异常之后的代码都不会被执行
            System.out.println("Hello World");
        }
        catch (ArithmeticException e)
        {
            e.printStackTrace();
        }
        finally
        {
            //不管有没有发生异常,finally语句块都会被执行
            System.out.println("Welcome");
        }

        System.out.println(c);
        // 当b为0时,有异常,输出为c的初始值0
    }
}

小结

关于异常,知识点不是很多,网络上资料很全面,我写的这些大部分摘抄自网络,下面附上比较不错的参考博客
参考链接:
http://www.cnblogs.com/mengdd/archive/2013/02/03/2890923.html

https://docs.oracle.com/javase/8/docs/api/overview-tree.html
https://www.ibm.com/developerworks/cn/java/j-lo-finally/

你可能感兴趣的:(【Android开发】Java 异常 Exception)