Java try catch finally异常处理组合详解

作者:嘿抬头i 时间:2021-07-04 18:19:51 

try catch finally组合:检测异常,并传递给catch处理,并在finally中进行资源释放。

try catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理。对异常进行捕获处理


public class Demo04 {
 public static void main(String[] args) {
   int [] arr={};
     //可能会发生异常的语句
     int a=get(arr);//可以点第2个或者第3个
     System.out.println(a);
 }
 public static int get(int[] arr) throws ArrayIndexOutOfBoundsException ,NullPointerException ,Exception {
   //若异常有一个定义为Exception,可以单写Exception。因为Exception是所有的父类
   if(arr==null){
     throw new NullPointerException("数组为空!");
   }
   if(arr.length==0){
     throw new ArrayIndexOutOfBoundsException("数组长度为0!");//都可以写Exception,因为Exception是所有的父类
   }
   int i=arr[arr.length-1];
   return i;
 }
}

一个try 多个catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理。对每种异常信息进行不同的捕获处理。

注意:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。

try finally 组合: 对代码进行异常检测,检测到异常后因为没有catch,所以一样会被默认jvm抛出。异常是没有捕获处理的。但是功能所开启资源需要进行关闭,所有finally。只为关闭资源。(虚拟机处理—结束程序、报错;finally还是执行的)。

运行时期异常:

RuntimeException和他的所有子类异常,都属于运行时期异常。

NullPointerException(空指针),ArrayIndexOutOfBoundsException(数组越界)、ClassCastException(类转换异常)、NumberFormatException(数字格式异常--数字转换异常)、

java.util.ConcurrentModificationException(并发修改异常)、SQLException(sql异常)等都属于运行时期异常。

运行时期异常的特点:

①、方法中抛出运行时期异常,方法定义中无需throws声明,调用者也无需处理此异常;

②、运行时期异常一旦发生,需要程序人员修改源代码。

异常在方法重写中的细节:

1、子类覆盖父类方法时,如果父类的方法声明异常,子类只能声明父类异常或者该异常的子类,或者不声明。

2、 当父类方法声明多个异常时,子类覆盖时只能声明多个异常的子集。

3、当被覆盖的方法没有异常声明时,子类覆盖时无法声明异常的。

问题:接口中没有声明异常,而实现的子类覆盖方法时发生了异常,怎么办?

答:无法进行throws声明,只能catch的捕获。万一问题处理不了呢?catch中继续throw抛出,但是只能将异常转换成RuntimeException子类抛出。

异常中常用的方法:

1、getMessage方法:返回该异常的详细信息字符串,即异常提示信息。

2、toString方法:返回该异常的名称与详细信息字符串。

3、printStackTrace:在(红字的方式)控制台输出该异常的名称与详细信息字符串、异常出现的代码位置。


package com.oracle.demo01;

public class Demo06 {
 public static void main(String[] args) throws Exception{
   int [] arr={};
   try{
     //可能会发生异常的语句
     int a=get(arr);
     System.out.println(a);
   }catch(Exception ex){//若存在父类Exception,必须写在最后面
     //getMessage()只打印异常信息
     //System.out.println(ex.getMessage());
     //toString()打印异常对象和异常信息
     //System.out.println(ex.toString());
     //以红字的方式打印异常对象、信息、位置
     ex.printStackTrace();
   }finally{
     //不管发不发生异常都会执行的语句
     System.out.println("finally执行了。");
   }
   System.out.println("程序没有结束!");
 }
 public static int get(int[] arr) throws ArrayIndexOutOfBoundsException ,NullPointerException {
   //若异常有一个定义为Exception,可以单写Exception。因为Exception是所有的父类
   if(arr==null){
     throw new NullPointerException("数组为空!");
   }
   if(arr.length==0){
     throw new ArrayIndexOutOfBoundsException("数组长度为0!");//都可以写Exception,因为Exception是所有的父类
   }
   int i=arr[arr.length-1];
   return i;
 }
}

来源:https://www.cnblogs.com/heitaitou/p/12898761.html

标签:Java,try,catch,finally,异常,处理
0
投稿

猜你喜欢

  • ShardingSphere解析SQL示例详解

    2023-11-23 13:57:55
  • Java创建线程的七种方法总结(全网最全面)

    2023-11-03 14:27:26
  • 关于activemq安装配置以及启动错误的解决

    2023-11-13 05:18:02
  • 详解C语言内核字符串拷贝与比较

    2023-11-02 15:22:30
  • 细谈java同步之JMM(Java Memory Model)

    2023-11-23 13:09:33
  • java selenium教程环境搭建基于Maven

    2023-11-27 01:35:38
  • IO中flush()函数的使用代码示例

    2023-11-27 03:49:00
  • Java 实现网络爬虫框架详细代码

    2021-12-11 05:15:43
  • 详解JAVA中static的作用

    2021-12-05 09:13:47
  • Springboot初始化项目并完成登入注册的全过程

    2023-07-31 15:09:09
  • SpringBoot ApplicationContext接口深入分析

    2021-10-21 23:00:03
  • Android 6.0动态权限申请教程

    2023-09-26 16:43:56
  • Java实现简单邮件发送功能

    2023-08-15 00:53:23
  • java poi导出图片到excel示例代码

    2023-10-30 00:13:17
  • java读取cvs文件并导入数据库

    2023-11-25 01:23:13
  • 浅谈java中OO的概念和设计原则(必看)

    2023-11-24 13:09:56
  • java实现哈弗曼编码与反编码实例分享(哈弗曼算法)

    2023-11-25 04:54:05
  • 解决mybatis-plus自动配置的mapper.xml与java接口映射问题

    2023-08-25 04:16:02
  • Java中SpringSecurity密码错误5次锁定用户的实现方法

    2021-07-10 10:38:17
  • Spring AOP底层原理及代理模式

    2023-05-05 14:19:38
  • asp之家 软件编程 m.aspxhome.com