Java进阶篇(四)——Java异常处理
程序中总是存在着各种问题,为了使在程序执行过程中能正常运行,使用Java提供的异常处理机制捕获可能发生的异常,对异常进行处理并使程序能正常运行。这就是Java的异常处理。
一、可捕获的异常
Java中可以捕获的异常分为可控式和运行时异常。
1. 可控式异常
在Java中把那些可以预知的错误,在程序编译时就能对程序中可能存在的错误进行处理,并给出具体的错误信息,这些错误称为可控式异常。常用的可控式异常如下:
| 异常 | 说明 |
| IOException | 当发生某种I/O异常时,抛出此异常 |
| SQLException | 提供关于数据库访问错误或其他错误信息的异常 |
| ClassNotFoundException | 类没有找到异常 |
| NoSuchFieldException | 类不包含指定名称的字段时产生的信号 |
| NoSuchMethodException | 无法找到某一特定方法时,抛出该异常 |
2. 运行时异常
在Java中不能被编译器检测到的错误称为运行时异常。常用的运行时异常如下:
| 异常 | 说明 |
| IndexOutOfBoundsException | 指示某集合或数组的索引值超出范围时抛出该异常 |
| NullPointerException | 当应用程序试图在需要对象的地方使用null时,抛出该异常 |
| ArithmeticException | 当出现异常的运算条件时,抛出此异常 |
| IllegalArgumentException | 抛出异常的表明向方法传递了一个不合法或不正确的的参数 |
| ClassCastException | 当试图将对象强制转换为不是实例的子类时,抛出该异常 |
二、处理异常
在Java中当程序出现异常时,可以使用try···catch、try···catch···finally或try···finally进行处理。
1. 使用try···catch处理异常
try后是正常执行的语句,而catch后是对异常处理的语句,catch的括号中是程序需要处理的异常类型。语法格式如下:
try {
正常执行的语句
} catch(Exception e) {
对异常进行处理的语句
}
这里举一个算数异常的例子,如下。
public class ExceptionTest {
public static void main(String[] args) {
int result = 1 / 0;
try {
System.out.println(result);
} catch (Exception e) {
System.out.println("抛出异常:" + e.getMessage());
}
}
}
这里1/0是个异常的算法,因为除数不能为0。运行结果如下:

