Java checked 异常 和 RuntimeException(运行时异常)
目录
一、运行时异常
1、什么是RuntimeExceptioin
2、运行时异常的特点
3、如何运用运行时异常
二、运行时异常和ckecked异常的区别
1、机制上
2、逻辑上
一、运行时异常
1、什么是运行时异常
程序在运行过程中出现的异常,RumtimeException 是 Exception 的一个子类
我们可以查看Java API 文档
贴张示意图
2、运行异常的特点
一般来说,我们在方法体内出现异常,我们用throw 关键字 将 异常对象或 异常对象的引用抛出,如果当前方法无法处理异常,那么必须在方法的参数列表后方法体前 必须 用 throws 声明异常所属类,交给调用者去处理。但是RuntimeException是非常特殊的子类,你可以不用throw和throws,哪怕你throw了,也没必要thtows,即使你throws了,调用者也没必要try-catch
1> 如果在函数内容中抛出该类异常或其子类异常,函数上可以不用声明,编译一样通过
2> 如果在函数上声明该异常,调用者可以不同处理(try-catch),编译一样通过
为什么不用声明 ?
之所以不用在函数上声明,是因为不需要让调用者处理,当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望程序停止后由程序员对代码进行修正。
3、如何运用运行时异常
自定义异常时,如果该异常的发生,无法继续进行运行,就让自定义异常类继承RuntimeException
再贴一张简单示意图 Object 中的 wait(long timeout)方法,继续查看Java API 文档 对该方法的描述
二、运行时异常和ckecked异常的区别
对于异常分两种:检查异常和非检查异常(运行时异常)
检查异常 : 编译时被检测的异常 (throw后,方法有能力处理就try-catch处理,没能力处理就必须throws)。编译不通过,检查语法(其实就是throw和throws的配套使用)。
运行时异常 : 编译时不被检查的异常(运行时异常。RuntimeException及其子类)。编译通过。
1、机制上
主要表现在以下两个方面 :
(1)如何定义方法
(2)如何处理抛出的异常
运行时异常,不需要用throws 声明抛出 异常对象所属类,也可以不用throw 抛出异常对象或异常引用。对于调用该方法,也不需要放于 try-catch 代码块中。(为什么 ? 如果你捕获它,就会冒这么一个风险:程序代码错误被掩盖在运行中无法察觉)
而检查异常 : 一旦 用throw 抛出异常,如果当前方法 可处理异常,那么直接在该方法内用try-catch 去处理。如果当前方法不具备处理该异常的能力,那么就必须在 参数列表后方法体前用 throws 声明 异常 所属类,交给调用该方法的 调用者(方法) 去处理 。
2、逻辑上
从逻辑的角度来看, checked 异常 和 RuntimeException 有着不同的使用目的,检查性异常 用来指示 一种调用方能够直接处理的异常情况(例如: 用户输入错误,程序可以直接捕获并处理,提示用户输入错误), 而RuntimeException 是用来指 调用方 本身无法 处理或回复 的程序错误(例如,你封装个库给别人用,当别人调用你库中某个方法是,需要传入某些参数,如果用户传入的参数不合法,你自己没办法处理,那么刺客你抛出的就应该是运行时异常)。
我个人感觉,RuntimeException 跟OC 中的 断言(NSAlert) 有点像哦。
进一步思考 : 前面的知识点有降到,携带参数的构造方法既可以为对象赋初始值,还可以为对象 赋一个合理的值。例如,初始化一个长方形对象,用构造方法给定 width 和 length ,我们可以在构造方法里面判断 长 宽 值的合理性,但是如果此时你初始化这个对象成功后,你调用 求面积的方法,返回一个 值,那么这个值 是异常值。按照所学的知识,我们一般会在求面积的方法,判断值的合理性,如果不合理抛出异常。但是,反过来想,如果我一开始让你传入 的 width 和 length 就抛出异常呢,这个直接让你初始化对象不成功 是不是好点。因为你有可能不知道 我 求面积的方法是怎么实现的,就算我给你抛出异常,你也不知道如何处理。(通过这点,我们也了解到一个小知识点,构造方法也是可以抛出异常的,而且,抛出异常的类型通常是运行时异常)
原文:https://blog.csdn.net/qq_18505715/article/details/76696439
Java checked 异常 和 RuntimeException(运行时异常)的更多相关文章
- Java运行时异常和非运行时异常
1.Java异常机制 Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类.Java中的异常分为两大类:错误Error和异常Exception,Java ...
- Java检查异常和非检查异常,运行时异常和非运行时异常的区别
通常,Java的异常(包括Exception和Error)分为检查异常(checked exceptions)和非检查的异常(unchecked exceptions).其中根据Exception异常 ...
- Java检查异常、非检查异常、运行时异常、非运行时异常的区别
Java把所有的非正常情况分为两种:异常(Exception)和错误(Error),它们都继承Throwable父类. Java的异常(Exception和Error)分为检查异常和非检查的异常. 其 ...
- Java运行时异常与非运行时异常
Java运行时异常与非运行时异常 Exception(异常)是程序本身可以处理的异常.主要包含RuntimeException等运行时异常和IOException,SQLException等非运行时异 ...
- Java中运行时异常和非运行时异常什么鬼?
Java中的异常分类 RuntimeException(也称unchecked exceptions,运行时异常) 就是我们在开发中测试功能时程序终止,控制台出现的异常.(一般来说,出现运行时异常基本 ...
- java 运行时异常与非运行时异常理解
参考:https://blog.csdn.net/lan12334321234/article/details/70049446 所谓的异常就是阻止当前程序或方法继续执行的问题 java异常分为两种: ...
- 【Java面试题】20 运行时异常和一般异常有何区别
Throwable 是所有 Java 程序中错误处理的父类 ,有两种资类: Error 和 Exception . Error :表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次的 ...
- 牛客网Java刷题知识点之什么是异常、异常处理的原理是什么、为什么要使用异常、异常体系、运行时异常、普通异常、自定义异常、异常链
不多说,直接上干货! 在这个世界不可能存在完美的东西,不管完美的思维有多么缜密,细心,我们都不可能考虑所有的因素,这就是所谓的智者千虑必有一失.同样的道理,计算机的世界也是不完美的,异常情况随时都会发 ...
- java异常分类(运行时异常,可检查异常)
NullPointerException:是运行时异常(RuntimeException),也叫非检查异常 所以我们抛出该类异常实例时,方法声明处无需添加throws来列举该类异常的抛出,编译器在编译 ...
随机推荐
- 强大的chrome(1)以acfun为例抓取视频
chrome很强大,很强大,很强大. 想要了解他的强大呢,就先要掌握一些基本的chrome命令. 1. chrome://flags 可用来启用或者关闭某些chrome的体验特性 2. chr ...
- hdu 6201 transaction transaction transaction
https://vjudge.net/contest/184514#problem/H 题意: 一个商人为了赚钱,在城市之间倒卖商品.有n个城市,每个城市之间有且只有一条无向边连通.给出n个城市的货物 ...
- Git 常用的命令
基本内容: 工作区:就是你在电脑里能看到的目录. 暂存区:英文叫stage, 或index.一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有 ...
- RocketMQ 集群搭建--双Master方案
安装环境 jdk1.7 alibaba-rocketmq-3.2.6.tar.gz VM虚拟机redhat6.5-x64:192.168.1.201 192.168.1.202 Xshell4 部署 ...
- 在Java中使用Sqlite数据库
一.安装 下载最新的 Sqlite Jdbc 驱动程序jar文件,并添加到Java工程的class路径下: 二.使用 以 sqlite Jdbc 驱动版本为 sqlitejdbc-v56.jar 为例 ...
- HTTP 协议入门
本文转载自:http://www.ruanyifeng.com/blog/2016/08/http.html HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它 ...
- C++原创应用类库和工具类库
此博文记载着自编C++应用类库和生成器库的源代码的链接地址,并且对库的开发环境.开发过程.缺陷以及改进更新进行说明. 分数类 利用中午的时间,自己在Visual Studio 2013环境下编写了一个 ...
- Linux中Postfix邮件发送配置(三)
部署DNS服务器 postfix根据域名和地址做一个MX记录,A记录,PTR记录(一般在互联网上邮件服务器都要反解,没有PTR记录会认为是垃圾邮件) $ service iptables stop $ ...
- 穿透内网,连接动态ip,内网ip打洞-----p2p实现原理
转:http://blog.csdn.net/suhuaiqiang_janlay/article/details/60466333 本人找几篇讲得好的来整理一下. (1)问题的由来: (2)动态ip ...
- bzoj1638 / P2883 [USACO07MAR]牛交通Cow Traffic
P2883 [USACO07MAR]牛交通Cow Traffic 对于每一条边$(u,v)$ 设入度为0的点到$u$有$f[u]$种走法 点$n$到$v$(通过反向边)有$f2[v]$种走法 显然经过 ...