美文网首页
JAVA高级(2)—— 异常机制

JAVA高级(2)—— 异常机制

作者: AndroidMaster | 来源:发表于2018-01-02 22:42 被阅读19次

一、基础

1、JAVA异常

1.1、Runtime异常

1)非Checked异常,所有RuntimeException及其子类的实例。
2)可以try...catch处理。

1.2、Checked异常

1)非Runtime异常的异常。
2)必须显示处理,否则编译不通过。

1.3、异常处理方式
  • try...catch处理
  • throws继续抛出

一旦某个catch捕获到匹配,进入异常处理代码,其他catch不再有机会捕获,因此捕获小异常应该在前,捕获大异常应该在后。

1.4、小结
  • 在当前方法被覆盖时,覆盖他的方法必须抛出相同的异常或异常的子类,不能抛出新异常
  • try 块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。一个catch捕获多个异常:catch(异常1 | 异常2)。
  • finally 块:无论是否捕获或处理异常,finally块里的语句都会被执行,主要用于资源的回收,关闭。当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行
  • 当try语句块里的某条语句出现异常时,而没有处理此异常的catch语句块时,此异常将会抛给JVM处理,finally语句块里的语句还是会被执行,但finally语句块后的语句不会被执行。
  • 在try语句块中,当执行到某一条语句出现异常时,程序将跳到catch语句块,并与catch语句块逐一匹配,其他的catch语句块将不会被执行,而try语句块中,出现异常之后的语句也不会被执行,catch语句块执行完后,执行finally语句块里的语句,最后执行finally语句块后的语句。
  • throw总是出现在函数体中,用来抛出一个Throwable类型的异常。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。如果抛出了检查异常,则还应该在方法头部声明方法可能抛出的异常类型。该方法的调用者也必须检查处理抛出的异常

在以下4种特殊情况下,finally块不会被执行
1)在finally语句块中发生了异常。
2)在前面的代码中用了System.exit()退出程序。
3)程序所在的线程死亡。
4)关闭CPU。

2、自定义异常

1、继承Exception(Checked异常)或者RuntimeException(Runtime异常)
2、有2个构造器,无参和入参是一个字符串,该字符串就是getMessage()返回的值

3、重要方法

getStackTrace()   StackTraceElement[]     //返回异常跟踪栈信息
printStackTrace()    //将异常跟踪栈信息输出到标准错误输出
printStackTrace(PrintStream s)     //将异常跟踪栈信息输出到指定的输出流

4、StackTraceElement

主要包含发生异常的文件名,类名,方法名,行数等信息
Thread.getStackTrace() StackTraceElement[] //此方法返回StackTraceElement数组,每个元素代表一个堆栈帧。
Thread.currentThread().getStackTrace()[0].getClassName()//得到当前线程的名字
new Exception().getStackTrace()[0] //得到的是当前类的名字
Thread.currentThread().getStackTrace()[1].getClassName() //得到的是当前类的名字
new Exception().getStackTrace()[1] //得到调用类的名字
Thread.currentThread().getStackTrace()[2].getClassName() //得到调用类的名字

用途
1)我们可以封装一个日志库,在打印目标日志的时候,也可以通过这个调用栈打印出这个日志所在的行数,
这样就可以迅速的定位到日志输出行。
2)如果我们写了一个SDK,希望某个方法在固定的位置被调用,我们也可以在这个方法被调用的时候,
进行检查,看这个方法的调用位置是否正确
3)我们在进行源码分析的时候,如果想分析整个代码的执行流程,我们可以进行通过打印栈的信息来获取,
这个在源码分析的时候还是挺有用的。

5、常见异常

RuntimeException子类
1)java.lang.ArrayIndexOutOfBoundsException
2)java.lang.ArithmeticException 算术条件异常。譬如:整数除零等。
3)java.lang.NullPointerException
4)java.lang.ClassNotFoundException

二、try catch finally的返回值问题

参考文献

深入理解java异常处理机制

相关文章

  • JAVA高级(2)—— 异常机制

    一、基础 1、JAVA异常 1.1、Runtime异常 1)非Checked异常,所有RuntimeExcepti...

  • python学习笔记之--异常处理

    类似于C++/Java等高级语言,python也有异常的处理机制 异常捕获和处理 在python语言中python...

  • Java异常简介及其架构

    Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机制。Java异常机制可以使程序中异常处理...

  • JAVASE-DAY10

    一、异常机制: 1、异常:JAVA 提供的用于处理程序中错误的一种机制 2、异常分类: 编译时异常:如果程序一旦出...

  • Java 异常处理总结

    Java 异常机制 Java 异常分为检查异常和非检查异常,所有RuntimeException的子类都是非检查异...

  • Java学习笔记七:异常机制

    一、异常的基本概念 (1)异常机制本质:就是当程序出现错误,程序安全退出的机制。 (2)Java是采用面向对象的方...

  • 04-Java异常面试题(7题)

    1、Java中异常分为哪两种? 编译时异常 运行时异常 2、异常的处理机制有几种? 异常捕捉:try…catch…...

  • Java中的异常处理

    一、概述 Java异常是Java提供的一种识别和响应错误的一致性机制。 Java异常机制可以使得异常处理代码和正常...

  • JAVA异常

    一、简介 Java异常是Java提供的一种识别及响应错误的一致性机制。Java异常机制可以使程序中异常处理代码和正...

  • Java基础每日10题——第二天

    1.Java中实现多态的机制是什么? 动态绑定 2.Java中异常分为哪些种类 RuntimeException、...

网友评论

      本文标题:JAVA高级(2)—— 异常机制

      本文链接:https://www.haomeiwen.com/subject/fpvtnxtx.html