Exception 异常和自定义异常

异常:
异常是指当我们编写代码的过程中,或者代码运行的过程中发生错误,如果这些错误不处理可能导致程序不能正常
工作,甚至程序崩溃。

Error:在英文中代表很严重的错误,在Java中通常代表系统错误,无法通过捕获来解决,这种错误程序员
不需要担心,一般的常见Error: 断电,电脑死机,电脑炸了,JVM内部的一些错误。

Exception:jdk1.0出现相比于Error来说级别更低,而且可以被程序员处理,如果不及时处理的话小则方法
终止,大则直接导致程序崩溃。

Exception的分类:
1:运行时异常,在编写(编译)代码的时候不会报错,但是在运行的时候可能因为某些思维不谨慎等原因而出现
异常,可以根据需求进行更改,一般的运行时异常都可以通过业务逻辑判断来实现避免。

2:编译期异常,在编写(编译)代码的时候(一般出现在调用某些方法时),强制要求必须处理的异常,如果不处理
则代码会在编译期间报错,这些异常一般由方法或类的开发者制定。

try: 其作用域中存放所有有可能出现异常的代码,当其中代码出现异常的时候try中后面的代码不会再执行,
而是直接把异常交给catch然后执行catch的代码。

catch:会对try中出现的异常进行捕获,可以多个catch配合使用,但是使用多catch的时候要注意按照异常
范围从小到大进行捕获。

finally:不管try中的代码是否出现异常都会执行finally里面的代码,一般用于资源释放。

异常捕获总结:
1:RuntimeException 其内全部都是运行时异常,所有的运行时异常都继承于RuntimeException,不会要求
我们强制处理,可以根据自己业务需求来选择处理。
2:异常的捕获一定要按照从小到大来进行捕获,虽然直接捕获Exception可以捕获到所有异常,但是这样的话
所有的异常都会按照一个方式来进行处理,在某些项目中并不适用,所以异常最好是分开捕获(同级异常不分
先后顺序)。
面试题:
一:异常的处理流程:
1:当程序出现异常的时候,那么会由JVM会根据异常的类型实例化一个异常对象(这个过程由JVM负责,不需要我
们关心)。
2:当实例化对象后会检测我们代码中有没有try语句来捕获异常实例对象如果没有存在则交给JVM自动处理(
JVM的处理方式:输出异常信息然后结束程序(后面代码都不在执行)。
3:如果存在有异常处理,就会使用try语句来捕获异常实例对象,然后由try语句后面的每一个catch去进行
匹配,如果有符合的catch则执行catch里面的代码,如果没有则继续匹配下一个catch
4:不管catch中是否匹配成功,如果代码中存在有finally的话就会继续执行其中的代码,当执行完成finally
中的代码后,如果之前的异常被catch成功匹配则继续往下执行,如果没有被catch成功匹配则会交由JVM处理(
输出异常信息,结束程序)

二:return 与finally的执行顺序
先执行return 然后把返回的值写到内存中,然后执行finally语句,当执行完finally语句后再把内存中
的值返回给调用者(可以理解为return 执行了两次)。

三:什么情况下finally不执行
1:在try中关闭了JVM      System.exit(0);
2:在执行try之前先执行return 
3:不可抗拒的条件(死机,断电等.....)

四:自定义异常
如果需要自定义编译型异常只需要继承Exception即可
如果需要自定义运行期异常只需要继承RuntimeException即可

五:Throws与Throw
Throws与Throw两者都不解决异常,只是负责把异常抛出而已。
Throws在方法体上(方法参数列表后面)使用Throws 关键字把需要抛出的异常写上即可,当方法抛出异常后
谁调用这个方法谁负责处理这个异常,如果调用者没有处理异常继续向上抛出的话异常最终由JVM进行处理。

Throw在方法内部抛出异常,在定义方法的时候如果传入的参数不符合我们方法规定则可以使用Throw抛出
一个异常并且附带提示信息。需要注意的是,如果在方法中定义了编译期异常一般都是为了提醒调用者
这个方法可能会出现一些问题及会出现什么问题,所以不要在方法内自己去try而是交给调用者去处理

如果不重写:
    1:内存地址

如果重写:
    1:内存地址          // 如果内存地址相同  在此返回
    2:对象是否为null  // 如果对象为null  在此返回 
    3:双方是否归属同一个class  // 如果两个class 不一致 在此返回    
    4:对象里面的具体值是否一致
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值