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
猜你喜欢
- @RequestBody出现400 Bad Request的问题今天与同事调试一个接口,发现后台使用@RequestBody老是获取不到数据
- Mybatis有什么用前两天跟阿里的大牛聊天,他讲到对于性能要求高,需求变化多的互联网项目来说,用在sql优化上的开发时间是大头,有时候代码
- 前言博主上个礼拜,已经实现了quarkus的native image应用的上线,经过两天的监控下来,一切运行指标良好,就是内存升到了100M
- 一、方法这里我们用两种方法来实现跑马灯效果,虽然实质上是一种实质就是:1、TextView调出跑马灯效果2、TextView获取焦点&nbs
- 参考答案java.sql.Date 是 java.util.Date 的子类java.util.Date 是 JDK 中的日期类,精确到时、
- 概述日常工作中,我们经常会有发送 HTTP 网络请求的需求,概括下我们常见的发送 HTTP 请求的需求内容:可以发送基本的 GET/POST
- 井字棋游戏要求在3乘3棋盘上,每行都相同或者每列都相同再或者对角线相同,则胜出.因此我们可以使用一个二维数组来表示棋盘,判断胜负只需要判断数
- 建造者模式概述建造者模式(Builder Pattern)属于创建型模式。它是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同
- 本章目标整合 Mybatis ,并集成 Druid 数据源可视化监控 Druid 数据源使用 JPA 生成数据表利用注解实现数据库的事物利用
- 在 Java 中,LinkedList 和 ArrayList 的性能是不同的,具体取决于你所需要的操作。对于频繁的插入和删除操作,Link
- 本文实例讲述了java识别一篇文章中某单词出现个数的方法。分享给大家供大家参考。具体如下:1. java代码:import java.io.
- 一 前言redis在分布式应用十分广泛,本篇文章也是互联网面试的重点内容,读者至少需要知道为什么需要分布式锁,分布式锁的实现原理,分布式锁的
- 前言现在很多web应用,做过web项目的童鞋都知道,web结果由html+js+css组成,html结构都有一定的规范,数据动态交互可以通过
- 如下所示:package com.unionx.wanxue; import java.util.Map; import java.util
- spring容器是负责实例化、配置、组装组件的容器。容器的配置有很多,常用的是xml、Java注解和Java代码。在spring中Ioc容器
- 什么是继承面向对象的特征:封装:不必要公开的数据成员和方法,使用private关键字进行修饰。意义:安全性。背景代码中创建的类, 主要是为了
- 这一篇我们说说Java线程Thread的interrupt中断机制。中断线程线程的thread.interrupt()方法是中断线程,将会设
- 首先说说什么叫回调函数?在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口
- Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架。 Struts2不只是Struts1下一个版本,它是一个完全重写的Str
- EntityWrapper的in用法EntityWrapper<UserLife> wrapper = new EntityWr