因为有异常,所以不执行try后的语句,从而执行catch后的语句。其中“e.getMessage()”是获取异常信息的方法,用于获取详细消息字符串;此外还有printStackTrace()方法,用于将其栈踪迹输出至标准错误流;toString()方法用于获得简短描述。
2. 使用try···catch···finally处理异常
这里try、catch后的语句与前面的相同,而finally后的语句无论是否发生异常都要执行,因此finally语句块通常用于执行垃圾回收。语法格式如下:
try {
正常执行的语句
} catch(Exception e) {
对异常进行处理的语句
} finally {
一定会被处理的语句
}
3. 使用try···finally处理异常
在程序发生异常时,就可以在finally语句块中对其进行相应的处理,另外当程序没有发生异常时,执行完try和finally之间的语句后,也将执行finally语句块中的代码。语法格式如下:
try {
需要执行的语句
} finally {
一定会被处理的语句
}
三、抛出异常
对于程序中发生的异常,除了上面的try···catch语句处理之外,还可以使用throws声明或throws语句抛出异常。
1. 使用throws声明抛出异常
throws用于方法声明,在声明方法时使用throws声明抛出异常,然后在调用该方法中对异常进行处理。
如需声明多个异常,各异常间要用逗号分隔,语法格式如下:
数据类型 方法名(形参列表) throws 异常类1, 异常类2, ……, 异常类n {
方法体;
}
比如用throws抛出Exception异常。
public void showInfo() throws Exception { // 抛出Exception
FileInputStream in = new FileInputStream("C://Record.txt"); // 创建IO对象
}
2. 使用throw语句抛出异常
如果希望程序自行抛出异常,可以使用throw语句来实现。语法格式如下: throw new Exception("对异常的说明");
使用throw语句抛出的是异常类的实例,通常与if语句一起使用。如:
if(x < 0) {
throw new Exception("程序异常,x不能小于0。");
}
Java进阶篇(四)——Java异常处理的更多相关文章
- Java线程间通信方式剖析——Java进阶(四)
原创文章,同步发自作者个人博客,转载请在文章开头处以超链接注明出处 http://www.jasongj.com/java/thread_communication/ CountDownLatch C ...
- java提高篇(四)-----理解java的三大特性之多态
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- Java总结篇:Java多线程
Java总结篇系列:Java多线程 多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的. 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: ...
- Java进阶(三十七)java 自动装箱与拆箱
Java进阶(三十七)java 自动装箱与拆箱 前言 这个是jdk1.5以后才引入的新的内容.java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装称为装箱,解包装称为 ...
- java提高篇-----理解java的三大特性之封装
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- Java进阶篇(六)——Swing程序设计(上)
Swing是GUI(图形用户界面)开发工具包,内容有很多,这里会分块编写,但在进阶篇中只编写Swing中的基本要素,包括容器.组件和布局等,更深入的内容会在高级篇中出现.想深入学习的朋友们可查阅有关资 ...
- Java进阶篇(六)——Swing程序设计(下)
三.布局管理器 Swing中,每个组件在容器中都有一个具体的位置和大小,在容器中摆放各自组件时很难判断其具体位置和大小,这里我们就要引入布局管理器了,它提供了基本的布局功能,可以有效的处理整个窗体的布 ...
- Java进阶篇(五)——Java的I/O技术
程序中,为了永久的保存创建的数据,需要将其保存在磁盘文件中,以便在其它程序中使用它们.Java的I/O技术可以将数据保存到文本文件.二进制文件甚至是ZIP压缩文件中,以达到永久性保存数据的要求. 本篇 ...
- Java进阶篇(一)——接口、继承与多态
前几篇是Java的入门篇,主要是了解一下Java语言的相关知识,从本篇开始是Java的进阶篇,这部分内容可以帮助大家用Java开发一些小型应用程序,或者一些小游戏等等. 本篇的主题是接口.继承与多态, ...
- Java进阶篇(三)——Java集合类
集合可以看作一个容器,集合中的对象可以很容易存放到集合中,也很容易将其从集合中取出来,还可以按一定的顺序摆放.Java中提供了不同的集合类,这些类具有不同的存储对象的方式,并提供了相应的方法方便用户对 ...
随机推荐
- golang 队列
You have to perform NN operations on the queue. The operations are of following type: E xE x : Enque ...
- Effective Java 第三版——17. 最小化可变性
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- bootstrap媒体查询
Bootstrap 中的媒体查询允许您基于视口大小移动.显示并隐藏内容.下面的媒体查询在 LESS 文件中使用,用来创建 Bootstrap 网格系统中的关键的分界点阈值. /* 超小设备(手机,小于 ...
- Check whether a remote server port is open on Linux
链接:https://www.pixelstech.net/article/1514049471-Check-whether-a-remote-server-port-is-open-on-Linux
- Windows服务框架与服务的编写
从NT内核开始,服务程序已经变为一种非常重要的系统进程,一般的驻守进程和普通的程序必须在桌面登录的情况下才能运行,而许多系统的基础程序必须在用户登录桌面之前就要运行起来,而利用服务,可以很方便的实现这 ...
- keynote 代码高亮
brew install highlight (同时会安装 Lua 和 Boost) highlight -K 18 -s Vampire -u 'utf-8' -O rtf test.html | ...
- IdentityServer4 中文文档
一.介绍 特性一览 整体介绍 术语的解释 支持的规范 包和构建说明 二.快速入门 设置和概述 #1 使用客户端证书控制API访问 #2 使用密码认证方式控制API访问 #3 使用OpenId Conn ...
- 一次Oracle宕机切换后产生ORA错误的处理过程
问题背景 机房意外断电后Oracle主服务器启动失败,Oracle备机接管 为了安全,管理员对于数据库做expdp的逻辑备份.但备份时发现AttributeInstance表备份失败,提示ORA-01 ...
- 从头开始基于Maven搭建SpringMVC+Mybatis项目(3)
接上文内容,本节介绍基于Mybatis的查询和分页功能,并展示一个自定义的分页标签,可重复使用以简化JSP页面的开发. 从头阅读传送门 在上一节中,我们已经使用Maven搭建好了项目的基础结构,包括一 ...
- HDU1061-Rightmost Digit-规律题,快速幂
Rightmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...