java异常处理(代码片段)

爽走不解释 爽走不解释     2022-12-06     154

关键词:

java异常简介

程序运行过程中出现不可以预料的错误和bug,导致程序中止或产生了错误的结果,这个现象就叫异常

一、为什么要有异常处理机制?
Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪”抛出,异常信息回答了“为什么”会抛出。

异常体系图

如图可以看出所有的异常跟错误都继承与Throwable类,也就是说所有的异常都是一个对象。

从大体来分异常为两块:
1、error—错误 : 是指程序无法处理的错误,表示应用程序运行时出现的重大错误。例如jvm运行时出现的OutOfMemoryError以及Socket编程时出现的端口占用等程序无法处理的错误。

2、Exception — 异常 :异常可分为运行时异常跟编译异常

1)运行时异常:即RuntimeException及其之类的异常。这类异常在代码编写的时候不会被编译器所检测出来,是可以不需要被捕获,但是程序员也可以根据需要进行捕获抛出。常见的RUNtimeException有:NullpointException(空指针异常),ClassCastException(类型转换异常),IndexOutOfBoundsException(数组越界异常)等。
2)编译异常:RuntimeException以外的异常。这类异常在编译时编译器会提示需要捕获,如果不进行捕获则编译错误。常见编译异常有:IOException(流传输异常),SQLException(数据库操作异常)等。

java处理异常的机制:抛出异常以及捕获异常 ,一个方法所能捕捉的异常,一定是Java代码在某处所抛出的异常。简单地说,异常总是先被抛出,后被捕捉的。

二、接下来看一下异常的捕获:

(1) try-catch

A:捕获单个异常

 try
      //程序代码
  catch (ExceptionName e1)
      //Catch块
  

B:多重捕获块

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

try:用于监听异常
catch:用于捕获处理异常
try后面的一对大括号内的内容即受到监控的程序,也就是说这一段代码是可能存在异常的,而Catch中由开发者,根据自身推断可能存在的异常,书写对应异常类型以及处理方式,当程序发生异常时,会创建异常对象,并且将异常抛出到此环境外,Java运行时系统会寻找与发生异常所匹配的catch子句,当找到一个对应语句后则不再寻找其他catch块

示例:

  public class Demo 
      public static void main(String[] args) 
          int a = 520;
          int b = 0;
          int c;
  ​
          try 
              System.out.println("这是一个被除数为0的式子");
              c = a / b;
           catch (ArithmeticException e) 
              System.out.println("除数不能为0");
          
      
  
  
  //运行结果
  这是一个被除数为0的式子
  除数不能为0

(2) try-catch-finally

finally 关键字用来创建在 try 代码块后面执行的代码块无论是否发生异常,finally 代码块中的代码总会被执行,在 finally 代码块中,可以运行清理类型等收尾善后性质的语句,finally 代码块出现在 catch 代码块最后,语法如下:

  try
      ......
  catch(异常类型1 异常的变量名1)
      ......
  catch(异常类型2 异常的变量名2)
      ......
  finally
      ......
  

无论是否发生异常,fianlly始终都是会运行的

这里就不得不提一个非常重要的注意点,那就是当return遇到finally!
在catch里面有一个return,那么finally会不会被执行呢?

看代码

try
    //待捕获代码
catch(Exception e)
    System.out.println("catch is begin");
    return 1finally
     System.out.println("finally is begin");


======
输出结果:
catch is begin
finally is begin  

也就是说会先执行catch里面的代码后执行finally里面的代码最后才return1 ;

再看代码:

try
   //待捕获代码    
catch(Exception e)
    System.out.println("catch is begin");
    return 1finally
     System.out.println("finally is begin");
     return 2 ;

这次代码中输出结果跟上面是一样的,然而返回的是return 2 ; 原因很明显,就是执行了finally后已经return了,所以catch里面的return不会被执行到。也就是说finally永远都会在catch的return前被执行。(这个是面试经常问到的问题哦!)

注意1、
对于异常的捕获不应该觉得方便而将几个异常合成一个Exception进行捕获,比如有IO的异常跟SQL的异常,这样完全不同的两个异常应该分开处理!而且在catch里处理异常的时候不要简单的e.printStackTrace(),而是应该进行详细的处理。比如进行console打印详情或者进行日志记录。
注意2、
异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。

(3) throw/throws
将自己处理不了的,在方法或者语句上声明,告诉调用者,这里有问题

如果一个方法没有捕获到检查性异常,那么该方法就必须使用throws关键字声明(声明抛出多个异常,之间使用逗号隔开),也可以在语句中使用throw关键字抛出一个异常。

public void test() throws Exception 
    throw new Exception();

从上面这一段代码可以明显的看出两者的区别。throws表示一个方法声明可能抛出一个异常,throw表示此处抛出一个已定义的异常(可以是自定义需继承Exception,也可以是java自己给出的异常类)。

throw跟throws的区别:

A:throws

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

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

三、自定义异常

Java内置的异常类,基本可以满足我们在编程中遇到的大部分异常情况,此外我们还可以自定义异常类,只需要继承Exception类即可

基本步骤:

  • 创建自定义异常类
  • 在方法中通过throw抛出异常对象
  • 在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获处理
    也可以在方法声明处使用throws将异常抛给方法调用者
  • 在出现异常方法的调用者中捕获并且处理异常
 class MyException extends Exception   // 自定义的类
      MyException(String s) 
          super(s);
      
  
  class Demo 
      void method() throws MyException 
          throw new MyException("Wrong"); // 抛出自定义的类
      
  
  class DemoTest 
      public static void main(String[] args)
          try 
              new Demo().method();
          
          catch(MyException e) 
              System.out.println(e.getMessage());
          
       
  //运行结果
  Wrong

