zoukankan      html  css  js  c++  java
  • 异常

    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语句:无法区分异常,重要异常可能被忽略

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

  • 相关阅读:
    Httpd服务入门知识-Httpd服务常见配置案例之显示服务器版本信息
    破解CentOS7的root及加密grub修复实战
    Httpd服务入门知识-Httpd服务安装
    Httpd服务入门知识-http协议版本,工作机制及http服务器应用扫盲篇
    Linux操作系统-CentOS7启动流程和服务管理
    Socket网络编程-IO各种概念及多路复用
    Socket网络编程-SocketServer
    Socket网络编程-UDP编程
    Socket网络编程-TCP编程
    Linux操作系统内核编译之NTFS文件系统模块支持案例
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/7067094.html
Copyright © 2011-2022 走看看