java异常

异常:Java程序在运行过程中出现的错误。

  • 分类:
    • Error:严重问题
    • Exception:非严重问题(分类)(主要学习)
      • 编译期异常:不属于RunTimeException的异常 (处理)
      • 运行期异常: RunTimeException及其子类(不处理)
  • jvm默认处理异常:控制台默认处理:展示异常 结束程序
  • 处理方式:
    • try …catch
    • Throws

Java的异常处理机制可以让程序具有良好的容错性 让程序更加健壮。当出现意外是,Java会自动生成一个Exception对象来通知程序 从而将 实现代码 和错误代码分离,提供更好的可读性。

 try{
  可能出现问题的代码
       }catch(异常名){
   针对问题的处理方式
     }finally{
   释放资源
  }

注意事项:

  • try里面代码越少越好 (哪里有问题放在try块里面)
  • catch块里面 必须有东西 哪怕是提示错误也行。
  • 一旦try块有问题,就抛出异常,与相对的catch块匹配处理 然后执行 try。。。catch后面的语句 。有问题的后面暂不做处理
  • 尽量明确异常的类型,不要直接使用父类Exception
  • 父在后,子在前。(可以多个catch捕获,但是父类异常必须放在子类异常之后,否则jvm捕获时,会直接捕获父异常忽略子异常)
  • 多异常捕获的时候,这些异常必须是平级关系。
  try{
  可能出现问题的代码
       }catch(异常名|异常名|异常名|。。。。变量){  //多异常捕获
   针对问题的处理方式
     }finally{
   释放资源
  }

  • 编译期异常:java程序必须显示处理,否则就会发生错误,无法通过编译
  • 运行期异常:无需显示处理,也可以和编译异常一样处理,如果不处理,jvm将自动处理。处理结果:打印异常信息,结束程序。
    • GetMassage():返回thorwable及其子类异常的详细消息字符串(可以为 null)
    • toString():返回简单异常信息描述。内容:
      • 此对象的类的 name
      • ": "(冒号和一个空格)
      • 调用此对象getLocalizedMessage() 方法的结果
    • getLocalizedMessage() :此 throwable 的本地化描述。

关键字:throws

  • 在方法声明上抛出异常 告诉调用者,有异常必须得处理。(在本方法中出现异常,若在本方法中不想处理可以在本方法签名后面使用throws+异常类进行抛出,由调用本方法的类或者方法处理这个异常)
  • 小结:
    • 编译期异常抛出 调用者必须处理
    • 运行期异常抛出 调用者可以不处理
    • throws 可抛出多个异常名。

关键字:throw

  • 用在方法体内,后跟异常对象名,只能抛出一个异常对象名。
  • 表示抛出异常,由方法体内的语句处理
  • throw则是抛出了异常,执行throw则一定是抛出了某种异常
  • 如何处理:
    • 如果功能内部可以将异常处理 就用try。。catch
    • 如果处理不了就用throws抛出,让调用者处理该异常

throw和throws的区别:

  • 区别一:throw 是语句抛出一个异常;throws 是方法抛出一个异常;
    throw语法:throw <异常对象>
    在方法声明中,添加throws子句表示该方法将抛出异常。
    throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]
    其中:异常类可以声明多个,用逗号分割。
  • 区别二:throws可以单独使用,但throw不能;
  • 区别三:throw要么和try-catch-finally语句配套使用,要么与throws配套使用。但throws可以单独使用,然后再由处理异常的方法捕获。

关键字:finally

  • 被finally控制的语句一定会执行(除非在finally块之前,jvm退出,使用system.exit()
    • 作用:释放资源
    • 格式: try。。。catch。。。finally

final,finally,finalize区别

 - final: 修饰类,方法,变量
 - finally:异常处理的一部分 用于释放 资源
- finalize:Object类的方法,回收垃圾。
  • 注意:
    • 当catch块里有exit()时,程序将不再执行final块的内容。
    • 当catch快里有return语句时,final语句将在return语句前面一步执行,再去执行catch块的return语句。
    • 当fianl和catch块里都有return语句时候,会执行final块的return语句。不会再去执行catch块的return语句。
    • 只能执行一条return语句。

自定义异常

  • 继承Exception 编译
  • 继承RuntimeException 运行

注意事项:

  • 子类重写父类方法时,子类的方法必须抛出相同的异常或者父类异常的子类。
  • 父类抛出了多个异常,子类重写父类时 只能抛出相同的异常或者他的子集,子类不能抛出父类没有的异常
  • 如果被重写的方法,没有异常抛出,那么子类的方法不可以抛出异常,如果有些子类有异常,则必须用try。。。catch处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值