异常

异常

异常的介绍

java语言中,在程序执行中发生不正常的情况称为 “异常”。(注意开发中语法错误和逻辑错误不是异常)

在执行过程中所发生的异常事件可分为两大类:

  1. Error(错误):java虚拟机无法解决的严重问题。如:jvm的系统内部错误,资源耗尽等严重错误。
    比如:StackOverflowError(栈溢出)和OOM (out of memory),Error是严重的错误,程序会崩溃。
  2. Exception:其他因编程错误或者偶然的外在因素导致的一般性问题,可以针对性的对代码进行处理。
    比如:空指针异常,试图读取不存在的文件,网络连接中断等。
    Exception分为两大类:运行时异常(程序运行时,发生的异常)和编译时异常(编程时,编译检查出来的错误)。

异常的类图:
在这里插入图片描述

常见的运行异常
名称描述
NullPointerException空指针异常。当应用程序试图在需要对象的地方使用Null时,抛出异常。
ArithmeticException数学运算异常。当出现异常的运算条件时,抛出异常。
ArrayIndexOutOfBoundsExpetion数组下标越界异常。
ClassCastException当试图将对象强制转换为不是实例子类时,抛出异常。
NumberFormatException数字格式不正确异常。 当应用程序将字符串转换成一种数值类型,但字符串不能转换成适当格式,抛出该异常。
常见的编译异常

编译异常是指在编译期间,就必须处理的异常,否则代码不能通过编译。

名称描述
SQLException操作数据库时,查询表可能发生的异常
IOException操作文件时,发生的异常
FileNotFoundException当操作一个不存在的文件时,发生异常
ClassNotFoundException加载类,而类不存在时,发生异常
EOF Exception操作文件,已经到达文件末尾,发生异常
IllegalArrguementException非法参数异常
异常的处理
1. try - catch方式处理

1)java 提供了try和catch块来处理异常。try块用于包含可能出错的代码。catch块用于处理try块中的异常。可以根据需要在程序中用多个数量的 try …catch块。
idea的快捷键是: ctrl + alt + t

2)基本语法

	try{
		//可疑的代码
		//将异常生成对应的异常对象,传递给catch块

	}catch(异常){
	//异常处理
	}finally{
		//无论怎样 都会执行。
		//多用于资源的关闭。
	}
	//如果没有finally也是可以的。

			

1)如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块中。
2) 如果异常没有发生,则顺序执行try的代码块,不会进入到catch
3)如果希望不管是否发生异常,都执行某段代码块则就把代码写在finally中

例如:

public class try_catch {
    public static void main(String[] args) {
        int i =1;
        int j =0;
        try {
            int result = i/j;
        } catch (Exception e) {
            e.printStackTrace();
        
        }finally {
        	//都会执行的代码
            System.out.println("slslsllsls");
        }
    }
}

try -catch -finally 的注意事项:

  1. 如果没有出现异常,则执行try块中的所有语句,不执行catch块中的语句,如果有finally,最后还需要执行finally里面的语句。
  2. 如果出现异常,则try块中异常发生后,try块剩下的语句不在执行。将执行catch块中语句,如果有finally,最后还需要执行finally里面的语句。
2. throws方式处理
  1. 对于编译异常,程序必须处理,比如try-catch 或者 throws
  2. 对于运行时的异常,程序中如果没有处理,默认就是throws方法处理。
  3. 子类重写父类方法,对抛出的异常的规定:子类重写方法,所抛出的异常类型要么和父类抛出一致,要么为父类抛出异常类型的子类型。
  4. 在throws过程中,如果有try - catch方法,就相当于处理异常,就可不必在throws。
  5. 如果在一个方法调用另一个方法抛出编译异常的方法,那么调用的方法必须处理被调用方法的编译异常,或者继续向上抛出。
f1()throws FileNotFoundException{//要么处理,要么继续抛出。
	f2();//为编译异常,必须处理,要么继续抛出
}
f2() throws FileNotFoundException{//抛出编译异常
}

自定义异常:

使用条件:

当程序中出现了某些“错误”,但该错误信息并没有被在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述错误信息。

public class CoustomException {
    public static void main(String[] args) {
        int age = 800;
        if (!(age>=80&&age<=120)){
           throw  new AgeExcption("那么大!");
        }
    }
}
class AgeExcption extends RuntimeException{
    public AgeExcption(String message){
        super(message);
    }


}

在这里插入图片描述

throw 和 throws的区别:

意义位置后面跟的东西
throws异常处理的一种方式方法声明处异常的类型
throw手动生成异常对象的关键字方法体中异常的对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值