java异常体系_JAVA异常体系结构详解

一、什么是异常

异常:程序在运行过程中发生由于硬件设备问题、软件设计错误等导致的程序异常事件。(在Java等面向对象的编程语言中)异常本身是一个对象,产生异常就是产生了一个异常对象。      ——百度百科

二、异常体系

Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。 在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception。   其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常,  这两种异常有很大的区别,也称之为非受检查异常(Unchecked Exception)

和受检查异常(Checked Exception)。

Java异常体系结构如图 所示:

acab23679483aa4ed1562fe41eb86226.png

1、Error与Exception

Errorr往往是很严重的错误,是程序无法处理的异常,可以捕获但是最好不要捕获,因为捕获了也解决不了,这个不是由程序产出的,底层出现问题就让他它挂了吧,比如内存溢出(OutOfMemoryError)、线程死亡(ThreadDeath)等。这些异常发生时,  Java虚拟机(JVM)一般会选择线程终止。

下图为程序模拟的内存溢出情景:

1f1c39cb4892ea72d8fd28c7cd346440.png

Exception是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。 程序中应当尽可能去处理这些异常。

2、运行时异常和非运行时异常

运行时异常都是RuntimeException类及其子类异常,常见的异常有:空指针异常(NullPointerException)、下标越界异常(IndexOutOfBoundsException)、算术异常(ArithmaticException)、类型转换异常(ClassCastException)  等,这些异常一般是由程序逻辑错误引起的,  程序应该从逻辑角度尽可能避免这类异常的发生。

下面将模拟这几个运行时异常发生的场景:

1)数组下标越界异常

8ec99c05aac697c839b7fe5182b0572f.png

以数组下标越界异常为例分析发生的现象,在程序运行时,JVM能够检测到没有a[3]这个索引,当检测到数组下标越界异常后,JVM做了两件事:

1创建出异常对象  new ArrayIndexOutOfBoundsException(3);

2将异常对象抛出,抛给它的调用者。注:一旦异常被抛出,后面的程序就不再执行。

当它的调用者没有对异常进行处理时,它的调用者继续将异常向上抛出。以此类推,当main接收到这个异常也没有对数组下标越界异常进行处理时,main就将异常抛给了JVM,JVM收到异常信息后又做了两件事:

1将异常信息以红色字体输出到控制台上;

2停止程序的运行。

2)空指针异常

4386f0e8a0912e575fd359fb64533cfd.png

3)算数异常 除数为0

790f9457fcdb8dab1d0337b9d3b7c074.png

4)类型转换异常

83b542898af12a6974df671d2e5a6bb6.png

非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。

从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过,如IO异常(IOException)、SQL(SQLException)等以及用户自定义的Exception异常。

下图显示的是IOException中的FileNotFoundException:

167d83486fba4d879680e0c333a66d54.png

总结

以上所述是小编给大家介绍的JAVA异常体系结构详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对照片质量进行压缩

对照片质量进行压缩 其实无论是jpg还是png都是已经压缩编码化的格式罢了,原图片的大小要远远大于压缩编码后的格式 1,像素:图片放大到一定程度之后的一个个的小方块 2,RGB:每一个像素(小方块)都…

Silverlight访问 Apache服务器(Tomcat,Geronimo)中部署的Webservice

Silverlight 访问 Apache服务器中的Webservice 开发环境 Vs2010 、 Silverlight4 、 Java Jdk1.6 U 21 、 Apache-tomcat-6.0.20 、 Myeclipse8.5 、 Apache-ant-1.8.1 、 Axis2 、 Geronimo-tomcat6-javaee5-2.2. 下载地址: Apache-tomcat : http://apa…

那些帮助你成为优秀前端工程师的讲座——《性能篇》

这篇文章是前端优秀讲座和讨论列表系列连载第七篇,介绍前端性能优化技巧。前端领域发展迅速,只有时刻掌握前端发展趋势和技术动态,学习前沿的开发思想和理念才能让自己跟上时代的步伐,保持自己的技术优势。 您可能感兴趣的相关文章…

mca终端_MCA的完整形式是什么?

mca终端1)MCA:计算机应用硕士 (1) MCA: Master of Computer Application) MCA is an abbreviation of Master of Computer Application. It is a masters degree program for post-graduation in Computer applications. This post-graduate course duration is abo…

查看照片的指定位置的像素点值,并在照片中绘制一条指定像素颜色的线段

查看照片的指定位置的像素点值,并在照片中绘制一条指定像素的线段 import cv2 img cv2.imread(E:\Python-workspace\OpenCV\yanyu/beyond.png,1)#1为彩色图片,0为灰度图片 (b,g,r) img[20,20]#取照片的(20,20)处的像素点,左上角为(0,0)&am…

