一 异常
异常是什么?异常是程序员修正之后还能继续运行的错误。
分类:Checked异常和Runtime异常,Checked异常是指在编译阶段被处理的异常,Runtime异常是指在运行期间才能发现的异常。其中RuntimeException类及其子类的异常时间被称为Runtime异常,其他的异常都是Checked异常。
二 异常处理机制
1 使用try...catch捕获异常
try
{
//业务实现代码
...
}
catch(Exception e)
{
//错误处理代码
}
按照这种逻辑关系进行处理,但是如果执行try块里的业务逻辑代码时出现异常时,系统会自动生成一个异常对象,该异常对象被提交给Java运行环境,这个过程被称为抛出(throw)异常。Java运行环境收到异常对象时,会找能处理该异常对象的catch块,如果找到合适的,这个过程叫做捕获异常;如果Java运行环境招不到捕获的catch块,则运行环境中止,Java程序退出
2 异常的继承体系
Throwable是父类,分为Error和Exception。
3 Java7的多异常捕获
1 捕获多种类型的异常时,多种异常类型之间用(|) 隔开
2 捕获多种类型的异常是,异常变量有隐式的final修饰符,因此程序不能对异常变量重新赋值。
4 如何访问异常信息
要访问catch后面的异常信息,需要通过访问catch块后异常形参来获得。
主要有4中方法:getMessage(),printStackTrace(),printStackTrace(PrintStream s),getStackTrace()。
5 使用finally回收资源
1 必须有try块,finally块中的内容一定会执行
2 如果在try块中出现System.exit(1),finally块中不会执行
3 finally中使用throw或return等很可能导致方法中止
6 自动关闭资源的try语句
自动关闭资源实现类必须实现AutoCloseable或Closeable接口
package ThrowableTest;
import java.awt.print.Printable;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
public class AutoCloseTest {
public static void main(String[] args) throws IOException
{
try(
//声明、初始化两个可关闭的资源
//try语句会自动关闭这两个资源
BufferedReader br=new BufferedReader(new FileReader("AutoCloseTest.java"));
PrintStream ps=new PrintStream(new FileOutputStream("a.txt")))
{
//使用两个资源
System.out.println(br.readLine());
ps.println("转生晓梦迷蝴蝶");
}
}
}
7 throws声明抛出异常
当前方法不知道如何处理这种类型的异常,该异常由上一级调用者处理;如果main()方法也不知道如何处理这种类型的异常没有可以使用throws声明抛出异常,将该异常交给JVM处理。JVM处理方法就是,打印异常的跟踪栈信息,并中止程序运行。
throws声明抛出值能在方法签名中使用,throws也可以声明抛出多个异常类,多个异常类之间用逗号隔开。
throws ExceptionClass1,ExceptionClass2...
8 throw抛出异常
程序员显式的抛出异常,则应该使用throw语句,throw语句可以单独使用,throw抛出的不是异常类,而是异常实例。
定义的异常都是基于Exception异常,并且需要提供两个构造器,一个是无参数构造器,一个是带一个字符串参数的构造器。
package ThrowableTest;
public class AuctionException extends Exception {
//无参数构造器
public AuctionException()
{
}
public AuctionException(String s)
{
super(s);
}
}
9 catch和throw同时使用
如果在实际应用中往往可能面临更复杂的处理方式,需要catch和throw同时使用。

浙公网安备 33010602011771号