Java异常简介------Exception And Err等

标题# Java异常简介------Exception And Err等之处理机制

Java异常的概念:

没有按照原定的计划进行,发生了特殊状况,异常机制提供了程序退出的安全通道,当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器.

异常的分类:

在这里插入图片描述

上图简单的展示了一下异常的结构图,但不是所有的异常,具体的可以查看api文档,还可以自定义异常

Throwable:是Java中所有错误或异常的超类,有两个重要的子类:Error(错误)和Exception(异常)

Error(错误):表示Java中的错误,一般是运行环境(jar包,依赖)等出了问题,是程序无法处理的错误,大多数与代码编写者的执行操作无关.在这里插入图片描述

Exception(异常):是Throwable的一种形式,它指出了合理的应用程序想要捕获的条件,是程序本身可以处理的异常.
Exception分为两大类:运行时异常和非运行时异常(编译异常)
1.运行时异常:RuntimeException类及其子类异常,这些异常时不检查异常,程序可以选择捕获,也可以选择不处理,一般是由程序逻辑错误引起的,常见的运行时异常有:

NullPointerException:当应用程序试图在需要对象的地方使用 null 时,抛出该异常
IndexOutOfBoundsException:下标越界异常,指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出
ClassNotFoundException:类找不到异常

2.非运行时异常(编译异常):是RuntimeException以外的异常,类型都是Exception类及其子类,对于非运行时异常,Java编辑器强制要求,我们必须对这些异常进行处理,否则程序不能编译通过,常见的有:

IOException:io异常
SQLException:MySQL数据库引起的异常

以上异常知识简单的举例了几个,仅供参考,具体情况,请在代码中具体分析

异常的处理机制

1.使用throw关键字抛出异常

throw new 异常信息:(手动制造一个异常)

当需要指定运行异常时,可以在发生异常的时候,使用throw new RuntimeException(msg)
注:msg自定义的异常信息

学到就要用到,来上实例:

public class ThrowException {
	public static void main(String[] args) {
		Scanner key = new Scanner(System.in);
		System.out.println("请输入年龄");
		int age = key.nextInt();
		if(age<=0){
			throw new RuntimeException("你还没出生,赶紧回去别捉妖");
		}
		System.out.println(age);
		key.close();
		
	}
}

在这里插入图片描述

2.使用throws关键字抛出异常

使用throws关键字抛出异常:
在方法或类的后面加上throws XXXException(代表对应发生的异常)
throws:抛出得意思,表示将异常抛给上级(调用者)处理
如果是加在main方法得后面,表示交给Java虚拟机去处理异常

public class IODemo01 {
	public static void main(String[] args) throws IOException {
		File file = new File("D:\\我很帅.txt");
		file.createNewFile();
	}
}

在这里插入图片描述

现在报错提示我们有异常,要么抛出,要么捕获,我们这里选择throws抛出,也就是对应的第一个选项Add throws declaration

3.捕捉处理异常:try…catch代码块

表示:当try中的语句发生异常时,会先到第一个catch中来查找是否发生了第一个异常,如果不是第一个就继续往下找,看是否是异常2,当处理完之后直接结束try…catch语句

格式1为:

try{

​ 被捕捉的代码

}catch(异常类型 e){

​ 对异常的处理

}

格式2为:

try{

语句1;

语句2;

}catch(异常类型1 e){

对异常的处理1

}catch(异常类型2 e){

对异常的处理2

}catch(异常类型3 e){

对异常的处理3

}

注意:当一个异常同时可以被多个catch捕获时,会采用就近原则,会选择与这个异常最相近的catch去执行

当多个catch语句中的异常时父子关系时,应将子异常写在前面。父异常写在后面
即:范围小的异常写在前面,范围大的异常写在后面

这里还拿刚才的例子来简单的说明:

public class IODemo01 {
	public static void main(String[] args){
		File file = new File("D:\\我很帅.txt");
		try {
			file.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

在这里插入图片描述

现在咱们选择第二个Surround with try/catch

3.1 finally代码块

**finally:**无论异常是否发生都会执行的代码块(根据需要,不是必须)

来看格式:

try{

语句1;

语句2;

}catch(Exception e){

对异常的处理

}finally{

最后一定会执行的代码;

比如我们使用完某个资源为了防止浪费,最后一定要关闭,操作中途可能有异常导致程序中断,但
是并不影响资源的关闭

}

来看代码,咱们故意写一个异常来看效果:

public class ExceptionDemo06 {
	public static void main(String[] args) {
		try {
			System.out.println("打开连接池");
            //在数学里面0不可以做为被除数的,所以这里会报异常:java.lang.ArithmeticException
			int a = 2/0;
			System.out.println("pilipal");
			System.out.println("劈里啪啦工作中");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.out.println("关闭连接池");
		}

在这里插入图片描述

好了,本期异常就说到这里了,如果对异常或者其他有不懂的地方,欢迎前来加我微信进行探讨

看完别忘记点赞哦
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值