Java异常处理

Java异常处理

异常是程序中的一些错误,但并不是所有的错误都是异常,有时候错误是可以避免的。
比如说,如果你的代码少了一个;那么会报错java.lang.Error,但是如果你写了System.out.println(11/0);那么你的程序就会爆出java.lang.ArithmeticException的异常
异常的发生有很多可能,最常见的是以下几种
用户输入了非法数据
要打开的文件不存在
网络通信时连接中断
JVM内存溢出
这些异常有些是因为用户错误引起的,有些是因为程序错误引起的,有些是因为物理错误引起的
要掌握Java异常,你必须掌握如下三种异常
检查性异常:最具代表性的检查性异常是用户错误引起的异常,这些异常对于程序员是不可见的,但编译程序的时候必须想到这些情况,比如用户打开了一个不存在的文件,就有检查性异常发生
运行时异常运行时异常是程序员犯的错误,与检查性异常相反,运行时异常是可以被避免的
错误:错误不是异常,异常是程序员可以掌控的,错误是程序员不能掌控的。当栈溢出的时候,一个错误就发生了,逻辑错误就连编译也检查不出来。

Exception类的层次

所有的异常类都是从java.lang.Exception类中继承的子类
异常Exception类是Throwable类的子类,除了Exception类以外,Throwable类还有另一个子类:Error类
错误在Java程序处理地 范畴之外
Error用来指运行环境发生的错误
程序很难从错误中恢复。
异常类有两个子类:IOException类和RuntimeException类
在这里插入图片描述
在Java内置类中,有大分常用的的检查性和运行时异常

Java内置异常类

Java定义了一些异常类在java.lang包中
标准运行时异常都在java.lang标准包里面,由于java.lang包每个程序默认导入,所以运行时异常和他的子类都可以直接用
下表是一些Java中的非检查性异常:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

捕获异常

使用try和catch关键字可以捕获异常,
try和catch代码块放在异常可能发生的地方
try/catch模块中的代码被称为保护代码
语法如下:

try{
	//程序代码
}
catch(ExceptionName e1){
	//catch模块
}

catch模块中有异常类型的声明,如果程序代码中产生一个异常,那么后面的catch模块就会被检查,看是否符合catch中异常的定义,如果符合,就会把异常传给对应的catch,这和函数传参是一个道理。

实例

import java.util.*;
public class Main{
	public static void main(String[] args) {
		int [] a=new int[2];
		try {
			System.out.println(a[2]);
		}
		catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("这个参数是:"+e);
		}
		System.out.println("现在不是try模块啦");
	}
}

在这里插入图片描述

多重捕获

一个try代码块后面跟多个catch函数的情况就叫多重捕获:
多重捕获的代码如下:

try{
	//收到保护的代码
}
catch(Exceptionname 异常变量名字){
}
catch(Exceptionname 异常变量名字){
}
catch(Exceptionname  异常变量名字){
}

上面的代码包含三个catch模块,可以在try模块添加任意多个catch模块,当保护代码中产生异常的时候,会从第一个catch模块开始找,找到匹配的catch参数,就会执行其中的代码。

finally关键字

finally代码块用来创建在try~catch模块后面执行的模块

无论是否发生异常,final代码块中的代码一定被执行。

在finally代码块中可以运行清理善后类型的语句。
finally代码块出现在catch代码块最后,语法如下:

try{
}
catch(ExceptionName 异常变量名){
}
catch(ExceptionName 异常变量名){
}
catch(ExceptionName 异常变量名){
}
finally{
	//和try中代码一样,必定会执行的代码
}

throw/throws关键字

throws关键字写在函数声明后面。
throw关键字写在函数内部
注意:throw抛出一个异常后,throw后面不能跟语句(就算跟了也不会执行)

finally代码块无论异常是否发生都会执行

声明自定义异常

在Java中你可以自定义异常,使用自定义异常的时候有以下需要注意:
1.所有的异常都必须是Throwable的子类
2.如果希望写一个检查性异常类,必须继承Exception
3.如果希望写一个运行时异常类,必须继承RuntimeException类
可以像下面这样定义自己的异常类

class MyException extends Exception{
	
}

只是继承Exception类的是检查性异常,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值