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}
热门相关:最强狂兵 梦回大明春 朕 梦回大明春 法医娇宠,扑倒傲娇王爷