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

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;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java中使用try-catch-finally一些值得注意的事(必看)

    我们知道,try负责圈定可能会出异常的代码:catch负责处理try中可能异常的处理,如记录错误日志,使业务能够正常运行:finally负责资源释放等善后工作,无论有无异常都必须要执行的代码,一般都是放在finally中的.如果catch和finally也会出现异常,那么会是什么效果呢? try { // java.lang.ArithmeticException int a = 1 / 0; } catch (Exception e) { System.out.println("catch&q

  • JavaWeb项目打开网页出现Session Error的异常解决方案

    这篇文章主要介绍了JavaWeb项目打开网页出现Session Error的异常解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 找到web.xml配置的原始配置的位置: <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class&g

  • Java程序常见异常及处理汇总

    一.JDK中常见的异常情况 1.常见异常总结图 2.java中异常分类 Throwable类有两个直接子类: (1)Exception:出现的问题是可以被捕获的 (2)Error:系统错误,通常由JVM处理 3.被捕获的异常分类 (1)Check异常: 派生自Exception的异常类,必须被捕获或再次声明抛出 (2)Runtime异常:派生自RuntimeException的异常类.使用throw语句可以随时抛出这种异常对象 throw new ArithmeticException(-);

  • 简单谈谈java的异常处理(Try Catch Finally)

    异常的英文单词是exception,字面翻译就是"意外.例外"的意思,也就是非正常情况.事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误. 一 前言 java异常处理大家都不陌生,总的来说有下面两点: 1.抛出异常:throw exception class SimpleException{ public void a() throws Exception{ throw new Exception(); }; } 2.捕获异常: public class MyExcepti

  • Java异常处理之try...catch...finally详解

    异常处理机制已经成为判断一门编程语言是否成熟的标准之一,其对代码的健壮性有很大影响.一直以来异常处理使用不是很得心应手,今天对异常进行了较为深入的学习,这篇主要是对try-catch-finally的一个总结. 一.java继承体系 Java语言为异常处理提供了丰富的异常类,这些类之间有严格的继承关系.如图: 从图中我们可以看出,所有的类都是继承于Throwable这个父类,java将所有的非正常情况分为两种:Error(错误)和Exception(异常),Error错误一般是于虚拟机相关的问题

  • 谈谈Java中try-catch-finally中的return语句

    我们知道return语句用在某一个方法中,一是用于返回函数的执行结果,二是用于返回值为void类型的函数中,仅仅是一个return语句(return ;),此时用于结束方法的执行,也即此return后的语句将不会被执行,当然,这种情况下return语句后不能再有其它的语句了. 在try-catch-finally语句中使用return语句遇到了一些疑问 代码一: static int intc(){ int x =0; try{ x=1; return x; }finally { x = 3;

  • Java 异常java.lang.NoSuchFieldException解决方案

    这篇文章主要介绍了Java 异常java.lang.NoSuchFieldException解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 异常描述:java.lang.NoSuchFieldException: 处理方式:将属性修改为public 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们.

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

    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);

  • Java开发过程中关于异常处理的详解

    1.运行java时,出现了异常: 我这里是因为:arr[3]不存在: java.lang.ArrayIndexOutOfBoundsException: 3 public class btyf { public static void main(String[] args){ int[] arr={1,2,3}; System.out.println(arr[0]); System.out.println(arr[3]); System.out.println(arr[1]); //1 异常 A

  • Java try-catch-finally异常处理机制详解

    Java中的try-catch-finally异常处理 一.异常处理 异常(Exception):是在运行发生的不正常情况. 原始异常处理: if(条件) { 处理办法1 处理办法2 处理办法3 } if(条件) { 处理办法4 处理办法5 处理办法6 } 代码阅读性差,臃肿不堪,与正常流程代码结合的很紧密,所以,在JAVA中进行一系列的改良,将一系列常见的问题,用面向对象的思考方式,对其进行了描述.封装. class 处理办法 { 处理办法1() { 举例1 } 处理办法2() { 举例2 }

  • Java异常处理实例详解

    1. 异常例子 class TestTryCatch { public static void main(String[] args){ int arr[] = new int[5]; arr[7] = 10; System.out.println("end!!!"); } } 输出:(越界) Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7 at TestTryCatch.

  • Java SpringMVC拦截器与异常处理机制详解分析

    目录 拦截器(interceptor)的作用 拦截器快速入门 案例:用户登录权限控制 拦截器方法说明 SpringMVC异常处理 异常处理的思路 异常处理两种方式 拦截器(interceptor)的作用 Spring MVC的拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. 将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain).在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用.拦截器也是AOP思

  • java异步编程CompletableFuture使用示例详解

    目录 一.简单介绍 二.常见操作 1.使用默认线程池 2.使用自定义线程池 3.获取线程的执行结果 三.处理异步结算的结果 四.异常处理 五.组合 CompletableFuture 六.并行运行多个 CompletableFuture 七.案例 1.从多个平台获取书价格 2.从任意一个平台获取结果就返回 一.简单介绍 CompletableFuture 同时实现了 Future 和 CompletionStage 接口. public class CompletableFuture<T> i

  • 基于java涉及父子类的异常详解

    java中的异常涉及到父子类的问题,可以归纳为一句话:子类的构造函数抛出的异常必须包含父类的异常,子类的方法可以选择抛出"范围小于等于"父类的异常或不抛出异常. 1. 为什么构造函数必须抛出包含父类的异常? 在<thingking in java>中有这么一段话: 异常限制:当覆盖方法时,只能抛出在基类方法的异常说明中列出的那些异常 异常限制对构造器不起作用,你会发现StormyInning的构造器可以抛出任何异常,而不必理会基类构造函数所抛出的异常.然而因为必须构造函数必

  • java-流的使用完结与异常处理机制(详解)

    1.1 java.io.objectInputStream 对象输入流:用于将一组字节(通过对象输出流写出对象而转换的一组字节)读取并转换为对应的对象.对象输出流将对象写出时转换为一组字节的过程,称为:对象序列化对象输入流将这组字节读取并还原会对象的过程,称为:对象反序列化 1.2 java.io.Serializable Serializable序列化接口 当一个类实现了Serializable接口后,应当在当前类中添加一个常量: 序列化版本号serialVersionUID 序列化版本号若不

  • Java编程Retry重试机制实例详解

    本文研究的主要是Java编程Retry重试机制实例详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下 1.业务场景 应用中需要实现一个功能: 需要将数据上传到远程存储服务,同时在返回处理成功情况下做其他操作.这个功能不复杂,分为两个步骤:第一步调用远程的Rest服务逻辑包装给处理方法返回处理结果:第二步拿到第一步结果或者捕捉异常,如果出现错误或异常实现重试上传逻辑,否则继续逻辑操作. 2.常规解决方案演化 1)try-catch-redo简单重试模式: 包装正

  • java 异常捕获及处理案例详解

    目录 一.Java异常简介 二.Java异常的分类 三.异常的使用及执行流程 四.自定义异常 一.Java异常简介 什么是异常? 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止.在Java中即,Java在编译或运行或者运行过程中出现的错误. Java提供了更加优秀的解决办法:异常处理机制. 异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持

随机推荐