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


猜你喜欢
- 方法一,修改gradle.properties文件,增加一句gradle.user.home=D\:\\Android\\.gradle但这
- 之前我一直认为 Mybatis 框架下已经实现预编译机制,很多东西都封装好了,应该基本上不会再有 SQL 注入问题了。近期在渗透中发现,在实
- Plugins摘一段来自MyBatis官方文档的文字。MyBatis允许你在某一点拦截已映射语句执行的调用。默认情况下,MyBatis允许使
- 有段时间没有看视频了,昨天晚上抽了点空时间,又看了下鸿洋大神的视频教程,又抽时间写了个学习记录。代码和老师讲的基本一样,网上也有很多相同的博
- 对于数据的访问来说,肯定是在有缓存的情况下运行快一些。对于Hibernate这种与数据库结合紧密的框架来说,在调用数据的时候肯定会有缓存的出
- 因为gradle大幅升级至5 , as gradle plugin升级至3.6, 导致一些旧的项目基本重新编译时会出现各
- 想要在Ubuntu上运行java程序,可以将java程序编译成功后打包,然后在Ubuntu上用命令执行jar文件具体操作如下:1、Windo
- 本文实例讲述了C#使用foreach语句简单遍历数组的方法。分享给大家供大家参考。具体如下:using System;public clas
- 前言碎语今天博主安利一个国产开源的无服务器容器云平台,关注它已经有一年多了,虽然其迭代到现在很多功能还是一直处于测试验证中,但是其设计理念以
- 本文实例讲述了C#常用目录文件操作类。分享给大家供大家参考。具体分析如下:这个c#类封装了常用的目录操作,包括列出目录下的文件、检测目录是否
- Java及数据库对日期进行格式化Java对日期进行格式化可使用java.text.SimpleDateFormat示例package com
- 废话不多说了,直接给大家贴代码了,具体代码如下所示:public ActionResult Upload() {
- 前言WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏
- 在日常的开发中、我们都知道,Java的内存清理是通过垃圾回收器进行的,那么其是如何将没用的对象被被清理掉的呢?Java 语言的内存自动回收称
- 给新建的winform程序添加资源文件夹Resources小菜鸟开始学习WinForm程序别人的项目都有资源文件夹放图片之类的,我的就是没有
- 一、导航栏UINavigationBar1、导航栏的使用在iOS开发中,我们通常会使用导航控制器,导航控制器中封装了一个UINavigati
- 这里的万年历制作主要用到了Calendar类和GregorianCalendar类,我们先来回顾一下基础知识:基础部分一、Cal
- Swing组件中的事件处理专门用于响应用户的操作,例如,响应用户的鼠标单击、按下键盘等操作。在Swing事件处理的过程中,主要涉及三类对象:
- 一、概述1.1 什么是Java工厂模式Java工厂模式是一种创建对象的设计模式,它提供了一种方法,通过该方法可以在不暴露对象创建逻辑的情况下
- 针对最近练习项目时出现的乱码问题 -- tomcat编码出现的问题问题出现原因:web.xml中已经加了中文过滤器和json数据转换器,但依