学习-异常处理

  java把各种异常封装成各种类,当某异常产生的时候会生成相应的异常对象,默认的处理异常对象的方式,是当前语句停止,并且将异常对象抛给当前语句的调用者,如果异常对象出现在main方法,则抛给虚拟机.虚拟机的处理方式是关掉整个程序.

  一.Throwable类

  Throwable类-可抛的,继承自Object,是所有异常与错误的父类.他有两个方法经常被使用.

  1.getMessage方法,返回异常的字符串消息;

  2.printStackTrace方法,追踪打印抛出异常的地方.

  他有两个子类:

  1.Error类-错误

  往往是代码无法修复的,一般是硬件问题或者是运行环境问题.

  2.Exception类

  是可以用代码修复的.

  二.异常处理

  上面说了Error是代码处理不了的,所以不在处理范围内,异常处理指的就是对Exception类及其子类的对象的处理,异常分为两类:

  1.运行时异常(RuntimeException)

  顾名思义,运行时异常就是没有语法错误,编译时不会出现异常,而是程序运行起来以后发生的异常.

  处理方式:a.最好的处理方式是预先针对可能发生异常的语句做出判断和处理.

       b.在a无法实现的时候就要使用异常捕获机制:try(尝试) - cahch(捕获) - finally(最终),三个关键字组成的语句块

      try{

        //⑴

      } catch (⑵) {

        //⑶

      } finally {

        //⑷

      }

  在⑴中书写的是有可能发生异常的代码.如果是多个语句.在其中一个语句发生异常时,try语句结束,后面的代码将不会被执行,直接跳到catch块捕获到相应异常的语句块执行其内容;

  在⑵中书写的是要捕获的异常类型以及变量名(用于指向对应的异常对象);

  在⑶中书写的是处理该异常的语句;在异常类型没有继承关系的时候,多个catch语句块之间是平行关系不分先后;在异常类型有继承关系的时候,多个catch语句块之间必须有顺序,子类写在前,父类写在后;

  在⑷中书写的是不管有没有发生异常都会执行的语句,一般用作资源清理和关闭管道;如果没有非要执行的语句,finally语句块是可以不写的;值得注意的是finally 语句块的执行时机.如果,try语句或者catch语句有break,continue,return等命令,在计算机读到这些命令准备执行时,会检查是否有finally语句块,如果有,执行暂停,先执行finally语句块.所以当return一个值的时候,如果finally语句要修改这个值是没办法影响返回结果的.比如:a = 10;在前面语句中要return a;在finally语句中要执行a++;最后返回出去的还是10.因为计算机已经把返回值准备好了,只是暂停返回.

  关键字:throw - 抛出

  使用他可以主动将一个异常对象纳入到默认的异常传播机制中.

  2.编译时异常

  这种异常是Exception子类中除了运行时异常意外的其他子类.

  特点是,凡是使用关键字throws的方法都是有可能出现异常的,throws作用是警告使用者,要预先处理该异常;throws写在方法声明的最后面,后跟有可能出现的异常类型;这种预先就知道可能会发生的异常叫做编译时异常.

  处理的方式:a.使用异常捕获机制;

          b.也在声明部分写throws跟异常类型,将其抛给当前语句的调用者;

 throwthrows
书写位置写在方法的实现部分写在方法的声明部分(形参列表之后)
后面跟的代码后面接一个异常对象后面接一个到多个异常类型
意义一旦运行到throw语句就好真正产生一个异常对象抛出警告调用者可能发生某类型的异常

 

  3.自定义异常

  做法:a.新建自定义异常,让其继承Exception;

     b.通过调用父类指定构造,让自定义异常通过传入的任何一个异常对象构造自身;通过调用父类指定构造,让自定义异常通过传入的字符串异常信息构造自身;

     c.添加我们自己需要的异常方法(如:书写日志);

转载于:https://www.cnblogs.com/yutanggege/p/5838909.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值