Java 异常

Java的异常处理机制:
发生异常的方法生成一个异常对象(包含详细信息),交给运行时系统(抛出throw)

系统寻找相应的方法处理异常,从方法的调用栈中查找,回溯直到找到对应的方法(catch)。

或者被java的默认处理程序捕获处理。

1、try{}

catch(Exception e){}

catch(Exception e){}

finally{  //最终处理,都会执行,通常用于关闭文件,清除资源}

语句

尝试运行try中的语句,出现异常则被catch捕获

 

2、异常的分类:

Throwable:  Error和Exception

Error:有java虚拟机生成并抛出,程序中不应该捕获这些异常

Exception(RuntimeException、IOException):java程序中可能出现的异常,需要在程序中处理。

异常分为:检查性异常和非运行时异常。检查性异常需要全部处理否则编译时出错

 

Exception的常见子类:

ArithmeticException  算术溢出错误  

ArrayIndexOutOfBandsException  数组下标异常  

ArrayStoreException  数组储存异常,数组复制时目标数组类型不一致

NullPointerException  空指针异常

NumberFormatException  数据格式异常,将非数字直接转换成数值时产生。

 OutOfMemoryException  内存溢出异常,对象过大

 

IOException

FileNotFoundException 

NoClassDefFoundException  未找到类定义

 

3、throw e 重新抛出异常  4、自定义异常:extends Exception,要在程序中主动抛出异常对象throw e

有throw就要有catch

public static void main() {
        try {
            throw new ArithmeticException();
        }
        catch(ArithmeticException e) {
            System.out.println(e);
        }
    }

重新抛出:将异常沿着调用方法传递,有调用的方法进行处理

public class ExceptionTest {
    public static void main(String args[]) {
        ExceptionTest a= new ExceptionTest();
        a.getAnswer();
    }
    public int calcAnswer(int x,int y) throws NumberRangeException {      //throws Exception 在方法头部定义中,throw e在方法体中
if(judgement(x)&&judgement(y)) { NumberRangeException e= new NumberRangeException("Number out of Range"); throw e; } return x+y; } public boolean judgement(int i){ if(i<20 && i>10) {return true;} else {return false;} } public void getAnswer() { try { int ans=calcAnswer(5,65); System.out.println(ans); } catch(NumberRangeException e){
                                          //由调用的方法处理异常 System.out.println(e.toString()); } } } class NumberRangeException extends Exception{ /** * 自定义错误:NumberRangeException */ private static final long serialVersionUID = 1L; public NumberRangeException(String msg) { super(msg); } }

 

上一篇:JavaScript Error对象整理_JavaScript 异常处理整理


下一篇:深入理解java动态代理的实现机制