JAVA中的异常:异常的分类+异常的处理

1. 异常的分类

Throwable类(表示可抛)是所有异常和错误的超类,两个直接子类为Error和Exception分别表示错误和异常

其中异常类Exception又分为运行时异常和非运行时异常,这两个异常有很大区别,运行时异常也叫非受检异常,非运行时异常也叫受检异常
在这里插入图片描述

1.1 Error

Error是程序无法处理的错误,它是由JVM产生和抛出的,比如OutoMemoryError、ThreadDeath等,这些异常发生时,一般会选择线程终止

1.2 Exception

Exception是程序本身可以处理的异常,对于这类异常,程序应当尽可能去处理

1.2.1 运行时异常

运行时异常都是RuntimeException类以及它的子类异常,比如NullPointerException(空指针)、ArrayIndexOutOfBoundsException(数组越界异常)等,这些异常也是不检查异常,程序可以选择处理,也可以选择不处理,这类异常一般由程序逻辑错误引起,程序应该从逻辑角度尽可能避免这类异常的发生

1.2.2 非运行时异常

非运行时异常都是除RuntimeException类以及它的子类异常之外的异常,这些类都属于Exception类,都是要接受检查的异常,比如IOException、SQLException,从程序语法角度看这类异常是必须要进行处理的异常,如果不处理,程序就不能编译通过

2.异常的处理

  • try catch处理方式

    如果try代码块中的代码运行出现错误,那么catch代码块中的代码执行,但不影响后面代码运行

  • throws处理方式

    向外抛出异常,让之后一个接收到该异常的方法去处理

2.1 try catch用法

package 异常;
/*
 * 使用try catch
 * 
 * 
 * */
public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] arr = new int[5];
		try {
			for(int i = 0; i < 10; i++) {
				arr[i] = i;
			}
		}catch(Exception e) {  //这个位置可以利用多态,使用更大的类
			System.out.println("数组不赋值");
		}

		System.out.println("-----------------");		

	}

}
try{
	可能出现问题的代码
}catch(异常类型){
	当产生对应异常类型时,会执行catch中代码
}finally{
	无论如何都会执行的代码
}
  • try、catch、finally三个语句不能单独使用,可以组成try…catch,try…finally、try…catch…finally,其中catch可以有多个,finally最多有一个
  • try、catch、finally三个代码块中变量的作用域为代码内部,分别独立不能互相访问,如果在三个块中使用,需要把变量定义到这些块之外
  • 多个catch块,最多只会匹配其中一个异常类且只会执行该catch块代码,而不会在执行其他catch块代码,且匹配catch语句的顺序是从上到下,也可能所有的catch块都不执行
  • 先写catch子类异常,再写catch父类异常
  • finally语句是无论try中有没有发生异常,都会执行的语句块,一般finally是程序提供的一个统一的出口,保证程序转到其他部分继续执行,finally通常做一些清除工作,如关闭文件,关闭资源等

2.2 throws和throw的区别

  • throws用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传递,谁调用找谁处理

    • 用在方法声明后面,跟的是异常类名
    • 可以跟多个异常类名,用逗号隔开
    • 表示抛出异常,由该方法的调用者处理
    • throws表示出现异常的一种可能性,并不一定会发生这些异常
  • throws用来抛出一个具体的异常对象

    • 用在方法体内,跟的是异常对象
    • 只能抛出一个异常对象
    • 表示抛出异常,由方法内的语句处理
    • throws抛出异常的一定有的异常,所以需要必须处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值