指程序运行中出现的不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等
检查型异常
运行时异常
由程序逻辑错误引起,应从逻辑角度尽可能避免这类异常发生
错误ERROR
Error类对象由java虚拟机生成并抛出
ERROR通常是致命的错误,是程序无法控制和处理的,发生时JVM会终止线程,而Exception通常是可以被程序处理的,并在程序中应尽可能去处理这些异常
常用关键字:try 、catch、finally、throw、throws
异常对象的两个方法
Exception e=new Exception(); String msg=e.gewMessage(); //获取异常简单描述信息,调用异常对象的toString方法? e.printStackTrace(); //打印追踪堆栈的信息
? 在方法声明位置上使用throws关键字,抛给上一级(谁调用抛给谁)
但是只能抛出相应的异常或其父类异常(抛的异常可以更大不能更小)
? 一般main方法采用捕捉,否则异常会抛给JVM,JVM会终止程序
public static void main(String[] args) {
int a=10,b=0;
int c;
try {//try监控区域,尝试一些可能有异常的程序
c = a/b;
}catch (ArithmeticException e){//捕获异常
System.out.println("发生异常,被除数不能为0");
} finally{//善后工作
System.out.println("结束");
}
}
try不能单独使用
catch后面是想要捕获的异常类型
建议在catch的代码块里打印异常追踪的堆栈信息(此信息由上往下看,忽略Sun的代码)
可以捕获多个异常,使用多个catch
注意catch的异常上面的必须小于下面的异常范围,从小到大捕获
finally最后一定会执行
无论是否出现异常,finally中的代码一定会执行,除非在try中执行System.exit(0);程序,通常在其中完成资源的释放、关闭
public static int m(){ int i=100; try{ return i; }finally{ i++; } }
finally中的i++;一定执行,且由于return;后方法结束,所以会在return之前执行,但是这里返回值是100,不是101!!因为要遵循java语法规则,由上至下执行,return在i=100;后面,所以返回100!!
这里反编译后发现实际执行:
int i=100; int j=i; i++; return j;//100!!!!
快捷键:Ctrl + Alt + T
public class MyException extends Exception{
private String detail;
public MyException(){}
public MyException(String s){
super(s);
}
}
配合throw(没有s!!!!)使用
throw new MyException("这里发生了***异常");
//抛出后其方法体自动结束
原文:https://www.cnblogs.com/yangzx-hust/p/15087511.html