异常机制(Exception)
定义
读取数据或者跑程序的时候出现一些意料之外的问题统称为异常。
分类
-
检查性异常
如 用户输入非法字符,打开不存在的文件等
-
运行时异常
在编译时会被忽略
-
错误
如栈溢出等
异常体系结构
将异常作为对象来处理
定义了一个基类 java.lang.Throwable作为所有异常的超类
Error
由虚拟机生成并抛出
当JVM不再有继续执行操作所需的内存资源时,会出现“OutOfMemoryError”。
Exception

处理机制
五个关键字
try catch finally throw throws
用法介绍:
try{
//需要监控的内容
System.out.println(a/b);
}catch(Error e){
//捕获异常
#根据catch的前后顺序不同,括号内异常范围也不同。
System.out.println("程序出现异常,变量b不能为0);
}catch(Exception a)
//...
}catch(Throwable t){
//...
}finally{
//可以省略,假设写到io等需要关闭的资源,可以采用finally进行善后。
//无论如何finally都会执行
System.out.println("finally);
}
走到catch以后不会在输出区域报错,后面的方法体还会继续执行。
所以try catch的应用场景为:错误在意料之中,可处理
多层catch需要由小到大,层层推进。
可以利用ctrl+alt+t一键生成
try{
System.out.println(a/b);
}catch(Error e){
e.printStackTrace();//打印错误的栈信息
}finally{
}
关于throw:
用于抛出异常
try{
if(b==0){
//此处为主动抛出异常,注意为throw,并非throws
throw new ArithmeticException();
}
}//...
抛出异常往往在类的成员方法中使用
当编写程序时,早已知道这个行为或输入有可能导致异常,且在后续方法体中无法处理,就可以使用条件语句来主动地throw,即抛出这个异常,此时后续的方法体不会被执行。
关于throws:
#放在方法的参数后面
public void test(int a,int b) throws ArithmaticException{
if(b==0){
//此处为主动抛出异常,注意为throw,并非throws
throw new ArithmeticException();
}
自定义异常
java内置的异常类包括了编程时出现的大部分异常
当编写程序时,有自己觉得是异常的东西,也可以自定义异常。
继承于Exception类即可
public class diyException extends Exception{
//想要判断是否为异常的参数
private int detail;
//构造方法
public diyException(int a){
//赋值,记录传进来的值
this.detail=a;
}
//重写toString方法,以便打印
@Override
public String toString(){
return "diyException{"+"detail="+detail+'}';
}
}
在自定义的类中选择接收的参数,并根据参数写对应的构造方法。
重点:接着重写toString方法,将错误信息返回。
//对于可能存在异常的方法,抛出自定义异常
public static void test (int a) throws diyException{
//...
if(a<0){
throw new ditException(a);
}
//...
}
此函数需要放在try...catch结构中进行捕获异常
try{
text(1);
}catch(diyException e){
sout("diyException:"+e);//此处打印时,java会自动调用自定义异常类的toString方法
}
浙公网安备 33010602011771号