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…

钢铁侠java_现代版“钢铁侠”,无所不能的程序员,java工程师实现人造器官!...

一位名叫利亚姆泽贝迪(Liam Zebedee)的软件工程师已经厌倦了糖尿病患者的生活挑战,因此他决定入侵他的胰岛素泵,并将其转变成一种崭新的高科技胰腺胰腺。Zebedee详细介绍了查找和订购零件的过程,为智能胰岛素泵编写软件的代码以及在其博客中组…

Windows下的Memcache安装 (转)

Windows下的Memcache安装:1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached2. 在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装3. 再输入: ‘c:\memca…

C#中实现js中的eval函数功能

在js中有eval函数,比如 eval(‘33*4’)结果为15; 但C#中想要完成这样的功能,却没有相应的函数,可以用sql语句的方式实现,比如,执行 select 33*4 的方式。 可以先构造公式 Formula …

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

查看照片的指定位置的像素点值,并在照片中绘制一条指定像素的线段 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…

大数据和云计算涉及的技术_云计算涉及的风险

大数据和云计算涉及的技术In todays life using of cloud is very common among people, we use different clouds like Google cloud, cloud Azure etc. to store our photos, Videos, documents, data etc. to save space as well as we think that we will be able to retri…

int 转interger java_Java中Integer和int之间的转换

int到Integer:int a3;Integer Anew Integer(a);或:Integer AInteger.valueOf(a);Integer到int:Integer Anew Integer(5);int aA.intValue();至于Integer.parseInt(String str)则是将String类型转为int类型。int类型是放在栈空间的,Integer是作为对象放在堆空间的;in…

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

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

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

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

题目53:Goldbach's Conjecture

http://ac.jobdu.com/problem.php?cid1040&pid52 题目描述:Goldbachs Conjecture: For any even number n greater than or equal to 4, there exists at least one pair of prime numbers p1 and p2 such that n p1 p2. This conjecture has not been prov…

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

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

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

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

goroutine并发扫描MySQL表_goroutine 并发之搜索文件内容

golang并发编程 - 例子解析February 26, 2013最近在看《Programming in Go》, 其中关于并发编程写得很不错, 受益非浅, 其中有一些例子是需要多思考才能想明白的, 所以我打算记录下来, 强化一下思路《Programming in Go》在 Chapter 7. Concurrent Programming 里面一共用3个例…

软件开发模型和软件过程模型_什么是软件和软件过程?

软件开发模型和软件过程模型软件 (Software) Software is a set of instructions which instructs the computer for performing different operations. Software is nothing else but a general name for computer programs. 软件是一组指令,指导计算机执行不同的操…

甲骨文CEO埃里森称将在Sun裁员1000人

据国外网站报道,甲骨文CEO拉利埃里森周三表示,在完成对Sun的收购后,将对该公司裁员1000人。不过他同时也表示,未来几个月还要新雇2000人加强Sun的业务。 分析师们曾预测甲骨文完成收购后,将在Sun大裁员。不过埃里森和甲…

改变Jupyter的默认项目路径

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

arm-linux-gcc/ld/objcopy/objdump使用总结[zz]

地址:http://hi.baidu.com/xiaoyue1800/item/a11a2c4a26da4b04c11613d9arm-linux工具的功能如下:arm-linux-addr2line 把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给…