Android应用编程基础第20篇:Java异常处理实例分析
上一篇我们讲了Java语言中的异常处理机制,包括基本概念和整体的处理流程,以及try、catch、finally关键字的使用。本篇我们将通过实例来具体讲解。
让我们先看下面这个异常的实例:
01public class TestException_1
02{
03public static void main(String args[])
04{
05int array[]=new int[5];// 容许 5 个元素
06array [10]=7;// 下标值超出所容许的范围
07System.out.println("main()方法结束!");
08}
09}
上面的代码在编译的时候不会出现任何错误,但是在运行时执行到第6行就会产生错误,并输出以下信息:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at TestException_1.main(TestException_1.java:6)
错误的原因是数组下标超出了最大允许的范围。Java 发现这个错误之后,便由系统抛出“
ArrayIndexOutOfBoundsException”这个种类的异常,用来表示错误的原因。如果没有相应的处理异常的程序代码,Java 的默认异常处理机制会先抛出异常,然后终止程序运行。
程序在第6行抛出异常后变停止了,根本不会运行到第7行。如果我们想要程序能运行到最后,就需要在抛出异常的位置加上异常处理的代码。因此我们将TestException_1做一些修改,请看TestException_2。
01public class TestException_2
02{
03public static void main(String args[])
04{
05try//try代码块
06{
07int array[]=new int[5];
08array [10]=7;//出现异常,数组越界
09}
10catch(ArrayIndexOutOfBoundsException e)
11{
12System.out.println("数组超出绑定范围!");
13}
14finally// finally代码块的程序代码一定会执行
15{
16System.out.println("这里一定会被执行!");
17}
18System.out.println("main()方法结束!");
19}
20}
输出结果:
数组超出绑定范围!
这里一定会被执行!
main()方法结束!
程序说明:
1、第 5~9 行的 try 代码块是用来检查是否会有异常发生。
2、当try代码块中有异常发生,且抛出的异常属于
ArrayIndexOutOfBoundsException 类时,则会运行第 10~13 行的catch代码块。
3、 程序第 7 行声明一个array 的整型数组,并开辟了 5 个数据空间。
4、 程序第 8 行为数组中的第 10 个元素赋值,此时已经超出了该数组本身的范围(就是我们俗称的数组越界),所以会出现异常,抛出的是
ArrayIndexOutOfBoundsException类的异常。发生异常之后,程序语句转到 catch 语句中去处理,输出“数组超出绑定范围!”字符串。
5、异常处理完后程序走进 finally代码块,输出“这里一定会被执行!”字符串。
6、直到最后方法结束,输出“main()方法结束!”字符串。
由TestException_2可看出,通过异常的机制,即使程序运行时发生问题,只要能捕捉到异常,程序便能顺利地运行到最后。
异常处理的方法可以看下图:
图1 异常处理的方法
从图1中可以看到TestException_1和TestException_2是两种不同的异常处理的方法。
1.TestException_1是Java默认的异常处理方法,在发生异常时会抛出异常并输出异常信息,然后程序便会终止运行。
2. TestException_2是通过自行编写try-catch-finally块来捕捉异常并输出提示信息。在实际使用中,我们可以在catch代码块中加入一些自定义的提示信息,方便后期定位错误修复错误。
最后让我们用一个段子结束今天的文章。
“世界上最真情的相依,是你在try我在catch,无论你发神马脾气,我都默默承受,静静处理。”
感谢大家!
----------
微价值网(公号vjiazhi),关注移动互联网,以及APP产品/技术/推广,提供最有价值的干货文章。