一:异常的概念
1、异常是指程序在运行过程中发生在正常情况以外的事件。如用户输入错误、除数为0、需要的文件不存在等等。
2、异常处理指对程序运行过程中产生的异常情况进行恰当的技术。
二:异常处理机制
1、java语言有两种处理异常的方式:
一是利用try...catch...finally语句处理异常,优点是分开了处理异常代码与程序正常代码,增强了程序可读性,减少中途终止程序运行可能带来的危害;
二是由Java异常处理机制预设方式处理,一旦程序发生异常,停止执行程序并显示一些错误信息给用户。如果没有处理异常的措施,系统可能崩溃。
2、异常类结构:
学习Java API,从类结构开始有助于快速了解API的主要作用和使用方法。Java异常处理机制中,类java,lang.Throwable是所有异常类的祖先类,Throwable类有两个直接子类。①Error 子类,它包含Java系统或执行环境中发生的异常,用户无法捕捉它们,如CPU运行错误、内存溢出、I/O错误等:②Exception子类,它包含一般性的异常,如数组下标越界异常、除数为0异常、类型转换异常、I/O异常、SQL异常等,用户能用trycatch…finally语句捕捉它们,也能定义这些异常类的子类创建自己的异常处理。图10-3显示Java语言的异常类结构。
Java的异常类型(Exception子类)分为受检查异常和不受检查异常。图10-3所示的 Error 类和 RuntimeException类及其子类是不受检查异常(Unchecked),其他如SQLException类、IOExcepti类等是受检查异常(Checked)。
(1) Error 子类代表Java系统内部错误,如ThreadDeath类、1OError类等,Java系统不能处理这些异常,由虚拟机直接抛出。这些异常属于不受检查异常。
(2) RuntimeException子类代表运行时异常,是程序运行过程中产生的错误,程序员通过调试修复它们。例如,通过检查数组下标和数组边界避免数组越界异常、类型转换前通过 instanceof 运算符进行类型检查等。这些异常也属于不受检查异常。
(3)其他子类如IOException、SQLException FileNotFoundException,它们的特点是程序运行前Java编译器会检查它们,如果程序中可能出现这类异常,程序员需要用异常处理语句try.catch…finally 捕获,或者用throws子句抛出,否则不能通过编译。
例如,打开一个文件,如果文件不存在将抛出FileNotFoundExcepton类属于受检查异常。图10-4的代码出现了受检查异常类FileNotFoundExcepton,如果不处理就不能通过编译。给出两种处理措施:①在方法的声明处用throws抛出这个异常;②用try…catch… finally 语句处理。图10-5为使用try…catch…finally语句处理受检查异常的代码,程序通过编译。受检查异常(编译异常)必须被处理。
-+
三、 try…catch… finally语句
【语法格式1】异常处理。
try{
//可能出现异常的代码
}catch(异常类1异常对象){
//处理异常代码
}[catch(异常类2异常对象){
//处理异常代码
}catch(异常类3异常对象){
//处理异常代码
}… ]
[finally{
//一定会运行的代码
}]
JDK7之后,Java 对 try…catch…finally语句进行了改进,语法更加简洁。
【语法格式2】异常处理(JDK 7)。
try {
//可能出现异常的代码
}catch(异常类1[异常类2|异常类n]异常对象){
//处理异常代码
}finally{
//一定会运行的代码
}
注意:
不管异常是否被捕获,finally 子句中的代码都会执行;
通常,在 finally 子句中编写一些关闭资源的代码;
try
语句允许我们定义在执行时进行错误测试的代码块;
catch
语句允许我们定义当 try
代码块发生错误时,所执行的代码块。
总的来说:
try{ //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 }
catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行
}
finally { //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally
}
四、throws
见下一篇博客