Java异常

什么是异常

异常是程序中导致程序中断运行的一种指令流。

如图所示
如图所示,由红色提示:Exception in thread "main"表示异常发生main线程中,且是因为“by zero”。发生的异常类名为ArithmeticException,就是算术上的异常/错误。控制台Console同时提示我们错误的行数在哪个类的哪个方法的第几行,如这幅图是Exception类的main方法的第九行,这样方便我们找bug

异常的形成过程(大概了解就行)

在这里插入图片描述
至1995年到现在的Java已经积累了很多的异常,如果程序员没有对异常进行try-catch或者throws的处理,系统就会中断整个程序,出现上图的红色的提示。异常是在执行某个函数时引发的,而函数是层级调用,形成了调用栈。如果其中某个函数出了问题,这个发生问题的地方叫做“异常抛出点”,以至于所有调用了这个函数的caller都会相继被异常影响,并输出异常信息,形成异常追踪栈。

引用lulipro博主的一张图片,这种调用回溯的行为叫做异常的冒泡,是为了寻找发生异常时最近的异常处理程序。如第一张图片没有异常处理的程序,最后异常由main抛给了JRE,将程序中断[1]。

异常的分类

异常种类很多,常见的ArithmeticExecption(算术异常)、NullPointerException(空指针异常)、ArrayIndexOutOfBoundsException(数组下标越界)、FileNotFoundException(文件未找到)、ClassCastException(类型强制转换)[2]等。具体的可以打开API帮助文档。

在这里插入图片描述
Throwable 是所有错误和异常类的父类。Error是无法用代码进行处理的,我们只能尽量避免**。Exception是程序中的一般错误,是可以用代码进行解决的。**

Exception分为RuntimeException和其他的,即运行时异常和非运行时异常,运行时异常又被称为非受检异常,就如我们第一张图显示的,只有在运行的时候被中断才知道有错误;反之,非运行时异常在Eclipse和Idea等编译器中出现时都会有提示。

处理异常

try-catch

一般类型

关注里面的注释噢~

try{
	//可能存在异常的代码行
	...
	...
}catch(异常类型 实例名e){
	//catch后括号例如:catch(IOException e)
	//符合以上异常类型会被catch即捕获到要进行的操作
  	...
}finally{
	//必然执行的异常统一处理出口  即不管有无异常,都需要被执行的代码
	...
}
try{
	//可能存在异常的代码行
	...
	...
}catch(异常类型 | 另一异常类型 实例e){
	//catch后括号例如:catch(IOException e) 或者 catch((ArithmeticException | NullPointerException e)
	//符合以上异常类型会被catch即捕获到要进行的操作
  	...
}finally{
	...
}
try{
	//可能存在异常的代码行
	...
	...
}catch(异常类型 实例e){
	//catch后括号例如:catch(IOException e) 
	//符合以上异常类型会被catch即捕获到要进行的操作
  	...
}catch(异常类型 实例e){
	...
}catch(异常类型 实例e){
	...
}finally{
	...
}

throws

public void setAge(int age) throws IOException{
	if(age < 0 || age > 130){
		System.out.println("年龄值不符");
	}
}

什么时候使用try-catch,什么时候使用throws

一般由于传入的参数不对引起的异常用throws,throws是抛出给调用该方法的函数,由它进行异常处理。

自定义异常类型

public class AgeException extends RuntimeException{
    public AgeException(String message) {
        super(message);
    }
}

欢迎一起交流学习鸭!

[1]https://www.cnblogs.com/lulipro/p/7504267.html
[2]https://blog.csdn.net/it666dhw/article/details/80505889

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值