当前位置: 首页 > 编程日记 > 正文

运行时异常 检查时异常

Throwable是Java程序中所有异常对象的根基类,而Throwable是从Object类直接继承来的,
Throwable可分为error(错误)和 Exception(异常)。error表示的是JDK出了问题,与写的代码无关;而Exception是指程序本身出了问题,可以通过修改代码进行修复。

其中Exception又包含两大子类:RuntimeException(运行时异常)和Checked Exceptions(检查时异常)
我在网上看到一张图片,在这里分享一下,有助于理解Throwable:
Throwable
通常异常会导致异常一下的语句无法再执行,例如:

public class Test{public static void main(String[] args) {int age = 20;System.out.println(age);//可以执行System.out.println(1/0);//异常System.out.println(age);//不可以执行}
} 
输出结果:
20
Exception in thread "main" java.lang.ArithmeticException: / by zeroat com.jd.test1.Test1.main(Test1.java:9)

上面的这个异常就属于算数异常(ArithmeticException),而算数异常就属于RuntimeException中的一种。那我们如何区分RuntimeException(运行时异常)和Checked Exceptions(检查时异常)呢?
有两种方法:

  • 一种是通过父类区分,如果该异常类型直接或间接的继承了RuntimeException,则该异常就为运行时异常,否则就为检查时异常;
  • 另一种是通过是否需要进行显式处理来区分:不需要进行显式处理的就为运行时异常,必须进行显式处理的就为检查时异常,让我们来举个例子:
public class Test{public static void main(String[] args) {System.out.println(1/0);//无需显式处理,因此为运行时异常//ArithmeticException,继承了RuntimeException,因此为运行时异常try {Class.forName("java.lang.Object");//需要显式处理,因此为检查时异常} catch (ClassNotFoundException e) {//没有直接或间接继承RuntimeException,因此为检查时异常// TODO Auto-generated catch blocke.printStackTrace();}}
}

异常通常可以用try-catch-finally来进行处理,例如上面的try-catch代码,其中try用于检查语句块是否有异常,若有异常则进入catch语句块,然后catch判定该异常类型是否与括号里的异常类型相同,若相同,则将异常类型赋值给变量e; 而且可以添加多个catch语句块,每个语句块里都可以写一种异常类型,执行时按照就近原则进行(距离try语句块的远近),但要注意的是要按照异常类型范围从小到大依次往下添加; 而finally语句块可以添加到catch语句块后面,无论try里的语句是否有异常都会执行。
让我们来举个例子深入理解一下:

public class Test3 {public static void main(String[] args) {try {			String str = null;System.out.println(str.length());//因为此处异常,所以下一行语句不执行,直接跳到catch语句块里Class.forName("fafsdf");}catch(ArithmeticException e){//算数异常System.out.println(e);}catch(NullPointerException e){//空指针异常,因为上面的异常为空指针异常,所以跳到此catch语句块里System.out.println(e);}catch(RuntimeException e){//执行时异常System.out.println(e);}catch(Exception e){//异常System.out.println(e);}finally {System.out.println("管你怎样,我就要执行");}	}
}
输出结果:
java.lang.NullPointerException
管你怎样,我就要执行

相关文章:

Atitit. Attilax企业框架 AEF的发展里程总结

Atitit. Attilax企业框架 AEF的发展里程总结 1. Attilax企业框架and框架发展思想 1 2. AEF框架 2 2.1. 多语言支持,涉及的语言 java ,c# php python js c 2 2.2. 业务模块支持 2 2.3. 技术组件支持 2 2.4. 平台化支持 2 2.5. 插件化支持 2 3. AEF框架发展里程 3 3.1…

1.3创建项目「深入浅出ASP.NET Core系列」

控制台创建项目 dotnet new --help 使用控制台采集项目,务必要熟练使用命令,--help是命令帮助的指明灯,在你无法google的时候,可以离线状态最快的帮助到你。 根据模板名称,我们可以创建各种模板,比如 dotne…

Linux16-防火墙与firewalld

目录 一、netfilter与firewalld 二、firewalld与firewall-cmd、firewall-config 2.1、预定义区域 2.2、预定义服务 2.3、firewall-cmd和firewall-config配置工具 2.4、富规则rich-rule 一、netfilter与firewalld linux内核有个防火墙模块netfilter,它是一个 …

throws throw 自定义异常

我们知道当程序遇到异常时除了用try-catch-finally来捕获异常外,还可以用throws和throw去抛出异常,使用异常处理可以定位问题所在处,方便修改程序代码: 例如利用try-catch-finally来捕获异常: public class Test{pub…

配置hadoop集群一

花了1天时间最终把环境搭建好了。整理了一下,希望对想学习hadoop的有所帮助。资料下载:http://pan.baidu.com/s/1kTupgkn包括了linux虚拟机。jdk, hadoop1.0环境搭建准备工作:hadoop_master 192.168.50.158hadoop_slave 192.168.50.136网络…

将前台日期格式转成与数据库日期格式相对应,后台java转数据库日期格式

前台到后台java时data日期类型的转化 在实体类中用DataTimeFormat,这样设置即使传过来是空的字符串也是可以转的,要和前面传过来的格式一致,如 XmlElement(name"BeginDate") DateTimeFormat(pattern"yyyy-MM-dd") privat…

Ubuntu18.04安装cudnn

下载Cudnn cudnn下载版本要与cudn版本相对应。笔者cudn为10.0,则cudnn选7.65。下载地址: https://developer.nvidia.com/rdp/cudnn-archive 下载for Linux这个。 编译 解压后运行以下命令: sudo cp cuda/include/cudnn.h /usr/local/cuda…

Linux17-磁盘分区、文件系统、逻辑卷管理LVM

目录 一、磁盘分区、文件系统、永久挂载 1.1、MBR分区方案 1.2、使用fdisk、mkfs、partprobe、blkid、lsblk等命令管理MBR分区 1.3、swap分区 1.4、GPT分区方案、使用gdisk管理GPT分区 二、逻辑卷LVM(Logical Volume Management) 2.1、物理卷PV、…

javascript基础 之 json

1&#xff0c;json是用于存储和传输的数据格式 全称&#xff1a;JSON 英文全称 JavaScript Object Notation json转化为javascript的规则&#xff1a; 数据为 键/值 对。数据由逗号分隔。大括号保存对象方括号保存数组<body> <p id"hehe"></p> <…

List常用方法总结 遍历集合的方法

List接口继承Collection接口&#xff0c;该接口属于数据结构中的线性结构&#xff0c;用户可以根据元素的整数索引来访问元素&#xff0c;换句话说就是List集合是按照存储的顺序保存的&#xff0c;且从0开始数&#xff0c;说白了就是就相当于一个数组&#xff0c;不同的是数组要…

ubuntu下载安装MaskRCNN-benchmark

在window下&#xff0c;配个环境&#xff0c;一堆错误&#xff0c;一周多都没解决。换到ubuntu下&#xff0c;不到一天就配好了 强烈建议直接去ubuntu下配置&#xff0c;千万别在window环境下配置。 一、下载anaconda&#xff0c;创建虚拟环境 下载anaconda的步骤读者可以去…

积跬步,聚小流------ps有用小技巧,改变png图标颜色

积跬步&#xff0c;聚小流------ps有用小技巧&#xff0c;改变png图标颜色 * 实现效果&#xff1a; 原图&#xff1a; 改动后&#xff1a; * 实现目的&#xff1a; 满足为实现不同界面色彩搭配改动png图标的颜色 * 实现方法&#xff1a; 1、打开Photoshop工具&#xff0c;导…

linux常用运维工具uptime、iostat、vmstat、sar

目录 一、uptime 二、iostat 三、vmstat 四、sar 一、uptime uptime可以告诉你系统已经运行了多久。uptime命令回显一行信息&#xff0c;包括&#xff1a;系统运行了多久&#xff0c;目前有多少用户在登录&#xff0c;过去1、5、15分钟系统平均负载。这些内容和命令w回显的…

《人类简史》八、融合统一(下)——宗教的法则、历史的混沌

在前面&#xff0c;我们说了金钱和帝国&#xff0c;今天我们聊一聊宗教。宗教的话题算是比较敏感的&#xff0c;必定很多人是拥有自己的宗教信仰的&#xff0c;如果在下面的论述过程之中&#xff0c;让您觉得有什么不妥的地方&#xff0c;还希望能够理解。我并没有贬低或者蔑视…

Set集合常用方法 遍历Set集合的方法

Set接口继承Collection接口&#xff0c;它与List集合有一个区别就是&#xff1a;List集合可以保存重复的数据&#xff0c;而Set集合不可以。Set接口有三个常用实现类&#xff1a; HashSet&#xff0c;特点&#xff1a; 它不按照存储的顺序保存&#xff0c;具有不确定性&#…

ubuntu下使用conda出现solving environment失败

更换anaconda的源&#xff08;注意是anaconda的源&#xff0c;不是ubuntu的源&#xff09; sudo gedit ./.condarc在出现的空文档中写入 channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free- htt…

centos8编译openssl-1.0.2u、openssl-1.1.1k

目录 一、给openssl-1.0.2u打包rpm 二、编译安装openssl-1.1.1k 三、给openssl-1.1.1k打包rpm&#xff08;不推荐&#xff01;&#xff09; 近日openssl爆出拒绝服务、证书绕过漏洞&#xff0c;CVE编号CVE-2021-3449、CVE-2021-3450。 解决方法&#xff1a; CentOS7默认ope…

jquery 1.7.2源码解析(二)构造jquery对象

构造jquery对象 jQuery对象是一个类数组对象。 一&#xff09;构造函数jQuery() 构造函数的7种用法: 1.jQuery(selector [, context ]) 传入字符串参数&#xff1a;检查该字符串是选择器表达式还是HTML代码。如果是选择器表达式&#xff0c;则遍历文档查找匹配的DOM元素&#x…

Map接口及其常用方法

Map集合基于键(key)和值(value)的映射&#xff0c;每个键只能映射一个值&#xff0c;也就是说key不可以重复&#xff08;当然喽&#xff0c;重复的话就按最后一个为准&#xff09;。键和值都可以是任何引用数据类型的值&#xff1b;且一对键值的存放是无序的。 Map常用的实现类…

C++计时函数

推荐使用chrono计时函数 #include<iostream> #include<vector> #include<algorithm> #include<chrono> using namespace std; class mycom { public:bool operator()(pair<int,int> p1,pair<int,int> p2){return p1.first < p2.first;…

最长递增子序列的两种解法

以LeetCode-300为例&#xff1a; O(n^2)解法&#xff1a; dp数组表示以i结尾的最长递增子序列的长度 class Solution { public:int lengthOfLIS(vector<int>& nums) {const int size nums.size();if (size 0) { return 0; } vector<int> dp(size, 1);int res…

【救援过程】升级openssl导致libcrypto.so.1.1动态库不可用

目录 一、故障重现 二、救援过程 一、故障重现 近日为了解决CVE-2021-3449: 拒绝服务漏洞、CVE-2021-3450: 证书校验漏洞&#xff0c;自己编译了openssl-1.1.1k。 亲测发现&#xff1a;只升级openssl的版本&#xff0c;动态库版本没有升级&#xff0c;系统可用。 升级openss…

C++类class

一、定义 构造函数&#xff1a;在定义一个类对象时会自动调用&#xff0c;可用于实现一些功能&#xff0c;比如new一个内存。 构造函数&#xff0c;没有返回值也不写void函数名称与类名相同构造函数可以有参数&#xff0c;因此可以发生重载程序在调用对象时候会自动调用构造&…

pandas学习之Series结构

#!/usr/bin/env python # -*- coding:utf-8 -*- """ 系列&#xff08;值的集合&#xff09; DataFrame数据包&#xff08;系列对象的集合&#xff09; panel&#xff08;数据文件对象的集合) 一个系列对象可以保存许多数据类型&#xff0c;包括 浮点数表示浮点数…

Java中的Map集合遍历总结(详尽版)

因为Map集合中的键值对排列无序&#xff0c;所以不能用传统的for循环来遍历&#xff0c;只能使用加强循环(for-each)和迭代器进行遍历。 让我们通过例子来了解Map集合的遍历&#xff1a; package gather; import java.util.HashMap; import java.util.Iterator; import java.…

Ansible01-Ansible基础和部署

目录 一、Ansible简介 二、安装部署Ansible 2.1、在控制节点安装ansible 2.2、对Linux和Unix受管节点要求 2.3、基于 Microsoft Windows 的受管主机 2.4、受管网络设备 三、Ansible配置文件 3.1、ansible.cfg配置文件推荐做法 3.2、ansible.cfg配置文件内容 四、Ansi…

C++/C文件读取

1、C文件操作 ofstream&#xff1a;写操作ifstream&#xff1a; 读操作fstream &#xff1a; 读写操作 打开方式解释ios::in为读文件而打开文件ios::out为写文件而打开文件ios::ate初始位置&#xff1a;文件尾ios::app追加方式写文件ios::trunc如果文件存在先删除&#xff0c…

HashSet中的add()方法( 二 )(详尽版)

本篇接着上一篇&#xff1a;&#xff08;详尽版&#xff09;HashSet中的add()方法( 一 )&#xff08;详尽版&#xff09; 有些东西上一篇说过了&#xff0c;这里就不再赘述了&#xff0c;具体说一下再次添加与第一次添加的区别&#xff1a; import java.util.HashSet;public …

20155321 实验四 Android程序设计

20155321 实验四 Android程序设计 安装Android studio成功 任务一&#xff1a;Android Stuidio的安装测试&#xff1a; 参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十四章&#xff1a; 安装 Android Stuidio完成Hello World, 要求修改res目录…

Ansible02-实施playbook

一、编写和运行playbook 1.1、编写playbook play 是针对清单中选定的主机运行的一组有序任务。playbook 是一个文本文件&#xff0c;其中包含由一个或多个按特定顺序运行的 play 组成的列表。 playbook 是以 YAML 格式编写的文本文件&#xff0c;通常使用扩展名 .yml 保存。…