异常的捕获及处理
n 异常的概念:
在Java的异常处理机制中,引进了很多用来描述和处理异常的类,称为异常类。异常类定义中包含了该类异常的信息和对异常进行处理的方法。
在Java中,将异常情况分为Exception(异常)和Error(错误)两大类。
异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。
所谓异常处理,就是指程序在出现问题时依然可以正确的执行完
n 异常类的层次和主要子类
异常类(java.lang.Exception)继承于java.lang.Object中的java.lang.Throwable类。异常可分为执行异常(RuntimeException)和检查异常(Checked Exceptions)两种 :
Ø 执行异常
继承于RuntimeException
Ø 检查异常
除了执行异常外,其余的Exception子类属于检查异常类
执行异常及其用途
异常
|
说明
|
RuntimeException
|
java.lang包中多数异常的基类
|
ArithmeticException
|
算术错误,如除以 0
|
IllegalArgumentException
|
方法收到非法参数
|
ArrayIndexOutOfBoundsException
|
数组下标出界
|
StringIndexOutOfBoundsException
|
字符串越界
|
NumberFormatException
|
String转换为指定的数字类型
|
NullPointerException
|
试图访问 null 对象引用
|
SecurityException
|
试图违反安全性
|
ClassNotFoundException
|
不能加载请求的类
|
检查异常及其用途
异常
|
说明
|
AWTException
|
AWT 中的异常
|
IOException
|
I/O 异常的根类
|
FileNotFoundException
|
不能找到文件
|
EOFException
|
文件结束
|
IllegalAccessException
|
对类的访问被拒绝
|
NoSuchMethodException
|
请求的方法不存在
|
InterruptedException
|
线程中断
|
n 异常处理格式
异常处理方法有两种:
一种方法是使用try…catch…finally结构对异常进行捕获和处理;
另一种方法是通过throws和throw抛出异常。
Ø 捕获异常try-catch-finally
Java的异常处理是通过3个关键词来实现的:try-catch-finally。用try来执行一段程序,如果出现异常,系统抛出(throws)一个异常,可以通过它的类型来捕捉(catch)并处理它,最后一步是通过finally语句为异常处理提供一个统一的出口,finally所指定的代码都要被执行(catch语句可有多条;finally语句最多只能有一条,根据自己的需要可要可不要)。
try{
可能出现异常的语句
}
catch(异常类 异常对象)
{
异常处理
}
catch(异常类 异常对象)
{
异常处理
}
......
finally
{
异常的出口;
}
|
1、try语句
捕获异常的第一步就是用try {…}语句指定了一段代码,该段代码就是一次捕获并处理异常的范围。在执行过程中,该段代码可能会产生并抛弃一个或多个异常,因此,它后面的catch语句进行捕获时也要做相应的处理。
2、catch语句
每个try语句必须伴随一个或多个catch语句,用于捕获try代码块所产生的异常并做相应的处理。 catch语句有一个形式参数,用于指明其所能捕获得异常类型,运行时系统通过参数值把被抛弃的异常对象传递给catch语句
3、finally语句
捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态作统一的管理, finally所指定的代码都要被执行
public class ExceptionDemo01
{public static void main(String[] args)
{
int i = 10 ;
int j = 0 ;
System.out.println("========== 计算开始 ===========") ;
try{
int temp = i / j ;
System.out.println("计算结果:" + temp) ;
}
catch(ArithmeticException e){
System.out.println("出现了数学异常:" + e) ;
}
System.out.println("========== 计算结束 ===========") ;
}
}
|
public class ExceptionDemo02
{public static void main(String[] args)
{
int i = 0 ;
int j = 0 ;
System.out.println("========== 计算开始 ===========") ;
try{
i = Integer.parseInt(args[0]) ;
j = Integer.parseInt(args[1]) ;
int temp = i / j ;
System.out.println("计算结果:" + temp) ;
}catch(ArithmeticException e){
System.out.println("出现了数学异常:" + e) ;
}catch(NumberFormatException e){
System.out.println("输入的不是数字:" + e) ;
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("输入的参数个数不对:" + e) ;
}finally{
System.out.println("不管是否有异常,我都执行。") ;
}
System.out.println("========== 计算结束 ===========") ;
}
}
|
Ø 通过throws和throw抛出异常
throws方法:
throws关键字的最大好处是:在方法中不处理任何的异常,而交给被调用处处理。
格式:
类型 方法名(参数) throws 异常类
如:public int read() throws IOException { … }
throws子句中可以同时指明多个异常,说明该方法将不对这些异常进行处理,而是声明抛弃它们
class Math{
public int div(int i,int j) throws ArithmeticException // 除数为0异常
{
return i / j ;
}
}
public class ExceptionDemo03{
public static void main(String args[]){
Math m = new Math() ;
try{
int temp = m.div(10,0) ;
System.out.println(temp) ;
}catch(Exception e){
e.printStackTrace() ; // 打印异常
}
}
}
|
throw方法
在程序中可以使用throw关键字人为的抛出一个异常。
在异常处理中,实际上每次产生异常的时候都是产生了一个异常类的实例化对象。那么此时,也可以通过抛出异常对象的方式完成。
public class ExceptionDemo04{
public static void main(String args[]){
try{
throw new Exception("抛着玩的。") ; // 人为抛出
}catch(Exception e){
System.out.println(e) ;
}
}
};
|
自定义异常类:
import java.io.*;
class MyException extends Exception //创建自定义异常类,继承Exception类
{public MyException(String ErrorMessagr) //构造方法
{ super(ErrorMessagr); } //父类构造方法
}
public class ExceptionDemo05
{static int avg(int number1, int number2)throws MyException //定义方法,抛出异常
{
if (number1 < 0 || number2 < 0) //判断方法中参数是否满足指定条件
throw new MyException("不可以使用负数"); //错误信息
if (number1 > 10000 || number2 > 10000) //判断方法中参数是否满足指定条件
throw new MyException("数值太大了"); //错误信息
return (number1 + number2) / 2; //将参数的平均值返回
}
public static void main(String args[])throws IOException
{
try { //try代码块处理可能出现异常的代码
int result = avg(-3000, 8500); //调用avg()方法
System.out.println("平均工资:"+result); //将avg()方法的返回值输出
}
catch (MyException e)
{ System.out.println(e) ;} //输出异常信息
}
}
|
public class ExceptionDemo06{
public static void main(String args[]){
int i = 0 ;
int j = 0 ;
System.out.println("========== 计算开始 ===========") ;
try{
i = Integer.parseInt(args[0]) ;
j = Integer.parseInt(args[1]) ;
int temp = i / j ;
System.out.println("计算结果:" + temp) ;
}catch(ArithmeticException e){
System.out.println("出现了数学异常:" + e) ;
}catch(NumberFormatException e){
System.out.println("输入的不是数字:" + e) ;
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("输入的参数个数不对:" + e) ;
}catch(Exception e){
System.out.println("其他异常:" + e) ;
}finally{
System.out.println("** 不管是否有异常,我都执行。") ;
}
System.out.println("========== 计算结束 ===========") ;
}
};
|
注意:捕获更细的异常要放在捕获更粗的异常之前。
分享到:
相关推荐
mldn中李新华老师关于Java异常的捕获及处理的课堂记录
java异常的捕获及处理
为了解决这种需要由程序员承担程序出错情况判断的不正规处理模式所带来的困难和阻碍,Java引入了异常处理机制,通过代码运行到出现错误的时候由系统抛出一个运行时异常,Java程序可以很容易地捕获并处理发生的异常...
其中,使用Java异常处理机制实现全局异常统一处理是最常见的方式。 在Java异常处理机制中,当一个方法抛出异常时,该异常将被传递到调用该方法的方法中,直到找到能够处理该异常的代码为止。在这个过程中,Java使用...
跟我学Java26日通异常的捕获及处理 跟我学Java26日通异常的捕获及处理
主要介绍了java异常处理机制示例(java抛出异常、捕获、断言),需要的朋友可以参考下
Java异常机制可以保证程序更安全和更健壮。虽说Java类库已经提供很多可以直接处理异常的类,但是有时候为了更加地捕获和处理异常以呈现更好的用户体验,需要开发者自定义异常。本文是探讨如何自定义异常以及使用...
第5章 异常处理;回顾;本章内容;5.1 异常概述;5.1 异常概述;5.1 异常概述;5.1.1 程序中的异常;5.1.2 异常分类;5.1.2 异常分类;5.1.2 异常分类;5.1.2 异常分类;5.1.3 学生实践练习;5.1.3 学生实践练习; 5.2 try-catch...
Java异常处理 声明异常 抛出异常 捕获异常 如何选择异常类型 常见异常处理方式 直接抛出异常 封装异常再抛出 捕获异常 自定义异常 try-catch-finally try-with-resource Java异常常见面试题 1. Error 和 Exception ...
Java Web开发异常处理方式及AOP技术 详细介绍了web开发过程中的异常捕获及处理。
Java自定义异常处理详细介绍,包括了很多比较经典的案例,可以自己研究自定义异常
JAVA异常思维导图,便捷整理思路,异常、异常处理:捕获异常、抛出异常、自定义异常、方法覆盖中的异常处理、在处理异常时,是选择捕获处理还是抛出处理?
以下是Java异常机制的一些核心概念: 异常类: 在Java中,所有异常都是Throwable类或其子类的实例。Throwable分为两种类型:Exception(异常)和Error(错误)。异常通常表示程序可以处理的错误情况,而错误通常...
Java异常处理机制是一种用于有效管理程序运行时错误的方法。在Java中,通过try、catch和finally语句来实现异常捕获与处理: 1. **基础异常捕获**: - 当代码执行过程中出现如除数为零的`ArithmeticException`等...
Java捕获和处理异常.pdf 学习资料 复习资料 教学资源
Java中的异常处理机制是一种用于捕获和处理程序运行过程中可能出现的异常情况的机制。当程序执行过程中出现异常时,异常处理机制允许我们捕获和处理这些异常,以便程序能够以一种可控的方式处理错误情况。 Java中的...
Spring中,使用切面全局捕获异常的同时,进行自定义异常抛出捕获,方便代码书写。
异常的捕获与处理.关于java技术方面参考。
第一行代码Java源代码第6章【课程代码】异常的捕获及处理共8页.pdf.zip