Java 异常机制Exception和自定义异常

目录
  • 异常机制
  • 异常体系结构
  • 异常的捕获与抛出
  • 自定义异常

异常机制

异常:就是不符合实际需求,在实际中可能不存在也可能不满足实际,所以出现的问题称之为异常。

异常的三种类型:

  • 检查性异常:用户错误或问题引起的异常,是程序员无法预见的。例如打开一个不存在的文件,就会发生一个检查性异常。
  • 运行时异常:是可能被程序员避免的异常,与检查性异常相反,运行时异常可以在编译是被忽略。
  • 错误(ERROR):错误不是异常!错误是脱离了程序员的问题。一般不是程序员的问题。

异常体系结构

Java当中,万物皆对象,Java将异常当作对象来处理,定义了一个基类(父类),java.lang.Throwable作为异常的超类。 java中的异常分为两大类:错误(Error)和异常(Exception)。 错误: Error是由Java虚拟机产生并抛出的,大多数的错误与程序员是没有关系的。 多数情况是Java虚拟机运行错误(Virtual MachineError),Java虚拟机将会终止线程。 这些错误是不可查的,因为在程序的控制能力之外。 异常: 在异常(Exception)分支中有一个重要的子类RuntimeException(运行时异常);

  • ArrayIndexOutofBoundsException(数组下标越界异常)
  • ClassNotFoundException(找不到类异常)

等异常是不检查异常,程序可以选择捕获处理,也可以不处理。 这些异常通常是因为程序逻辑错误引起的,程序应该从逻辑角度尽可能的避免异常的发生。 错误(Error)与异常(Exception)的区别: Error通常是灾难性致命的错误,是程序无法控制和处理的,当出现这些异常时,Java虚拟机(JVM)会选择终止线程;Exception通常情况时可以被程序处理的,并且在程序中,尽可能的去处理和发现这些异常,这些异常通常是程序员的逻辑出现的问题。异常当中,RuntimeException(运行时异常),除此之外的异常统称为非运行时异常。注意的是错误就是错误,异常可以分为运行时异常和非运行时异常。

异常的捕获与抛出

  • 抛出异常
  • 捕获异常

异常处理的5个关键字:

  • try(尝试着去处理,试一试的意思)、catch(捕获)、finally(是否执行都会走到这个语句当中)、throw(抛出异常)、throws(抛出异常)。

捕获并抛出异常: 举例:数组下标越界异常处理: 

正如上图所示,并别有输出数组下标的元素,因为元素本身就不存在,产生异常,所以将异常进行捕获并进行了抛出。 值得注意的是在普通异常当中,可以不使用finally,但是try与catch是必须要的,必不可少的,finally在IO流当中可以明显的发现它的作用。比如说在Scanner当中,需要关闭用户输入(scanner.close()),那么finally就起到了很重要的作用。 值得注意的是异常的基类,Throwable是所有异常的父类

如下图所示: 

catch (Error e)中,括号里面的Error为想要捕获的异常类型,e为一个变量。 在Java当中可以捕获多个异常,Java中进行了提供,如下图所示(当程序中可能出现多个异常时): 下图中我们可以得到结果,该程序是一个异常,而不是一个错误!

下面的代码就好像一个循环,如果程序中可能将会出现多个异常,那么就可以在下面的语句中实现,切记的是异常基类可以放在最后。

try{
}catch(){
	System.out.println();
	}catch(){
	System.out.println();
	}finally{
}

下图中是捕获多个异常,但是将异常的基类放在了第一个,导致程序报错,所以后面的捕获失去了意义导致报错。所以异常的基类应该放在最后!

 注意:我们可以看到上图中出现报错,是因为异常的捕获需要从小到大,但是第一个直接就放了一个最大的基类,所以出现报错。如果说需要捕获多个异常,那么需要从小到大类捕获。 try-catch快捷键的使用:选中需要try的部分:ctrl+alt+T

如下图所示: 

 假如说程序出现异常,我们可以让程序运行结束或者说是退出: 

上面的括号中的数字,任意即可,表示程序异常时退出程序! 在异常当中,我们可以主动的去判断是否有异常,然后再进行抛出异常。

