java异常知识点详细整理

异常

1.含义

异常是程序在运行期发生的不正常的事件,它会打断指令的正常执行流程。

设计良好的程序应该在异常发生时提供处理这些不正常事件的方法,使程序不会因为异常的发生而阻断或产生不可预见的结果。

Java语言使用异常处理机制为程序提供了异常处理的能力

2.异常的分类

Java程序运行过程中所发生的异常事件从严重性可分为两类:

  1. 错误(Error):JVM系统内部错误或资源耗尽等严重情况属于JVM需要负担的责任这一类异常事件无法恢复或不可能捕获,将导致应用程序中断。

  2. 异常(Exception):其它因编程错误或偶然的外在因素导致的一般性问题。这类异常得到恰当的处理时,程序有机会恢复至正常运行状况。

​ 2.1 RunntimeException-运行时异常:也叫做非受检性异常,那些程序员在编写程序的 时,应该避免的异常(逻辑异常)
​ 数组越界异常 - ArrayIndexOutOfBoundsException
​ 类型转换异常 - ClassCastException
​ 空指针异常 - NullPointerException
​ 算数异常 - ArithmeticException
2.2 一般性异常:也叫做受检性异常,编译器要求必须处置的异常。指的是程序在运行时由于外界因素造成的一般性异常。文件未找到异常 - FileNotFoundException

3.异常处理机制

  1. Java程序在执行过程中如果出现异常,会自动生成一个异常类对象,该异常对象将被自动提交给JVM,这个过程称为抛出(throw)异常
  2. 当JVM接收到异常对象时,会寻找能处理这异常的代码
  3. 找到了,把当前异常对象交给其处理,这一过程称为捕获(catch)异常和处理异常。
  4. 没找到,如果JVM找不到可以捕获异常的代码,则运行时系统将终止,相应的Java程序也将退出。

4.异常处理的方式

4.1 处理方式1 - try catch

含义:主动处理异常

语法:

​ try{

​ 存放可以出现异常的代码

​ }catch(异常类型 e){ 捕获异常

​ 处理异常

​ }finally{

​ 不管是否出现异常,都会执行该代码块

​ }

注意:

  1. try 代码段包含的是可能产生异常的代码

  2. try 代码段后跟一个或多个catch代码段。(或跟一个finally代码段)

  3. JDK新特性,一个catch代码可以可以声明多个能处理的特定异常的类型,多个类型之间用”|”隔开

    例如:catch( ExceptionName1 | ExceptionName2 e){

    ​ … //异常的处理代码

    ​ }

  4. 当异常发生时,程序会中止当前的流程去执行相应的catch代码段。

  5. 写catch代码时,先捕获的异常的范围不能大于后捕获的异常的范围。大的异常要写在后面finally段的代码无论是否发生异常都执行。

4.2 处理方式2 - throws

含义:抛出异常

public class Test04 {
	public static void main(String[] args) {
		try {
			method01();
		} catch (FileNotFoundException e) {
			System.out.println("处理异常");
		}
	}
	public static void method01() throws FileNotFoundException{
		method02();
	}
	public static void method02() throws FileNotFoundException{
		method03();
	}
	public static void method03() throws FileNotFoundException{
		method04();
	}
	//抛出异常,在调用方处理
	public static void method04() throws FileNotFoundException{
		File file = new File("xxx1.txt");
		FileInputStream fis = new FileInputStream(file);
	}
}
4.3 处理方式3 - throw

throw经常和自定义异常一起使用

public class Test05 {
	
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		
		//throw 抛出异常
		
		Scanner scan = new Scanner(System.in);
		
		int a = scan.nextInt();
		int b = scan.nextInt();
		
		try{
			if(b == 0){
				throw new MyException();//生成异常对象,将其抛出给JVM
			}
		}catch (MyException e) {
			b = 1;
		}
		
		System.out.println(a/b);
		scan.close();
		
	}
}
class MyException extends Exception{

	private static final long serialVersionUID = -5575465536117397751L;
	
	@Override
	public String toString() {
		return "除数不能为0的异常";
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值