首先介绍一下什么是异常:在Java语言中,将程序执行中发生的不正常情况称为“异常” 。 (开发过程中的语法错误和逻辑错误不是异常)

         Java程序在执行过程中所发生的异常事件可分为两类:

1.Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError和OOM。一般不编写针对性的代码进行处理。

2.Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如: 空指针访问试图读取不存在的文件 网络连接中断数组角标越界

        对于这些错误,一般有两种解决方法:一是遇到错误就终止程序的运行。另一种方法是由程序员在编写程序时,就考虑到错误的检测、错误消息的提示,以及错误的处理。 捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生。 比如:除数为0,数组下标越界等。所以我们得到异常的另一种分类:编译时异常和运行时异常,下面介绍一下这两种异常。

1.编译时异常是指编译器要求必须处置的异常。即程序在运行时由于外界因素造成的一般性异常。编译器要求Java程序必须捕获或声明所有编译时异常。对于这类异常,如果程序不处理,可能会带来意想不到的结果。

2.运行时异常是指编译器不要求强制处置的异常。一般是指编程时的逻辑错误,是程序员应该积极避免其出现的异常。java.lang.RuntimeException类及它的子类都是运行时异常。对于这类异常,可以不作处理,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响。

下面给出一些常见的异常:

1.java.lang.RuntimeException 

        (1)ClassCastException 

        (2)ArrayIndexOutOfBoundsException 

        (3)NullPointerException  ArithmeticException 

        (4)NumberFormatException  InputMismatchException 

2.java.io.IOExeption 

        (1) FileNotFoundException   

        (2)EOFException

3.java.lang.ClassNotFoundException

4.java.lang.InterruptedException

5.java.io.FileNotFoundException

6.java.sql.SQLException

        下面给出三种JAVA异常处理的模型:抓抛模型,声明抛出模型和手动抛出异常,其中前两种模型是Java异常类对象在程序执行过程中出现异常时由系统自动生成并抛出,第三种是根据需要使用人工创建并抛出。

抓抛模型是通过try-catch-finally语句实现的。具体格式如下:

try{
...... //可能产生异常的代码
}
catch( ExceptionName1 e ){
...... //当产生ExceptionName1型异常时的处置措施
}
catch( ExceptionName2 e ){
...... //当产生ExceptionName2型异常时的处置措施
}
(更多catch)
 finally{
...... //无论是否发生异常,都无条件执行的语句
}

        如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。 在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。

声明抛出模型通过throws来实现 ,具体格式如下:

public class A {
        public void methodA() throws IOException {
……
} }
public class B1 extends A {
        public void methodA() throws FileNotFoundException {
……
} }
public class B2 extends A {
        public void methodA() throws Exception {
//报错,重写方法不能抛出比被重写方法范围更大的异常类型。在多态的情况下,对methodA()方法的调用-异常的捕获按父类声明的异常处理。 
} }

        手动抛出异常时,首先要生成异常类对象,然后通过throw语句实现抛出操作(提交给Java运 行环境)。

        格式如下:

        IOException e = new IOException();

        throw e;

注意点:可以抛出的异常必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法错误:

         throw new String("123123123");