Java笔记09-异常

本文详细介绍了Java中的异常处理机制,包括异常的分类、处理方式以及try-catch-finally的使用。强调了运行期异常和编译期异常的区别,并提供了JDK7的新特性。还探讨了自定义异常、finally块的重要性和异常处理的最佳实践,如异常的匹配顺序、资源释放等。
摘要由CSDN通过智能技术生成

异常的分类:

* 异常:Throwable
 *  严重问题:Error:我们不解决,因为解决不了
 *  一般问题:Exception
 *      运行期异常:RuntimeException或者它的子类,这种异常我们不解决,因为这是你写代码时不够严谨导致的。
 *      编译期异常:除了RunTimeException,我们必须解决,否则编译不通过

try...catch

 
自己如何处理异常:
 *  语法:(背)
 *  try{
 *      可能出现异常的代码
 *  }catch(异常的类名 变量名){
 *      针对异常的处理方式
 *  }finally{
 *      释放资源
 *  }
 *  
 *  变形格式:
 *  try{
 *      可能出现异常的代码
 *  }catch(异常的类名 变量名){
 *      针对异常的处理方式
 *  }
 *  
 *  注意:
 *      1.try里面的代码越少越好
 *      2.catch中必须有内容,哪怕是简单的提示
 *  
 *  try...catch执行流程:
 *      当try里面发生了异常,会到catch中进行匹配,如果匹配成功执行catch中的内容,catch中内容执行完毕,try...catch
 *      结构结束,程序继续向下执行。

try...catch...catch

 *  语法:(背)
 *      try{
 *          可能出现问题的代码
 *      }catch(异常类名1 变量名){
 *          针对问题的处理
 *      }catch(异常类名2 变量名){
 *          针对问题的处理
 *      }....
 * 执行流程:try代码块中如果出现了异常,会从第一个catch开始,直到找到匹配的catch,执行catch中的代码,
 *        执行完毕,try...catch结构结束,执行后续代码。
 * 
 * 注意:
 *  1.能明确的异常类名尽量明确
 *  2.如果出现了父子类关系那么父类必须放在最后一个catch中

编译期异常和运行期异常

运行期异常:不应该处理,是因为代码写的不够严谨,需要修改代码。也可以像编译期一样进行处理。
编译期异常:必须处理,否则编译不通过。

Throwable

 * Throwable中的方法:(了解)
 *  String getMessage():详细消息字符串。
 *  String toString():返回异常的简短描述。
 *      组成部分:
 *          1.异常类名
 *          2.":"
 *          3.getMessage()方法
 * void printStackTrace():打印异常的详细内容。

JDK7.0新的处理方式

JDK7.0新特性       
语法:
    try{
        可能出现问题的代码
    }catch(异常类名1 | 异常类名2  | 异常类名  变量名){
        针对问题的处理
    }
注意:每一个异常类名必须是同级关系。

throws

异常处理的另一种方式:throws(抛出)
语法:throws 异常类名
注意:
  1.必须写在方法声明的后面
  2.尽量不要在主方法上抛异常

throw

 * throw:表示在方法的内部主动抛出异常。
 * 语法:throw 异常的对象
 * 
 * throws和throw区别?
 *  throws:
 *      1.写在方法声明的后面
 *      2.后面跟的是异常类名
 *      3.后面可以跟多个异常类名
 *  throw:
 *      1.写在方法的内部
 *      2.后面跟的是异常对象
 *      3.后面只能是一个异常对象

finally

 * finally:放在finally中的代码一定会执行。
 * 作用:释放资源(IO/数据库)
 * 语法:try...catch...finally
 * 特殊情况:在没有执行finally之前退出虚拟机。
 * 
 * 面试题:
 *  final、finally、finalize的区别?
 *      final:最终
 *          修饰类:类不能被继承
 *          修饰方法:方法不能被覆盖
 *          修饰变量:变量为常量只能赋值一次
 *      finally:异常处理中的组成部分,作用:释放资源,放在finally中的代码一定会执行。
 *      finalize:是Object类中的方法,用于垃圾回收。
 * 
 * 变形格式:
 *  1.try...catch...finally
 *  2.try...catch
 *  3.try...catch...catch...
 *  4.try...finally:只用于释放资源

自定义异常

自定义异常类:
 1.继承Exception(编译期异常)
 1.继承RunTimeException(运行期异常)

异常的注意事项

1.当子类覆盖父类方法,父类方法抛出了异常,子类方法要么不抛异常,要么和父类抛出一样的异常或者是父类的子异常。
2.当子类覆盖父类方法,父类方法没有抛异常,子类方法中出现了异常,只能try...catch不能throws。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值