zoukankan      html  css  js  c++  java
  • 异常

    什么是异常
    所谓的异常就是程序在编译过程中或者运行过程中出现的问题!!
    异常的继承体系
    根类:Throwable
        子类: Exception(异常类) 一般是程序编写不当造成的
        子类: Error(错误类) 一般是由系统引起/硬件问题
      • 运行时异常:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
        运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
      • 非运行时异常 (编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOExceptionSQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。
    异常类中常用的三个方法
    public void printStackTrace();打印当前异常对象的详细信息(异常的类型,异常的原因,异常的位置)[只用这个]
    public String getMessage(); 获取异常的部分信息(异常的原因) 
    public String toString(); 获取异常的类型和异常描述信息   
    异常的分类

    编译时异常

    在编译时期报错了,提示可能有异常!
    Exception以及其子类(RuntimeException除外)都属于编译时异常   
    比如: SimpleDateFormat的parse方法   

    运行时异常

    在编译时期不报错,运行时期才出现异常!
    RuntimeException以及其子类都属于运行时异常    
    比如: 空指针异常,数组越界异常,类型转换异常  

    异常的注意事项

    a.运行时异常被抛出可以不处理。即不捕获也不声明抛出。[非常重要!!]
    b.如果父类的方法声明抛出了多个异常,子类覆盖(重写)父类方法时,只能声明抛出相同的异常或者是他的子集。
    c.如果父类的方法没有声明抛出异常,子类覆盖(重写)父类方法时,也不能声明抛出异常(多线程中就会用到)
    d.多个异常我们如何捕获处理??[非常重要!!]
            代码1; //声明抛出OneException 
            代码2; //声明抛出TwoException
            代码3; //声明抛出ThreeException
    i.分开捕获分开处理
            try{
               代码1; //声明抛出OneException 
            }catch(OneException e){
                 e.printStackTrace();   
            }
            try{
               代码2; //声明抛出TwoException
            }catch(TwoException e){
                 e.printStackTrace();   
            }
            try{
               代码3; //声明抛出ThreeException
            }catch(ThreeException e){
                 e.printStackTrace();   
            }
    ii.一起捕获,分开处理
            try{
                代码1; //声明抛出OneException  extends TwoException 
                代码2; //声明抛出TwoException
                代码3; //声明抛出ThreeException
            }catch(OneException e){
                 e.printStackTrace();   
            }catch(TwoException e){
                 e.printStackTrace();   
            }catch(ThreeException e){
                 e.printStackTrace();   
            }
    
    iii.一起获取一起处理[最常用的!!]
            try{
                代码1; //声明抛出OneException 
                代码2; //声明抛出TwoException
                代码3; //声明抛出ThreeException
            }catch(Exception e){
                 e.printStackTrace();   
            }
    
    e.当选择ii中处理多个异常时,如果这些异常有子父类关系,那么必须先处理子类异常,再父类异常
    f.在try/catch后可以追加finally代码块,其中的代码一定会被执行,通常用于资源回收(IO流的关系,网络连接关闭) 
  • 相关阅读:
    微信授权登录
    mpvue 试水的一天
    小程序请求接口统一封装到一个js文件中
    工作中vue项目前后端分离,调用后端本地接口出现跨域问题的完美解决
    百度小程序授权更好体验
    关于智能小程序网络请求封装
    vue 开发webapp 手机返回键 退出问题
    MySQL解决存入数据库和取出数据库时间格式问题
    关于小程序授权更好体验
    关于vue项目中在js中引入图片问题
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/13153648.html
Copyright © 2011-2022 走看看