Java中的异常

Wesley13
• 阅读 779

异常的概述

异常就是不正常的意思,Java语言中主要指程序在运行阶段产生的错误

Throwable(可抛出、可扔出的)

Java.lang.Throwable类是Java程序所有错误或异常的超类

主要有两个子类:

  Error:主要描述比较严重的错误,无法通过编程来解决的重大的错误

  Exception:主要描述比较轻量级的错误,可以通过编程来解决的

Throwable中的方法

  1. getMessage() - 获取异常信息,返回字符串
  2. toString() - 获取异常类名和异常信息,返回字符串
  3. printStacTrace() - 获取异常类名和异常信息,以及异常出现在程序中的位置。返回void
  4. printStackTrace(PrintStream s) - 通常用该方法将异常内容保存在日志文件中,以便查阅

Exception类的主要分类

  RuntimeException -运行时异常,也叫做非检测性异常类
  ArithmeticException - 算数异常类
  ArrayIndexOutOfBoundsException(间接子类) - 数组下标越界异常
  NullPointerException - 空指针异常
  ClassCastException - 类型转换异常
  NumberFormatException(间接子类) - 数字格式异常

注 意 :

当程序的执行过程中产生异常,若没有手动进行处理 则有java虚拟机采用默认的方式处理,默认方式就是打印异常名称、异常原因以及异常发生的位置并终止,后续的代码无法被执行

运行时异常的处理方式

对于绝大对数运行时异常来说,都可以通过判断条件来避免异常的发送

异常的捕获

(1)语法格式

try{
        可能产生异常对象的语句块;
    }catch(异常类型 引用名){
        针对当前异常类型对象捕获异常的结构中有多个catch分支时,切记小范围的异常类型放在大范围的异常类型上面的处理语句块;
    }
    finally{
        无论是否发生异常都应执行的语句块;
        }

(2)注意事项

捕获异常的结构中有多个catch分支时,切记小范围的异常类型放在大范围的异常类型上面

懒人的写法:

catch(Exception e){...}

(3)执行流程

try{
        a;
        b;
        c;
    }catch(Exception e){
        e;
    }finally{
        f;
    }
        h;

当没有产生异常的时候,程序的执行流程是:a b c f
当产生异常时,执行的流程是:a b e f

异常的抛出

(1)基本概念
  在某些特殊的场合中,当产生异常后却无法直接处理的/不想处理时,此时就可以将异常转移给当前方法的调用者,这都叫异常的抛出

(2)语法格式
  返回值 方法名称(形参列表) throws 异常类型(......)

(3)方法重写的原则

  1. 要求方法名相同、参数列表相同、返回值类型相同,从jdk1.5开始允许返回子类类型
  2. 访问权限不能变小,可以相同或者变大
  3. 不能抛出更大的异常

注 意 :
子类中重写以后的方法可以选择抛出与父类一样的异常、更小的异常,但是不能抛出更大的异常、不同的异常

自定义异常

(1)自定义异常的由来
  Java官方库中虽然提供了大量的异常类,但不足以描述显示生活中所有的异常情况,当出现官方文档中没有描述的异常情况时就需要程序员自定义异常类加入描述,使得异常信息更加具备针对性和可读性

(2)自定义异常的流程
  1. 自定义类继承Exception类或者Exception类的子类
  2. 提供两个版本的构造方法,一个是无参构造的方法,另一个是字符串做参数的构造方法

异常对象的抛出

throw new 异常类型()

例如:

throw new Exception()

throws和throw的区别:

throws
  1. 用在方法声明后面,跟的是异常类名
  2. 可以跟多个异常类名,用逗号隔开
  3. 表示抛出异常,由该方法的调用者来处理
  4. throws表示出现异常的一种可能性,并不一定会发生这些异常

throw
  1. 用在方法体内,跟的是异常对象名
  2. 只能抛出一个异常对象名
  3. 表示抛出异常,由方法体内的语句处理
  4. throw则是抛出了异常,执行throw则一定抛出了某种异常

finally的特点作用及面试题

finally的特点
  1. 被finally控制的语句体一定会执行
  2. 特殊情况: 在执行到finally之前jvm退出了(比如System.exit(0))

