网站首页 > 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产品/技术/推广,提供最有价值的干货文章。
- 上一篇: Java编程中,13条优雅处理异常的最佳实践
- 下一篇: Java中的异常及处理方法
猜你喜欢
- 2025-01-03 聊一聊java中的异常
- 2025-01-03 学习Java异常,吃透这篇足够
- 2025-01-03 轻松搞定 JAVA 异常面试,25 道题及答案全掌握!
- 2025-01-03 Java全局异常处理,你不知道的骚操作(含hotspot源码分析)
- 2025-01-03 Android应用编程基础第19篇:Java语言中的异常处理
- 2025-01-03 Java中异常处理机制的详细解析及其优化示例代码
- 2025-01-03 java异常处理try/catch/finally
- 2025-01-03 Java异常详细介绍
- 2025-01-03 java安全编码指南之:异常处理
- 2025-01-03 Java8学习-Lambda表达式中处理异常的解决方案
你 发表评论:
欢迎- 04-24Java Collections 工具类集合框架中常用算法解析
- 04-24桶排序的简单理解
- 04-24Java集合框架底层实现原理大揭秘
- 04-24Java 集合框架全面解析:选对数据结构,提升开发效率
- 04-24c#集合排序
- 04-24Java面试中常被问到的集合类深度解读
- 04-24VBA技术资料MF278:对集合进行排序
- 04-24Spring 最常用的 7 大类注解,史上最强整理
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)