java异常机制的感受和总结

本文深入探讨了Java中的异常,包括异常的定义、异常的两大类别(Error和Exception)、运行时异常与其他异常的区别。详细介绍了如何使用try-catch进行异常处理以及throws关键字的使用。此外,还阐述了自定义异常的步骤,强调了在何时及为何需要创建自定义异常。通过对异常处理的全面解析,帮助读者更好地理解和应用Java异常处理机制。
摘要由CSDN通过智能技术生成

什么是异常?为什么要解决异常?异常的分类?如何抛出异常?如何捕获异常?如何自定义异常?等等一系列问题,我都将以我自己的主观理解,给大家一一解释(但同样由于个人水平有限,可能会出现一些错误,也欢迎指正,大家一起共同进步!)

目录

什么是异常(Exception)?

异常的分类

处理异常的方法

自定义异常


什么是异常(Exception)?

拿生活中的例子来说,别人说你今天有点异常,也就是说你今天之前的行为有点不太一样,这就是生活中的异常。放在java中,出现异常就是本来代码能正常执行能得到我想要的结果,而此时却没有正常执行并且终止了程序

最开始学习的时候,别人总说代码出现异常了,而我咋知道代码出现异常呢?最直观的来说,我从终端输出看到了异常信息,比如
1.首先我看出来了,这个程序出现异常了。
2.我看到出现异常的类型是:算数异常
2.还告诉了我异常的原因:除0异常
4.还告诉了我出现异常的位置:在第16行
5.第16行出现异常后,他让我后面的语句没有了结果,也就是中断了程序。 

嗷,原来这就是出现了异常,异常就是代码运行过程中发生了不正常的行为,最直观的感受就是在终端给我显示了这么多的信息

再看一下异常的原码,嗷,原来算数异常就是个类,它继承了运行时异常么

 总结:
1.异常的本质是个java类
2.异常就是代码运行过程中发生了不正常的行为,最直观的感受就是在终端给我显示信息。

上面说了算数异常,它还继承了运行时异常,你能不能说一下异常的分类?

异常的分类

先来说说大体框架,有两大类,一个是Error(错误),一个是Exception(异常),都继承了Throwable类,接下来Excetion分为了RuntimeException类和其他异常类。我还是主要说异常这边,因为Error这种问题,程序员无法通过代码来进行处理,只有Exception程序员可以通过代码处理。

运行时异常:也叫作非受检查异常(Unchecked Exception),简单来说就是.class文件在jvm上运行时出现的异常,这种错误可以交给jvm去处理,也可以自己处理。交给jvm处理,就是我第一个例子那样,程序中断提示你出现异常啦!!!(异常前的代码依旧可以运行)

其他异常:编译时异常,也称为受检查异常(Checked Exception),它就是在.java文件编译生成.class文件时出现的异常,该异常必须要处理的!此时还没到jvm中,因此jvm无法处理嗷,需要我们主动去处理滴!!!(异常前的也没法运行,因为编译不通过)

我在分享一下常见的运行时异常代码:

总结:异常主要分为运行时异常和其他异常(编译时异常),运行时异常可以不解决,最终就得jvm解决,其他异常如果不解决就无法通过编译,因此该类异常必须处理(最直观就是idea中一直有红色横线报错)

处理异常的方法

有两个方法:
1.利用try{}catch(){}进行异常的处理
2.throws,我不处理异常,让调用该方法的人去处理,处理方式也就是try{} catch(){},throws也就是警告别人,调用该方法可能会出现异常,让调用者自己去处理。

try{}catch(){}使用方法:

1.try{}代码块中放入你认为会出现异常的代码,catch(){}的()中写入可能出现异常的类型,{}中写入解决的方法

try{}:抛出异常。检查到异常后,生成一个该异常对象,将其抛出。
catch{}:捕获异常。将try{}中抛出的异常对象进行捕获,来进行匹配。

注意:在try中匹配到异常语句后,系统将会抛出一个异常类型的对象(也就是系统会自动throw new异常类型()),接着就会从上到下寻找catch中()里的类型去比较,匹配成功也进入里面执行解决方法,执行完后,继续正常代码的执行。未匹配成功,则进行下一个catch匹配,如果都没找到,则依然会由jvm去处理,jvm处理的话也就是将程序中断,后面的语句就没法执行了。

举例:

throws使用方法:
1.用在方法声明的后面
2.throws警告调用该方法的人,可能会有异常(不警告的话,那么长的代码,谁知道在哪)
3.并没有解决异常,只不过谁调用该方法,谁去解决该异常 

 

总结:throws只是将处理办法抛给了调用者来写,而try...catch是真的来解决异常的。 

自定义异常

为啥要自定义异常?因为异常不满足我的需求呗。你想变成异常,那就得继承异常。而之前说了,异常有两种,一种运行时异常,一种其他异常。

自定义异常步骤:

1.首先得定义一个异常类,然后继承异常类,写个构造方法。
2.写个方法,在方法中得手动抛出异常对象(也就是throw new...)
3.在main()方法中,利用try...catch进行处理

变成运行时异常:继承RuntimeException类
变成其他异常:继承Exception类

定义两个异常,可以使用空构造,也可以带参数

定义一个方法,其他异常(编译时异常)必须处理,否则报错,运行时异常可以不用解决,都不处理,jvm会处理

 main()方法调用loginInfo(),并进行try...catch

 由于账号,密码都不相同,按道理来说应该都进行处理,但结果:

 注意:try{}中可能有多个异常,但抛出一个后,后面的代码就不会执行,只会进行catch匹配了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值