异常处理

异常

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

错误(Error):JVM系统内部错误、资源耗尽等严重情况(无法补救,只能修改代码)

异常(Exception): 其它因编程错误或偶然的外在因素导致的一般性问题,

例如:

  • 对负数开平方根
  • 空指针访问
  • 试图读取不存在的文件
  • 网络连接中断   

所有异常的父类Exception

常见异常

v RuntimeException运行时异常       

   在运行期间有可能发生异常     也可能不会发生异常,

   那么我们可以捕获,我们也可以不捕获;这种异常叫做《非检查异常》

   1.程序在运行过程中如果出现了异常,你也进行了异常捕获  那么此程序可以顺利执行完成,而不会异常终止

2.如果已经捕获异常,就可以对出现异常的代码进行补救or处理

  • ArithmeticException:数学计算异常
  • NullPointerException:空指针异常
  • NegativeArraySizeException:负数组长度异常
  • ArrayOutOfBoundsException:数组索引越界异常
  • ClassNotFoundException:类文件未找到异常
  • ClassCastException:造型异常
public class ExceptionTest {
public static void main(String[] args) {
        String s=null;
        try {//异常捕获    
            Object o=new String();
            String str1=(String) o;
            String str=(String) new Object();//造型
            
            System.out.println(args[1000]);
            System.out.println(s.length());
        } catch (NullPointerException e) {//异常处理          空指针异常
    System.out.println("使用null对象出现异常,请检查你的代码!");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("数组下标越界!");
        } catch (ClassCastException e) {//造型(类型转换)异常
            System.out.println("类型转换异常");
            e.printStackTrace();//打印异常
        }
        System.out.println("程序执行完成!");
    }
}

e.printStackTrace();//打印异常

v IOExceptionIO流异常

  • FileNotFoundException:文件未找到异常
  • EOFException:读写文件尾异常
  • MalformedURLException:URL格式错误异常
  • SocketException:Socket异常

Java异常处理机制

v Java程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。

v 当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。

v 如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。

v 程序员通常只能处理违例(Exception),而对错误(Error)无能为力。

异常处理的try-catch-finally语句

try{

// 可能会抛出特定异常的代码段

}catch(MyExceptionType  myException){

// 如果myException 被抛出,则执行这段代码

}catch(Exception otherException){
//如果另外的异常otherException被抛出,则执行这段代码

} [finally{

//无条件执行的语句

}]

v try—将可能出现异常的代码都放在try代码块中,当然,也可以将其他的一些不会引起异常的代码也一并放到try代码块中

 

v catch 从句中引入一个可能出现的异常,一个try块可以和多个catch块配合以处理多个异常

 

v 当try块内的任何代码抛出了由catch 子句指定的异常,则try代码端中的程序将会终止执行,并跳到相应的catch代码块中来执行

 

v 无论是否出现异常,程序最后都会执行finally代码块中的内容

 

 

 

抛出异常

v 在定义一个方法的时候,如果并不能确定如何处理其中可能出现的异常,可以不在方法中对异常进行处理,而是将可能发生的异常让这个方法的调用者来处理

v 可以对下列情形在方法定义中抛出异常:

  • 方法中调用了一个会抛出“已检查异常”的方法
  • 程序运行过程中发生了错误,并且用throw子句抛出了一个“已检查异常”

v 不要抛出如下异常:

  • 从Error中派生的那些异常
  • 从RuntimeException中派生的那些异常,如NullPointerException等

 

 

除了RuntimeException异常和它的子异常都是检查检查异常   

 以外的异常都是检查异常 是必须捕获的or必须处理的;

检查异常:必须要对它进行捕获or处理,如果不去捕获也不处理,将会报错

 

posted @ 2014-12-13 00:05  屌丝一枚#  阅读(137)  评论(0)    收藏  举报