java异常处理

java异常处理

软件程序在运行过程中,可能出现意外(Exception),运行中不期而至的问题。

  • 检查性异常:用户错误或问题引起的异常,程序员无法预见的
  • 运行时异常:可能被程序员避免的异常,可以在编译时被忽略
  • 错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如栈溢出

java把异常当做对象来处理,基于java.lang.Throwable

api定义了许多异常类,主要分为错误(Error)和异常(Exception)两类

部分如下图:

error类对象由java虚拟机生成抛出,大多数与执行者无关

例如:

  • OutOfMemoryError:虚拟机运行错误
  • NoClassDefFoundError:类定义错误
  • LinkageError:链接错误

异常:

运行时异常:

这些异常一般是程序逻辑错误引起的,和程序员有关

区别:

  • Error是灾难性的致命错误,程序无法控制,一般java虚拟机(jvm)会选择终止线程
  • Exception通常情况是可以被程序处理的

异常处理机制

五个关键词:

try,catch,finally,throw,throws

int a = 1;
int b = 0;
//捕获多个异常从小到大
try {//监控区域
    System.out.println(a/b);
}catch (ArithmeticException e){//如果出现ArithmeticException错误
    System.out.println("程序出现错误");
    //打印错误跟踪
    System.out.println(e.fillInStackTrace());
    System.exit(0);
}catch (Exception e){
    System.out.println("程序出现错误11");
    System.out.println(e.fillInStackTrace());
        }finally {
    //不论是否出现错误都执行
    System.out.println("finally");
}
/*程序出现错误
java.lang.ArithmeticException: / by zero
finally

选中代码块快捷键ctrl+alt+t(surround with)

int a = 1;
    int b = 0;
    if(b==0){
        throw  new ArithmeticException();//主动抛出异常
    }
}
/*out :Exception in thread "main" java.lang.ArithmeticException
*/
//方法抛出异常
 int a = 1;
 int b = 0;
 isZero(b);
    //假设这个方法处理不了异常,向上抛出异常
public static void isZero(int b) throws ArithmeticException{
        if(b==0){
            throw  new ArithmeticException();
        }
    System.out.println("aa");
    }
/* out:Exception in thread "main" java.lang.ArithmeticException
	at com.xxx.Student.isZero(Student.java:12)
	at com.xxx.Student.main(Student.java:7)

自定义异常

继承Exception

public class MyException extends  Exception{
    //传递数字大于10
    private  int detail;

    public MyException(int detail) {
        this.detail = detail;
    }
    //打印异常信息
    @Override
    public String toString() {
        return "MyException{" +
                "detail=" + detail +
                '}';
    }
}
//b=11
public static void isZero(int b) throws MyException {
        if(b>10){
            throw  new MyException(b);
        }
    }

//out:MyException{detail=11}

热门相关:最强狂兵   梦回大明春      梦回大明春   法医娇宠,扑倒傲娇王爷