最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

Java 系列教程(12)异常处理

[复制链接]
跳转到指定楼层
楼主
发表于 2018-1-23 15:37:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
1、 为什么要处理异常#
异常处理不是为了让程序不出错,而是为了一旦程序出错,能够有一个相关的机制让程序执行一些代码来减少损失,使程序更加健壮、可维护。 这些代码是事先写好的,只有在错误发生的时候才会运行。

2、 异常的概念和分类#
2.1 概念#
异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”,开发过程中的语法错误和逻辑错误不是异常。

2.2 异常分类#
file
其中:

以下内容回帖刷新可见#
Throwable类
是所有错误的父类。Java中所有的错误类都是Throwable的子类。
Error类
Throwable类的子类,一般是指与虚拟机相关问题,如系统崩溃、虚拟机错误等,这种错误无法恢复或不可能捕获,将导致程序中断。
Exception类
是Throwable类的子类,是指还不那么严重,有挽回余地的错误,这个单词被翻译成“异常”,在 Java 中的异常处理,指的就是 Exception 的处理。
RuntimeException类
是Exception的子类,被称为“未检查异常”或“运行时异常”。
未检查异常
RuntimeException 的子类,指的是在写程序过程中可以避免的异常。可以这么来理解,之所以发生“未检查异常”,原因就是程序员写完程序以后没有好好检查;如果程序员能够好好检查自己的代码,则这些异常都可以避免发生。
如:
1)ArithmeticException:当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。
2)ArrayStoreException:试图将错误类型的对象存储到一个对象数组时抛出的异常。
3)ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出该异常。
4)IndexOutOfBoundsException:指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。
5)NullPointerException:当应用程序试图在需要对象的地方使用 null 时,抛出该异常。
已检查异常
Exception 的子类,但不是 RuntimeException的子类,指的是一类无法避免的异常,编译时报错。可以这么来记忆:“已检查异常”是程序员已经仔细把代码检查过了之后,依然会发生的异常。这种异常因为程序员无法避免,因此必须要处理。 如果一个程序可能发生已检查异常,而程序中缺少处理异常的代码,那么编译时我们会得到编译错误。
如:
1)SQLException:提供关于数据库访问错误或其他错误信息的异常。
2)IOException:当发生某种 I/O 异常时,抛出此异常。
2.3 解决异常的方法
1)遇到错误就终止程序的运行
2)向上层抛出,交给外层处理
3)编写程序时,就考虑到错误的检测、错误消息的提示,以及错误的处理;最理想是编译期处理,但是大部分异常都发生在运行期

3、 异常对象的产生和传递#
看下面的代码:
file
如果输入的不是0,则程序输出结果
file

如果输入的是0,则在mc方法中抛出一个空指针异常
file
方法调用时,是main() → ma() → mb() → mc()的链状结构,这叫做方法调用链。而当产生异常的时候,方法的代码会在产生异常的地方终止,然后把异常对象返回给方法的调用者。
产生异常之后,异常传递的方式是mc() → mb() → ma() → main()。也就是说:当方法产生并抛出一个异常时,异常会沿着方法调用链反向传递。

4、异常处理方法#
4.1 throw抛出异常#
当程序出现错误时,系统会自动抛出异常;除此之外,Java也允许程序自行抛出异常,自行抛出异常使用throw语句来完成。
throw语句可以单独使用,throw抛出的是一个异常实例,而且每次只能抛出一个异常实例。
语法格式如下:
file
如上个例子,如果输入 的值等于0,则抛出一个空指针实例。

4.2 throws声明抛出异常#
使用 throws 声明抛出异常的思路是,当前方法不知道如何处理这种类型的异常,该异常应该由上一级调用者处理;如果main方法也不知道如何处理这种类型的异常,也可以使用throws声明抛出异常,该异常将交给JVM处理。JVM处理的方法是,打印异常的跟踪栈信息,并终止程序运行。
throws声明抛出异常只能在方法签名中使用,throws可以声明抛出多个异常类,多个异常类之间以逗号隔开。
throws声明语法格式如下:
file
一旦方法中使用throws语句声明抛出该异常,程序就无须在方法中使用try ... catch块来捕获该异常了
示例:
file

4.3 try ... catch捕获异常#
除了通过 throws 进行消极处理之外,我们同样可以进行一些积极处理。 我们可以采用try-catch 的语法来捕获可能抛出的异常。
try-catch 的语法结构如下:
file
示例:
file #
file

如果在 try 语句块中没有出现异常,那么任何一个 catch 语句块都不会得到执行。但一旦 try 块中出现了异常,程序的流程会马上跳出 try 块,根据异常类型的不同,进入某一个catch 语句块。随后,这个异常被宣告处理完毕,程序将继续向下正常运行。
写捕获异常的代码时,会遵循这样一个原则:捕获子类异常的 catch 语句写在前面,捕获父类异常的 catch 语句写在后面,否则编译报错。

4.4 使用finally回收资源#
有些时候,程序在try块里打开了一些物理资源(如数据库连接、网路连接和磁盘文件等),这些物理资源都必须显示回收,就用finally处理。
finally 语句是 try-catch 语句的一个补充。在 try-catch 语句块之后,可以加上一个 finally语句块,这个语句块中的代码,无论程序执行时是否发生异常,甚至在try块或catch块中执行return语句,finally最终都会被执行。
完整的Java异常处理语法结构如下:
file
示例:
file

5、异常与面向对象#
5.1 异常与方法覆盖#
子类不能比父类抛出更多的异常,我们可以这么来理解:子类要么抛出跟父类相同的异常,要么不抛出异常,要么抛出的异常是父类抛出异常的子类。只有这样三种选择。
代码示例:
file

file

5.2 创建和访问异常信息#
创建异常信息,需要在创建异常对象实例时,在构造方法中送字符串参数,如:
throw new Exception("一个异常错误");

访问异常对象的信息几个常用方法:
getMessage():返回该异常的详细描述字符串。
printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。常用于程序员开发调试程序异常。
printStackTrace(PrintStream s):将该异常的跟踪栈输出到指定输出流。
getStackTrace():返回该异常的跟踪栈信息。
示例:
file
执行结果:
file

6、自定义异常#
6.1 创建异常类#
在 Java 中自定义一个异常类非常简单,只要保证这个异常类继承自 Exception 类就可以;而如果想要自定义一个未检查异常,则只要创建一个类继承自 RuntimeException 就可以了。
例如下面的代码:
file

6.2 设定Message属性#
在创建好的异常类中加带字符串参数类型的构造方法,在构造方法内调用父类构造方法。
代码如下:
file
完整示例如下:
file
执行结果
file
自实现异常类
file

版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海牛部落-海牛博士,http://hainiubl.com/topics/137

楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-6-11 05:14

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表