JAVA语言异常,Java语言中的异常

1、异常分类

从产生源头来看,Java语言中的异常可以分为两类:

JVM抛出的异常。比如:访问null引用会引发NullPointerException;0作为除数,如9/0,JVM会抛出ArithmeticException;内存消耗完,申请分配失败,JVM会抛出OutOfMemoryError。

注意:这些JVM的异常也可以在java代码中显式抛出(尽管我们很少这么做,基本也没有必要),如下例子中的代码可以正常编译。

public class Test {

public static void main(String []args){

String s = null;

if (s == null) {

throw new NullPointerException("Exception: s should not be null");

}

throw new OutOfMemoryError();

}

}

除了JVM的异常,其他异常都是程序引起的,是程序中显式通过throw语句抛出的。

比如,在Long.parseLong(String s, int radix)的源码中包含如下代码:

if (s == null) {

throw new NumberFormatException("null");

}

也就是说,方法会抛出NumberFormatException异常。

一般情况下,jvm异常是由jvm抛出的,不会被开发者显式抛出。当然,也可以在程序中通过throw语句显式抛出jvm异常。如下:

if (s == null) {

throw new NullPointerException(“s can not be null”);

}

所有的jvm异常都是unchecked,而程序中的异常则unchecked和checked都有。

2、异常类的继承层次

Java语言中的类继承层次如下图:

f083c46d424e

Java异常层次

Throwable有两个子类Exception和Error。其中:

Exception是和应用相关的,NullPointerException出现在当试图访问空对象的时候,ClassCastException出现在试图转换不兼容的类型时。可以通过try catch语句捕获Exception之后处理,可以让程序恢复运行。

Error是和应用运行的环境相关的,比如OutOfMemoryError出现在jvm内存耗尽的时候、StackOverflowError出现在栈溢出的时候。正因为如此,程序基本不可能在Error发生时恢复,所以,Error不能被try catch语句处理。

从这个图中可以看出,类也分为Checked异常和Unchecked异常。

Checked异常是java编译器强制处理的异常,必须通过try catch语句捕获,或者通过throws语句抛出。如果显式不处理,就会编译报错。比如网络连接失败的时候,会抛出IOException,程序应该提前预料并对这个异常做出恰当的处理,比如在网络中断时重新传输文件,这样程序才不会因为异常终止运行,崩溃挂掉。

Unchecked异常通常是开发者代码逻辑错误造成的:如NullPointerException(通常在程序设计时通过检查引用是否为空避免);如一些是java.lang.Error的子类,在任何一个实例对象创建的时候都有可能发生OutOfMemoryError(但是,我们不可能在每一个创建对象实例的地方都用try catch捕获这个异常,因为这个异常是unchecked,在实际编程中也无需这么做)。通常来说,unchecked异常是无法预料,编译器无法检测的异常。

3、checked和unchecked异常

自定义的异常是checked,还是unchecked取决于继承的父类是checked异常,还是unchecked异常。

try catch块中catch的checked异常,必须在try块中有出现这种异常的可能性,不然编译不通过。但是,Throwable和Exception这两个类有些特殊,尽管他们是checked异常,不过,即使在try块中没有出现该异常的可能性,依然可以捕获它们。因为他们都有unchecked异常子类(如RuntimeException),编译器不检查unchecked异常,也就允许这样捕获unchecked异常。

参考资料

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

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

相关文章

使用Mybatis Generator结合Ant脚本快速自动生成Model、Mapper等文件的方法

新建generatorConfig.xml和build_mybatis.xml&#xff1a; jar下载 <dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.2</version></dependency> <depe…

STM32启动解析

启动方式对的不同下载模式 STM32可以通过BOOT引脚的配置&#xff0c;来选择不同的启动模式------对应不同的下载方式。 仿真器下载—— 内部FLASH的启动方式 串口下载 —— 系统存储器的启动方式 内部SRAM一般不用&#xff0c;不讲 启动过程 以内部FLASH的启动方式为例&am…

自动化部署kvm虚拟机_自动化虚拟助手

自动化部署kvm虚拟机The automated virtual assistant or commonly called personal assistants, are developed to serve its users by performing some tasks, setting reminders and much more based on the input is given and local awareness. It is integrated with a l…

php 数据库编码,php怎么设置数据库编码方式

在php中&#xff0c;可以使用mysql_query()函数来设置mysql数据库的编码方式&#xff1b;具体方法&#xff1a;在mysql_connect()语句之后添加“mysql_query("set names 编码方式");”代码即可。本教程操作环境&#xff1a;windows7系统、PHP7.1版&#xff0c;DELL G…

mysql截取字符串与reverse函数

mysql的函数大全&#xff1a; http://www.jb51.net/Special/606.htm 这个网页上很多知识点&#xff0c;可以学习下&#xff0c;关于mysql的函数&#xff0c;也可以作为API查询&#xff1a; 这里只说下mysql的截取函数和reverse函数&#xff1a; MySQL 字符串截取函数&#xff1…

flask sql外键使用_如何在SQL中使用外键?

flask sql外键使用Basically, Foreign Key represents relationship between tables. 基本上&#xff0c; 外键代表表之间的关系 。 Syntax: 句法&#xff1a; column-name data_type (size) CONSTRAINT constraint-name References Table-name (Column-name)Example: 例&a…

