异常机制(Exception)

定义

读取数据或者跑程序的时候出现一些意料之外的问题统称为异常。

分类

  1. 检查性异常

    如 用户输入非法字符,打开不存在的文件等

  2. 运行时异常

    在编译时会被忽略

  3. 错误

​ 如栈溢出等

异常体系结构

将异常作为对象来处理

定义了一个基类 java.lang.Throwable作为所有异常的超类

Error

由虚拟机生成并抛出

当JVM不再有继续执行操作所需的内存资源时,会出现“OutOfMemoryError”。

Exception

屏幕截图 2025-10-18 201714

处理机制

五个关键字

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方法
}
Posted on 2025-10-20 16:32  miloandmicah  阅读(10)  评论(0)    收藏  举报