总结一波

异常就是在程序发生异常时,强制终止程序运行,并且将异常信息返回,由开发者决定是否处理异常 简单说一下这个异常机制的过程:

当程序无法运行后,它会从当前环境中跳出,并且抛出异常,之后,它会先new一个异常对象,然后在异常位置终止程序,并且将异常对象的引用从当前环境中返回,这时候异常处理机制接管程序,并且开始寻找可以继续执行程序的恰当位置

欢迎留言评论

java中的异常处理机制(代码片段)

文章目录聊聊Java中的异常处理机制概念异常处理抛出异常异常跟踪栈:异常处理步骤:1.捕获异常2.处理异常3.回收资源Java的异常处理接口关于finallyfinally是无条件执行的吗?在finally中return会发生什么?聊聊Java中... 查看详情

java异常处理机制(代码片段)

目录1.1Java异常的概念与分类1.1.1引入异常(数组越界)1.1.2 Throwable1.2Java异常捕获处理1.3异常处理finally语句使用1.3.1引入finally关键字1.3.2 采用finally释放Scanner资源1.3Java异常抛出处理1.3.1主动抛出异常1.4自定义异常类1.5综... 查看详情

java异常处理机制(代码片段)

目录1.1Java异常的概念与分类1.1.1引入异常(数组越界)1.1.2 Throwable1.2Java异常捕获处理1.3异常处理finally语句使用1.3.1引入finally关键字1.3.2 采用finally释放Scanner资源1.3Java异常抛出处理1.3.1主动抛出异常1.4自定义异常类1.5综... 查看详情

java的异常处理机制(代码片段)

Java语言在设计之初就提供了相对完善的异常处理机制。我们首先介绍一下Java中的异常。介绍Java中的异常异常是程序在运行过程中出现的程序异常事件,异常会中断正在执行的正常指令流。Java中的异常分为两大类:Exception和Error... 查看详情

java异常处理总结(代码片段)

一、Java异常继承框架Error:Error类对象由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。Exception:在Exc... 查看详情

java异常处理(代码片段)

Java异常处理  异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。  比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error;如果你用System.out.println(11/0),那么... 查看详情

java异常处理机制(代码片段)

1.异常是指在程序的运行过程中所发生的不正常的情况或者发生错误,导致中断正在运行的程序。2.异常处理语句:try-catch,如果try代码块中捕获到异常,则到catch代码块中处理,否则跳过忽略catch代码块。(良好的编程习惯,在异... 查看详情

java休息javaee异常处理(代码片段)

查看详情

java异常处理(代码片段)

一.异常框架二.异常分类1.必检异常:不可避免必须进行异常处理,要不编译器报错,Exception以及它的子类(除去RuntimeException)2.免检异常:RuntimeException以及它的子类三.异常处理方式Java编译期异常必须要进行处理... 查看详情

java异常处理(代码片段)

java异常简介程序运行过程中出现不可以预料的错误和bug,导致程序中止或产生了错误的结果,这个现象就叫异常一、为什么要有异常处理机制?Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证... 查看详情

java之uncaughtexceptionhandler异常处理机制(代码片段)

JAVA之UNCAUGHTEXCEPTIONHANDLER异常处理机制1.JAVA1.5版本出现的 UNCAUGHTEXCEPTIONHANDLER当线程由于未捕获异常突然终止时调用的处理程序的接口。当一个线程由于未捕获异常即将终止时,Java虚拟机将使用thread.getuncaughtexceptionhandler()查询... 查看详情

java之uncaughtexceptionhandler异常处理机制(代码片段)

JAVA之UNCAUGHTEXCEPTIONHANDLER异常处理机制1.JAVA1.5版本出现的 UNCAUGHTEXCEPTIONHANDLER当线程由于未捕获异常突然终止时调用的处理程序的接口。当一个线程由于未捕获异常即将终止时,Java虚拟机将使用thread.getuncaughtexceptionhandler()查询... 查看详情

java小技能:异常处理(代码片段)

文章目录前言I异常的处理方式1.1抛异常1.2捕捉异常1.3抛异常和捕获异常的区别1.4产生异常II异常分类2.1异常的选择2.2编译时异常与运行时异常的语法检查区别III自定义的异常3.1如何自定义异常?3.2自定义异常示例IVhttp请求返回详... 查看详情

java异常处理(代码片段)

 程序中的一般异常情况为:文件找不到、网络连接不通或中断、算术运算出错(如除数为0)、数组下标越界、装载了一个不存在的类、对null对象操作、类型转换异常等,异常会中断正在运行的程序。 异常处理机制就像... 查看详情

java异常处理规范(代码片段)

正文在下面,先打个广告:文章目录java异常简介异常处理规范异常错误码前面介绍了日志打印规范,如果想打印出合格的日志,还需要了解Java对异常处理的一些知识。java异常简介先来看一下Java中异常的类图,该... 查看详情

java异常处理规范(代码片段)

正文在下面,先打个广告:文章目录java异常简介异常处理规范异常错误码前面介绍了日志打印规范,如果想打印出合格的日志,还需要了解Java对异常处理的一些知识。java异常简介先来看一下Java中异常的类图,该... 查看详情

异常处理(代码片段)

异常,不可避免执行中发生的不正常情况(开发中语法和逻辑错误不算)Throwable类,异常根父类PublicStringgetMessage()//打印错误信息publicvoidprintStackTrace()//打印异常抛出轨迹机制,异常向上抛出,等待处理java健壮性,鲁棒性异常处... 查看详情

java异常处理机制(代码片段)

...f0c;它阻止了程序按照程序员的预期正常执行,这就是异常,那么异常发生之后怎么办,Java提供了更加优秀的解决办法-异常处理机制。异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻... 查看详情