合并排序算法排序过程_外部合并排序算法

合并排序算法排序过程外部分类 (External sorting) External sorting is a technique in which the data is stored on the secondary memory, in which part by part data is loaded into the main memory and then sorting can be done over there. Then this sorted data wi…

php榛子云短信验证,java + maven +榛子云短信 实现发送短信验证码功能

如何使用java maven的项目环境发送短信验证码&#xff0c;本文使用的是榛子云短信的接口。下载下来是jar文件&#xff0c;需要将jar发布到本地的maven仓库中&#xff0c; 在cmd环境下输入:mvn install:install-file -DgroupIdcom.zhenzi -DartifactIdsms -Dversion1.0.0 -Dpac…

django css_在应用程序上实现CSS Django的

django cssCSS (Cascade Style Sheets) are used to implement design. CSS(级联样式表)用于实现设计。 Step 1: Create a Sandbox, Activate it, Install Django and Create Sample Project 步骤1&#xff1a;创建一个沙箱&#xff0c;将其激活&#xff0c;安装Django并创建示…

vb mysql 表格显示,在VB中编辑数据库和电子表格

在VB50中有很多功能强大的控件&#xff0c;其中数据控件与一些绑定控件(如文本框&#xff0c;图片框及 ActiveX控件)的相互协作&#xff0c;能够方便地实现对各种数据库记录、表格乃至电子表格的浏览和编辑操作。下面介绍实例&#xff0c;其中数据控件用于记录的浏览、移动、…

[转]Visual Studio 各版本下载

原文地址&#xff1a;[置顶] Visual Studio 各版本下载 文件名称文件大小百度网盘下载微软官方下载Visual Studio 2015 Enterprise - 企业版 - 简体中文3.89GBhttp://pan.baidu.com/s/1bnAY68Bvs2015.ent_chs.isoVisual Studio 2015 Professional - 专业版 - 简体中文3.84GBht…

oracle 列级外键,Oracle外键列上是否需要索引?

外键列上缺少索引会带来两个问题&#xff0c;限制并发性、影响性能。而这两个问题中的任意一个都可能会造成严重性能问题。 无论是Or外键列上缺少索引会带来两个问题&#xff0c;限制并发性、影响性能。而这两个问题中的任意一个都可能会造成严重性能问题。无论是Oracle的官方文…

python 改变词典顺序_按词典顺序排列的功率集

python 改变词典顺序Description: 描述&#xff1a; This is a standard interview problem to find out the power sets in lexicographic order of a given set of numbers using backtracking. 这是一个标准的面试问题&#xff0c;它使用回溯来按给定数字集的字典顺序查找能…

springJdbc in 查询,Spring namedParameterJdbcTemplate in查询

springJdbc in 查询&#xff0c;Spring namedParameterJdbcTemplate in查询&#xff0c; SpringJdbc命名参数in查询&#xff0c;namedParameterJdbcTemplate in查询 >>>>>>>>>>>>>>>>>>>>>>>>>>…

python 添加图例_Python | 在图例标签中添加Sigma

python 添加图例Sigma (&#x1d70e;) is very often used greek mathematical letters and has a higher repetition in probability. In this article, we are going to add &#x1d70e; using a command in matplotlib. Sigma(&#x1d70e;)是希腊数学字母中经常使用的字…

java多线程总结(二)

线程一般有6个状态&#xff1a; 新建状态&#xff1a;NEW 可运行状态&#xff1a;RUNNABLE 休眠状态&#xff1a;TIMED_WAITING 等待状态&#xff1a;WAITING 阻塞状态:BLOCKED 终止状态“TERMINATED 当我们使用new创建线程之后&#xff0c;线程处于新建状态&#xff0c;当调用…

韩顺平.2011最新版.玩转oracle视频教程笔记,韩顺平.2011最新版.玩转oracle视频教程(笔记)...

韩顺平.2011最新版.玩转oracle视频教程ORA-01045: user XIAOMING lacks CREATE SESSION privilege; logon denied 警告: 您不再连接到 ORACLE。 SQL> show user; USER 为 ""SQL> conn system/p; 已连接。SQL> grant connect to xiaoming; 授权成功。SQL>…

ansys 内聚力_内聚力 软件工程

ansys 内聚力凝聚 (Cohesion) In general terms, the word cohesion means the action or act of forming a united whole. According to the definition of Cambridge University, cohesion is defined as "the state of sticking together, or being in close agreement…

oracle认证都需要考哪几个方面,Oracle OCP认证要通过哪些考试

Oracle OCP认证要通过哪些考试Oracle OCP DBA认证是所有Oracle认证中最普及的一种认证&#xff0c;这一认证过程是专为那些想要从事Oracle管理的专业数据库管理人员设计的&#xff0c;适用于Oracle9I DBAs的OCP认证通过改进&#xff0c;删除了备份和恢复以及网络考试&#xff0…

Android ImageButton示例代码

1) XML File: activity_main 1)XML文件&#xff1a;activity_main <?xml version"1.0" encoding"utf-8"?><android.support.constraint.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"…