• 异常


    Java异常机制主要依赖于try,catch,finally,throws,throw五个关键字

    java非正常情况分两种:

      异常Exception:

      错误Error:一般指与虚拟机相关的问题,如系统崩溃,虚拟机错误,动态链接失败等,这些错误无法恢复或不可能捕获,导致应用程序中断,通常程序无法处理,不应该用trycatch捕获

    java异常分两种:

      CheckedException:程序必须处理,必须try/catch或者throws声明

      RuntimeException:无须处理,无需try/catch或者throws声明

    出现异常,系统会自动生成异常对象,如果程序没有为异常准备捕获,则运行时环境终止,java程序也将退出

    try catch花括号不能省略,try块里声明的变量是代码块内部变量,只在try块内有效,外部不能访问,catch也不能

    异常捕获时,父类异常catch应该在子类异常后面

    java7后一个catch可以捕获多种异常:

      捕获多种异常时,多种异常之间使用“|“隔开,

      捕获多种异常时,异常变量有隐式的final修饰,因此不能对异常变量重新赋值

      catch(IndexOutOfBoundsException|NumberFormatException ie){...}

    所有异常对象包含的常用方法:

      getMessage():返回该异常的详细描述字符串

      printStackTrace():将该异常的跟踪栈信息输出到标准错误输出

      printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定输出流

      getStackTrace():返回该异常的跟踪栈信息

    finally用来回收资源,finally中的return和throw语句会导致try/catch中的return和throw失效

    System.exit(1)退出虚拟机会让finally得不到执行

    异常处理可以嵌套

    java7提供可以自动关闭资源的try:

      try关键字后紧跟一堆圆括号,括号里可以声明、初始化一个或多个资源,这里的资源是指那些必须在程序结束时显式关闭的资源(数据库连接,网络连接等),try语句在该语句结束时自动关闭这些资源。

      这些资源必须实现AutoCloseable或者Closeable接口,即实现close()方法

      自动关闭资源的try相当于包含了隐式的finally块(这个finally用于关闭资源),因此这个try语句可以既没有catch块,也没有finally块,如有需要,当然也可以带多个catch块和一个finally块

    throws声明一个或多个异常:当前方法不知道如何处理这种过一次类型,交给上一级调用者处理。main方法也可以使用throws声明抛出异常,该异常交给JVM处理,JVM处理方法是:打印异常跟踪栈信息,终止程序运行

    throw只能抛出一个异常:

      抛出的是异常实例,不是异常类

      如果throw抛出的是Checked异常,则该throw语句要么处于try块里,要么放在一个带throws声明的方法中

      可以让多个方法协作处理异常

    自定义异常类:

      用户自定义异常都应该继承Exception类,如果希望自定义Runtime异常,则应该继承RuntimeException。

      定义异常类时,同常需要提供两个构造器:一个无参数的构造器,一个是带一个字符串参数的构造器,该字符串作为该异常对象的描述信息,也就是getMessage()的返回值

      public class MyException extends Exception{public MyException(){}public MyException(String msg){super(msg);}}

    异常跟踪栈:打印出异常一路触发过程,找出源头

    异常处理规则:

      目标:

        使代码混乱最小化

        捕获并保留诊断信息

        通知合适的人员

        采用合适的方式结束异常活动

      避免:

        不要过度使用异常,简单的就地解决

        不要使用庞大的try块

        避免使用catch All语句:无法区分异常,重要异常可能被忽略

        不要忽略捕获到的异常:尽量处理,不行重新抛出

  • 相关阅读:
    docker学习之network:初识网络配置
    原来:HTTP可以复用TCP连接
    git tag的用法及意义
    Android,社招,面淘宝,指南【内部人员为你保驾护航】
    别了,拼多多!再也不想砍一刀了,哔哩哔哩 (゜-゜)つロ 干杯~
    【Android面试宝典】2021年,腾讯等大厂Android高级开发面试完全攻略!
    腾讯40岁老兵现身说法:35岁职业生涯分水岭,架构or管理,到底怎么选?
    【整理合集】Flutter 常用第三方库、插件、学习资料等
    [PAT]1011 World Cup Betting (20 分)Java
    [PAT] 1010 Radix (25 分)Java
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/7067094.html
Copyright © 2020-2023  润新知