如下图(主动抛出异常): 

 异常的主动抛出一般在方法当中使用!如下图所示: 

如果我们知道会有异常,上面的方法又处理不掉异常,那么可以在方法上抛出异常。

如下图所示: 注意:在方法中抛出异常使用throw,但是在方法上使用throws!

在方法体中没有解决掉异常的抛出,在方法上抛出异常,抛出异常后如果不使用try-catch,那么程序就不会继续执行。使用try-catch后,程序仍然会继续执行。

使用try-catch时: 

 不使用try-catch时: 

自定义异常

使用Java内置的异常类可以描述在编程时出现的大部分异常,但是,用户还可以自定义异常。用户自定义异常类,只需要继承Exception。

自定义异常步骤如下:

  • 创建自定义的异常类;
  • 在方法当中通过throw关键字抛出异常对象;
  • 如果在当前抛出异常的方法当中处理异常,可以使用try-catch语句捕获并进行处理;否则在方法的声明语句当中通过throws关键字指明抛出给方法调用者的异常,继续执行下一步操作;
  • 在出现异常方法的调用者中捕获并处理异常。

自定义异常类的书写,在书写的过程当中,或许我们只知道需要继承Exception,但是当继承之后无法入手,我们可以通过看一下异常处理的一些方法,如下图所示: 第一步: 

 第二步:传入一个符合程序,不会抛出异常的值;

 第三步:打印一个不符合程序设定的值,抛出异常;

 总图: 1.抛出异常的图: 

 2.没有抛出异常的图: 

总结:

  • 运行时处理异常,采用逻辑合理规避,使用try-catch处理;
  • 尽可能的使用finally语句块去释放占用的资源;
  • 异常需要尽可能的去处理,不要简单的打印输出;
  • 对于潜在的异常,可以使用try-catch处理潜在的异常,还有不确定的代码可以使用try-catch进行规避;
  • 具体的如何去处理异常,根据不同的业务需求和异常情况去进行合理的异常。