图像分割-二阶导数零交叉点的含义

已知: 二阶导数在灰度斜坡和灰度台阶过渡处会产生双边缘响应。 二阶导数的符号可以用于确定边缘的过渡是从亮到暗还是暗到亮。 斜坡开始处,二阶导数为负,斜坡结束二阶导数为正,斜坡上,二阶导数为0.(亮到暗…

采购子系统-流程图、表结构、内容简介

设计说明: 流程图: 表结构: -- {*******************************************************} -- { } -- { GSP } -- { …

Anaconda下安装TensorFlow和OpenCV(都是心血呀~)

从国庆放假到现在的6号,我整整搞了将近五天多。安装个TensorFlow和OpenCV不下五次,各种问题各种解决,下载后卸载,卸载后下载,我快吐了啊这个国庆,但是最终还是达到了自己的目标(我太难了&#x…

图像分割-基本边缘检测roberts,prewitt,sobel,canny,laplace

执行边缘检测的三个基本步骤: 1、为降噪对图像进行平滑处理。(导数对噪声具有敏感性。图像的正负分量检测困难) 2、边缘点的检测。(提取边缘点的潜在候选者) 3、边缘定位。(从候选者中选出真是边缘点成员&a…

改变Jupyter的默认项目路径

开始接触Jupyter,看见它默认的工作路径是C盘,很难受想换下工作空间路径 管理员身份打开你的Anaconda Prompt 输入jupyter notebook --generate-config,找到你的配置文件位置 修改一下路径即可 一般情况到这一步就已经修改成功了&#xff…

图像分割-LOG检测器和DOG检测器

边缘检测是以较小的算子为基础的,具有两个建议 1、灰度变化与图像尺寸无关,因此检测要求使用不同尺寸的算子。 2、灰度的突然变化会在一阶导数产生波峰波谷,在二阶导数产生零交叉 大的算子检测模糊边缘,小的算子检测锐度集中的细节…

C++——统计多行单个字符类型个数

键盘输入n个字符,请分别统计大写字母、小写字母、数字、其他字符的个数并输出;还需要输出所有数字字符之和 【输入形式】 第一行为一个整数n(100 > n > 0),接下来n行每行一个字符 【输出形式】 输出第1行为4个整数,分别…

C++——已知a+b、 a+c、b+c、 a+b+c,求a、b、 c

有三个非负整数a、b、 C,现按随机顺序给出它们的两两和以及总和4个整数,即ab、 ac、bc、 abc, 注意,给出的4个数的顺序是随机的,请根据这四个数求出a、b、c是多少? [输入形式] 输入为一-行4个正整数, x1、 x2、x3、 x4 (0≤xi≤10^9) ,表示…

表示和描述-边界追踪

边界追踪目标: 输入:某一区域的点 输出:这一区域的点的坐标序列(顺时针或逆时针) Moore边界追踪法: 两个前提条件: 1、图像为二值化后的图像(目标为1,背景为0&#xff0…

图像分割-边缘连接

三种基本方法: 1:局部处理 2:区域处理 3:使用霍夫变换的全局处理 局部处理 根据预定的规则,将所有相似点连接起来。 用于确定边缘像素相似性的两个主要性质:1、梯度向量的幅度2、梯度向量的角度 由于要…

02-对图像进行边界填充

import cv2 import matplotlib.pyplot as pltimg2 cv2.imread("E:\Jupyter_workspace\study\data/cat.png")#读取照片,第二个参数若为0,则灰度图;若不填或者1则彩色图或本身图top_size,bottom_size,left_size,right_size (50,50,…

Windows Phone 7独立存储空间IsolatedStorage

Windows Phone 7的solatedStorage可以用来保存应用程序的数据和设置。结构图如下 一、相关类 1.IsolatedStorageFile类 1)描述:表示在独立存储空间中的文件和目录。 2)重要属性 long AvailableFreeSpace:IsolatedStorage有效的剩余…

图像分割-阈值处理详解(迭代法、Otsu法、平滑改善法、边缘改进法、分块处理法、局部特性法、移动平均法)

博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 阈值处理详解基础:基于全局的阈值处理1迭代算法(最小概率误…

java 用户控件_C#自定义控件VS用户控件

C#中自定义控件VS用户控件大比拼1 自定义控件与用户控件区别WinForm中,用户控件(User Control):继承自 UserControl,主要用于开发 Container 控件,Container控件可以添加其他Controls控件自定义控件(Custom Control):继…