认识异常机制(Exception)+自定义异常

本文详细介绍了Java中的异常处理机制,包括异常的分类(检查性异常、运行时异常和错误)、异常的捕获与抛出,以及try-catch-finally关键字的使用。强调了异常处理的重要性,建议在编程时合理规避异常,及时释放资源,并提供了自定义异常的步骤。同时,文章提醒开发者在处理异常时要避免简单打印,而是积极处理,确保程序的健壮性。
摘要由CSDN通过智能技术生成

异常机制

异常:就是不符合实际需求,在实际中可能不存在也可能不满足实际,所以出现的问题称之为异常。
异常的三种类型:

  • 检查性异常
    用户错误或问题引起的异常,是程序员无法预见的。例如打开一个不存在的文件,就会发生一个检查性异常。
  • 运行时异常
    是可能被程序员避免的异常,与检查性异常相反,运行时异常可以在编译是被忽略。
  • 错误(ERROR)
    错误不是异常!错误是脱离了程序员的问题。一般不是程序员的问题。

异常体系结构

Java当中,万物皆对象,Java将异常当作对象来处理,定义了一个基类(父类),java.lang.Throwable作为异常的超类。
java中的异常分为两大类:错误(Error)和异常(Exception)。
错误:
Error是由Java虚拟机产生并抛出的,大多数的错误与程序员是没有关系的。
多数情况是Java虚拟机运行错误(Virtual MachineError),Java虚拟机将会终止线程。
这些错误是不可查的,因为在程序的控制能力之外。
异常:
在异常(Exception)分支中有一个重要的子类RuntimeException(运行时异常);

  • ArrayIndexOutofBoundsException(数组下标越界异常)
  • ClassNotFoundException(找不到类异常)
    等异常是不检查异常,程序可以选择捕获处理,也可以不处理。
    这些异常通常是因为程序逻辑错误引起的,程序应该从逻辑角度尽可能的避免异常的发生。
    错误(Error)与异常(Exception)的区别:
    Error通常是灾难性致命的错误,是程序无法控制和处理的,当出现这些异常时,Java虚拟机(JVM)会选择终止线程;Exception通常情况时可以被程序处理的,并且在程序中,尽可能的去处理和发现这些异常,这些异常通常是程序员的逻辑出现的问题。异常当中,RuntimeException(运行时异常),除此之外的异常统称为非运行时异常。注意的是错误就是错误,异常可以分为运行时异常和非运行时异常。

异常的捕获与抛出

  • 抛出异常
  • 捕获异常
    异常处理的5个关键字
  • try(尝试着去处理,试一试的意思)、catch(捕获)、finally(是否执行都会走到这个语句当中)、throw(抛出异常)、throws(抛出异常)。
    捕获并抛出异常:
    举例:数组下标越界异常处理:
    数组下标越界
    正如上图所示,并别有输出数组下标的元素,因为元素本身就不存在,产生异常,所以将异常进行捕获并进行了抛出。
    值得注意的是在普通异常当中,可以不使用finally,但是try与catch是必须要的,必不可少的,finally在IO流当中可以明显的发现它的作用。比如说在Scanner当中,需要关闭用户输入(scanner.close()),那么finally就起到了很重要的作用。
    值得注意的是异常的基类,Throwable是所有异常的父类,如下图所示:
    异常的父类
    catch (Error e)中,括号里面的Error为想要捕获的异常类型,e为一个变量。
    在Java当中可以捕获多个异常,Java中进行了提供,如下图所示(当程序中可能出现多个异常时):
    下图中我们可以得到结果,该程序是一个异常,而不是一个错误!
    数组下标越界
    下面的代码就好像一个循环,如果程序中可能将会出现多个异常,那么就可以在下面的语句中实现,切记的是异常基类可以放在最后。
try{
}catch(){
	System.out.println();
	}catch(){
	System.out.println();
	}finally{
}

下图中是捕获多个异常,但是将异常的基类放在了第一个,导致程序报错,所以后面的捕获失去了意义导致报错。所以异常的基类应该放在最后!
异常的基类
注意:我们可以看到上图中出现报错,是因为异常的捕获需要从小到大,但是第一个直接就放了一个最大的基类,所以出现报错。如果说需要捕获多个异常,那么需要从小到大类捕获。
try-catch快捷键的使用:选中需要try的部分:ctrl+alt+T,如下图所示:
快捷键的使用
打印错误信息
假如说程序出现异常,我们可以让程序运行结束或者说是退出:
异常时退出程序上面的括号中的数字,任意即可,表示程序异常时退出程序!
在异常当中,我们可以主动的去判断是否有异常,然后再进行抛出异常。如下图(主动抛出异常):
主动抛出异常
异常的主动抛出一般在方法当中使用!如下图所示:
在这里插入图片描述
如果我们知道会有异常,上面的方法又处理不掉异常,那么可以在方法上抛出异常。如下图所示:
注意:在方法中抛出异常使用throw,但是在方法上使用throws!
在方法上抛出异常
在方法体中没有解决掉异常的抛出,在方法上抛出异常,抛出异常后如果不使用try-catch,那么程序就不会继续执行。使用try-catch后,程序仍然会继续执行。
使用try-catch时:
使用try cath
不使用try-catch时:
错误示范

自定义异常

使用Java内置的异常类可以描述在编程时出现的大部分异常,但是,用户还可以自定义异常。用户自定义异常类,只需要继承Exception。
自定义异常步骤如下:

  • 创建自定义的异常类;
  • 在方法当中通过throw关键字抛出异常对象;
  • 如果在当前抛出异常的方法当中处理异常,可以使用try-catch语句捕获并进行处理;否则在方法的声明语句当中通过throws关键字指明抛出给方法调用者的异常,继续执行下一步操作;
  • 在出现异常方法的调用者中捕获并处理异常。
    自定义异常类的书写,在书写的过程当中,或许我们只知道需要继承Exception,但是当继承之后无法入手,我们可以通过看一下异常处理的一些方法,如下图所示:
    第一步:
    1
    第二步:传入一个符合程序,不会抛出异常的值;
    在这里插入图片描述
    第三步:打印一个不符合程序设定的值,抛出异常;
    异常值设定
    总图:
    1.抛出异常的图:
    总图1
    2.没有抛出异常的图:
    总图2
    写在最后:
  • 运行时处理异常,采用逻辑合理规避,使用try-catch处理;
  • 尽可能的使用finally语句块去释放占用的资源;
  • 异常需要尽可能的去处理,不要简单的打印输出;
  • 对于潜在的异常,可以使用try-catch处理潜在的异常,还有不确定的代码可以使用try-catch进行规避;
  • 具体的如何去处理异常,根据不同的业务需求和异常情况去进行合理的异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值