一 异常

异常是什么?异常是程序员修正之后还能继续运行的错误。

分类: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同时使用。