finally的作用
  1. 用于释放资源,在IO流操作和数据库操作用会见到

finally相关的面试题
  1. final,finally和finalize的区别
  2. 如果catch里面有return语句,请问finally的代码还会执行吗?
  3. 如果会,请问是return前还是return后

点赞
收藏
评论区
推荐文章
如何优雅的处理异常
Java语言按照错误严重性,从throwale根类衍生出Error和Exception两大派系。本文从异常的定义、处理异常的方式、如何优雅的抛出异常以及处理异常等方面来聊聊如何异常这件事
Wesley13 Wesley13
3年前
javaAPI_IO流基础_异常
异常1.异常的概述和分类java中的异常有一个超类Throwable,然后其有俩个子类接口Error和Exception,其中Error是严重问题,这一个是程序中无法解决的,而另一个Exception则是一般问题。Exception又可以分为俩个:(1).编译时期异常:不是RuntimeException的异常,这一个是必须
Wesley13 Wesley13
3年前
java异常处理
_1.异常的分类_Error:称为错误,有java虚拟机生成并抛出,包括动态链接失败、虚拟机错误等,程序对其不做处理。Exception:所以异常类的父类,其子类对应了各种各样可能出现的异常,一般需要用户显示的声明或捕获。RuntimeException:一类特殊的异常,如被0除,数组下标超范围等,其产生比较频繁,处理比较麻烦,如果显示
Wesley13 Wesley13
3年前
JEE开发异常处理
      在Java开发中,到处可见Exception或者它的子类。如何在一个已有的框架中或者自己的项目中利用好异常,而不让异常漫天飞,需要开发的积累和总结,这篇日志就为这个目的总结几年来的开发对异常使用总结吧。      首先认识Java异常体系结构,Java中使用Throwable作为所有的异常父类,下面有两大子类Error和Excepti
Wesley13 Wesley13
3年前
Java 的Throwable、error、exception的区别
1.  什么是异常?异常本质上是程序上的错误,包括程序逻辑错误和系统错误。比如使用空的引用(NullPointerException)、数组下标越界(IndexOutOfBoundsException)、内存溢出错误等。Throwable类是Java语言中所有错误或异常的超类。有两个重要的子类:Exception(异常)和Error(错误),
Stella981 Stella981
3年前
Exception、Thorow、Throws、TryCatch
一、异常 概述:  异常指的是不正常,指的是程序中出现了某种问题       java中,所有问题都可以使用一个类来表示,这个类叫做Throwable  Throwable:       Throwawble是java中所有异常和错误的父类      Error: 表示错误,指的是不可挽回的严重问题    
Wesley13 Wesley13
3年前
JAVA学习笔记 之 异常
异常的概述代码在运行时期发生的问题就称之为异常。在java中,异常被封装成为了一个类,当程序出现了异常类中的问题时,异常的信息(如位置和原因)就会被抛出。在java中用Exception来描述异常,publicclassExceptionextendsThrowable则是异常的继承体系。 Throwable是所有错误或异常的
Wesley13 Wesley13
3年前
Java入门之异常处理
1.异常概念异常指的是程序在执行过程中出现的非正常的情况,导致JVM的非正常停止。在Java中,异常是一个类,产生异常就是创建异常对象并抛出一个异常对象。异常指的并不是语法错误,语法错误,编译不会通过,而是编译通过后,程序执行异常。异常的作用是帮助我们找到程序中的问题。2.异常产生过程解析pub
Stella981 Stella981
3年前
PlayJava Day020
1.异常Exception补充:①错误(Error)指的是致命性错误,一般无法处理②异常以类的形式封装程序可以处理的异常对应的类是java.lang.Exception及其子类运行时异常对应的类是java.lang.RuntimeException错误异常对应的类是java.lang.Error③异常相关类的继承树:java.la
京东云开发者 京东云开发者
2个月前
如何优雅的处理异常
一、什么是异常Java语言按照错误严重性,从throwale根类衍生出Error和Exception两大派系。Error(错误):程序在执行过程中所遇到的硬件或操作系统的错误。错误对程序而言是致命的,将导致程序无法运行。常见的错误有内存溢出,jvm虚拟机自