到此这篇关于Java 异常机制Exception+自定义异常的文章就介绍到这了,更多相关Java Exception内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java.lang.ArrayStoreException异常的解决方案

    java.lang.ArrayStoreException异常 异常提示 java.lang.ArrayStoreException: java.lang.Boolean at java.util.stream.Nodes$FixedNodeBuilder.accept(Nodes.java:1222) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.Spliter

  • 详解Java的Exception异常机制

    一.前言 在Java中,我们在执行代码的过程中难免会遇到错误与Exception异常,可是我们一直都是锤头Coding而忽略了学习Exception这个东西!我们只是知道在发生Exception的地方让代码自动生成throw exception或者是使用try-catch括起来处理,那你了解Java的Exception吗?今天就让我们把一起来看看Java的Exception吧! 在Java中,我们的代码再出现错误的时候无非是两种情况:一是Error,一是异常Exception.如果是Error,

  • Java中java.lang.ClassCastException异常原因及解决方法

    通常我们在 OOP 设计中都会使用到继承. ​​但是在继承对象之间的强制转换可能会遇到​​java.lang.ClassCastException​​异常的错误. 错误的日志如下: 19:58:25.010 [http-nio-8080-exec-5] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw

  • Java NegativeArraySizeException异常解决方案

    问题描述:服务器接收后台返回的报文时,提示java.lang.NegativeArraySizeException 分析:这种异常返回的原因,一般情况下没有报文提示为返回空报文,初步分析是响应报文流长度出了问题 百度一下类似的情况:https://stackoverflow.com/questions/11207897/negative-array-size-exception 节选部分内容: try{ connection = (HttpConnection)Connector.open("h

  • java异常(Exception)处理机制详解

    一. 异常的定义 在<Java编程思想>中这样定义 异常:阻止当前方法或作用域继续执行的问题.虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常.绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败.之所以java要提出异常处理机制,就是要告诉开发人员,你的程序出现了不正常的情况,请注意. 记得当初学习java的时候,异常总是搞不太清楚,不知道这个异常是什么意思,为什么会有这个机制?但是随着知识的积累逐渐也对异常有一点感觉了.举一

  • Java 异常机制Exception和自定义异常

    目录 异常机制 异常体系结构 异常的捕获与抛出 自定义异常 异常机制 异常:就是不符合实际需求,在实际中可能不存在也可能不满足实际,所以出现的问题称之为异常. 异常的三种类型: 检查性异常:用户错误或问题引起的异常,是程序员无法预见的.例如打开一个不存在的文件,就会发生一个检查性异常. 运行时异常:是可能被程序员避免的异常,与检查性异常相反,运行时异常可以在编译是被忽略. 错误(ERROR):错误不是异常!错误是脱离了程序员的问题.一般不是程序员的问题. 异常体系结构 Java当中,万物皆对象,

  • Java异常(Exception)处理以及常见异常总结

    目录 前言 异常简介 异常类型 总结 前言 很多事件并非总是按照人们自己设计意愿顺利发展的,经常出现这样那样的异常情况.例如: 你计划周末郊游,计划从家里出发→到达目的→游泳→烧烤→回家.但天有不测风云,当你准备烧烤时候突然天降大雨,只能终止郊游提前回家."天降大雨"是一种异常情况,你的计划应该考虑到这样的情况,并且应该有处理这种异常的预案. 计算机程序的编写也需要考虑处理这些异常情况.异常(exception)是在运行程序时产生的一种异常情况,已经成为了衡量一门语言是否成熟的标准之一

  • 利用Java异常机制实现模拟借书系统

    本文介绍的是利用java语言实现一个控制台版的模拟借书系统,在开始本文的正式内容之前,我们先来了解一下Java异常机制. 什么是异常? 异常,不正常也.Exception是Exception event的缩写,因此异常是一个事件,该事件发生在程序运行时. 异常会影响程序的连续性,使程序中断.在Java中,一切皆对象,所以要定义异常,也需要使用对象.异常对象里 封装了异常类型和程序发生异常时的状态. 我们经常说的抛出异常就是创建异常对象,并提交给运行系统. 异常捕获机制与try-catch 当异常

  • 浅谈Java异常的Exception e中的egetMessage()和toString()方法的区别

    Exception e中e的getMessage()和toString()方法的区别: 示例代码1: public class TestInfo { private static String str =null; public static void main(String[] args) { System.out.println("test exception"); try { if(str.equals("name")){ System.out.println

  • java异常机制分析

    本文实例分析了Java的异常机制,分享给大家供大家参考.相信有助于大家提高大家Java程序异常处理能力.具体分析如下: 众所周知,java中的异常(Exception)机制很重要,程序难免会出错,异常机制可以捕获程序中的错误,用来提高程序的稳定性和健壮性. java中的异常分为Checked Exception(非Runtime Exception)和UnChecked Exception(Runtime Exception),所有的异常类都直接或间接的继承Exception.Exception

  • Java 常用类解析:java异常机制,异常栈,异常处理方式,异常链,异常丢失详解

    1.java标准异常概述 Throwable表示任何可以作为异常被抛出的类,有两个子类Error和Exception.从这两个类的源代码中可以看出,这两个类并没有添加新的方法,Throwable提供了所以方法的实现.Error表示编译时和系统错误.Exception是可以被抛出的异常类.RuntimeException继承自Exception(如NullPointerException),表示运行时异常,JVM会自动抛出. 2.自定义异常类 自定义异常类方法: 通过继承Throwable或Exc

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

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

  • 超详细讲解Java异常

    目录 一.Java异常架构与异常关键字 Java异常简介 Java异常架构 1.Throwable 2.Error(错误) 3.Exception(异常) 4.受检异常与非受检异常 Java异常关键字 二.Java异常处理 声明异常 抛出异常 捕获异常 如何选择异常类型 常见异常处理方式 1.直接抛出异常 2.封装异常再抛出 3.捕获异常 4.自定义异常 5.try-catch-finally 6.try-with-resource 三.Java异常常见面试题 1.Error 和 Excepti

  • Java异常简介和架构_动力节点Java学院整理

    Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机制. Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性.在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了"什么"被抛出,异常堆栈跟踪回答了"在哪"抛出,异常信息回答了"为什么"会抛出. Java异常机制用到的几个关键字:try.catch.finally.throw.thro

随机推荐