Java基础——异常

  • Post author:
  • Post category:java




异常



1、简介

程序中出现错误,导致程序不能运行,我们称为

异常



2、try-catch



2.1、引入

我们写一个程序,当然希望程序能正常运行下去,但我们避免不了程序可能出现的异常,为了程序的正常运行,我们希望即使抛出异常,也能正常运行,而try-catch正有此功能。



2.2、使用方法

我们把有可能出现的代码放入try代码块中,可以通过catch捕获try代码块中有可能出现的异常,随后执行catch代码块中的代码,

如果捕获到相关异常,那么try-catch后面的代码无影响正常运行。



2.3、运行原理


  1. 第一种情况:

    try中没有异常,那么catch中的代码不执行。

  2. 第二种情况:

    try中有异常,但是不是catch所捕获的异常类型,相当于程序遇到异常,程序报错不执行下面的代码。

  3. 第三种情况:

    try中有异常,并且被catch捕获到了,那么执行catch中的代码,catch代码块外的后续代码正常执行。



特别地,当

try

中异常被

catch

捕获到,那么

try

中出现异常的那段代码下面的代码就不会执行。



3、catch如何处理异常


  1. 第一种处理:

    什么都不做。

  2. 第二种处理:

    继续向外抛出异常,让JVM处理。

  3. 第三种处理:

    主动处理,捕获到异常执行自己处理异常的代码逻辑。

  4. 第四种处理:

    输出自定义异常。

  5. 第五种处理:

    打印异常信息。



3.1、try-catch后面的代码什么时候不执行?

  • try中出现异常,但没有被catch捕获到 。
  • catch中主动抛出异常。
  • try中有返回值。



4、try-catch-finally

必须执行的代码可放在finally中,无论如何这个代码必会执行。

当然如果在try直接终止虚拟机 ,那么finally不会执行。



4.1、try中有return那么finally执不执行?

这个问题:主要看哪个先执行


先执行finally后执行return。



5、多重catch

try中出现异常后,跟后面catch的异常类型一个一个比较,执行第一个与之匹配的catch中的代码块,

一旦执行第一个之后,后面的catch就不执行了。


所以在catch捕获异常的时候,得将特殊的异常类放在前面,一般的放后面 (简而言之,就是先小异常,后大异常)



5.1、JDK1.7之后

可将异常并列:

public static void main(String[] args) {
      try {
           int i = 1 / 0;
       } catch (IllegalArgumentException | ArithmeticException | NullPointerException e) {
           System.out.println("程序出异常啦!" + e);
       }
   }



6、异常分类

异常类型



7、throw与throws

区别 throw throws
位置不同 在方法中 在方法声明处
内容不同 抛出的是异常对象 抛出异常类型(可多个,用

,

拼接)
作用不同 能定位到异常源头 告诉开发人员方法内部可能存在异常



8、重载与重写异常


父类异常要大于等于子类异常!

父类异常要大于等于子类异常



9、自定义异常

  1. 如果我们继承运行时异常,则不需要额外处理,会在运行时抛出。
  2. 如果是检查异常,需要我们在代码中就要用

    try-catch

    捕获,或者

    throws

    抛出



版权声明:本文为qq_52793248原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。