15_JavaSE_异常处理

Posted Jack·Kwok

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了15_JavaSE_异常处理相关的知识,希望对你有一定的参考价值。

当我们设计的代码符合语法但不符合逻辑(例如访问的数组元素时索引越界等)或外界原因导致代码发生无法预料的情况发生,我们把这种情况称为异常(Exception)。

在 Java 中,Throwable 类有两个子类,一个是 Exception 类(定义的是我们上面所指的异常),一个是 Error类(指的是运行时环境发生的错误,例如:JVM 内存溢出等等)。在此基础上,Exception 类也有两个子类。一个是 IOException(输入输出异常),一个是 RuntimeException(运行时异常)。因此,所有的异常的“祖先”都是 Throwable 类。所以,我们来看看 Throwable 类有哪些方法:

public String getMessage()
返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。
public String toString()
返回此 Throwable 的简短描述。
public void printStackTrace()
将此 Throwable 及其回溯打印到标准错误流。。

那么我们如何捕获以及处理异常呢?

try

   // 可能存在异常的代码块
catch(ExceptionName e1)//指定捕获什么异常类型

   //捕获之后需要处理什么

一般我们都是通过将有可能抛出异常的语句放到 try 代码块中,接着在 catch 括号中声明可能出现的异常(Exception 的子类或 Exception 类),如果出现指定范围的异常的话,catch 语句代码块将会被执行,而我们一般也会在 catch 语句中处理(处理时一般会打印异常(一般是通过getMessage、toString、printStackTrace这三个方法来打印))。例子如下:

public class Test 
    public static void main(String[] arg)
        try 
            int a = 3/0;
        catch (Exception e)
            System.out.println("调用getMessage()方法并输出:");
            System.out.println(e.getMessage());
            System.out.println("调用toString()方法并输出:");
            System.out.println(e.toString());
            System.out.println("调用e.printStackTrace()方法");
            e.printStackTrace();
        
    


调用getMessage()方法并输出:
/ by zero
调用toString()方法并输出:
java.lang.ArithmeticException: / by zero
调用e.printStackTrace()方法
java.lang.ArithmeticException: / by zero
	at com.cs.study.config.Test.main(Test.java:13)

从上面例子我们可以看到这三者的区别:getMessage()方法返回一个字符串,内容是出现异常的原因,非常简洁(例子中,就只是说了你除以 0 了而已);toString()方法返回一个字符串,内容是出错的异常是属于哪个异常类以及出现异常的原因;e.printStackTrace()则不返回字符串,而是直接打印,内容包括出错内容的异常是属于哪个异常类、出现异常的原因,以及出错的位置在哪个类的哪个方法哪一行。

接着我们讲讲 throws/throw 关键字:
当我们的代码有可能存在异常时,但是我们不打算在当前方法就处理异常,那么我们可以选择把异常抛出去给调用者,让他来处理。这个时候我们需要在可能出现异常的方法后面指定 throws 关键字和异常类型。当代码出现异常时,会直接将异常抛给调用者去处理。(当然调用者也可以抛给上一个调用者)。

我们也可以在方法中直接指定抛出什么异常,这个时候可以直接用 throw 语句,并且指定异常类型,而且该方法要用 throws 说明抛出异常。

最后,我们说说 finally 关键字

try
  // 程序代码
catch(异常类型1 异常的变量名1)
  // 程序代码
catch(异常类型2 异常的变量名2)
  // 程序代码
finally
  // 程序代码

finally 关键字与我们前面学的 final 关键字不一样,finally 是用于在 try 语句的后面,作用是,无论是否有异常,都会执行 finally 里面的代码(一般是一些关闭输入流输出流等操作,即不管操作成不成功都要执行的代码)。

以上是关于15_JavaSE_异常处理的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE复习_7 异常

JavaSE-19.1.4复制文件的异常处理

activeMQ 安装及启动异常处理

JavaSE复习_12 Socket网络编程

Java全栈JavaSE:15.异常

javaSE第十九天