目录

   一、运行时异常

     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(运行时异常)的更多相关文章

  1. Java运行时异常和非运行时异常

    1.Java异常机制 Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类.Java中的异常分为两大类:错误Error和异常Exception,Java ...

  2. Java检查异常和非检查异常,运行时异常和非运行时异常的区别

    通常,Java的异常(包括Exception和Error)分为检查异常(checked exceptions)和非检查的异常(unchecked exceptions).其中根据Exception异常 ...

  3. Java检查异常、非检查异常、运行时异常、非运行时异常的区别

    Java把所有的非正常情况分为两种:异常(Exception)和错误(Error),它们都继承Throwable父类. Java的异常(Exception和Error)分为检查异常和非检查的异常. 其 ...

  4. Java运行时异常与非运行时异常

    Java运行时异常与非运行时异常 Exception(异常)是程序本身可以处理的异常.主要包含RuntimeException等运行时异常和IOException,SQLException等非运行时异 ...

  5. Java中运行时异常和非运行时异常什么鬼?

    Java中的异常分类 RuntimeException(也称unchecked exceptions,运行时异常) 就是我们在开发中测试功能时程序终止,控制台出现的异常.(一般来说,出现运行时异常基本 ...

  6. java 运行时异常与非运行时异常理解

    参考:https://blog.csdn.net/lan12334321234/article/details/70049446 所谓的异常就是阻止当前程序或方法继续执行的问题 java异常分为两种: ...

  7. 【Java面试题】20 运行时异常和一般异常有何区别

    Throwable 是所有 Java 程序中错误处理的父类 ,有两种资类: Error 和 Exception . Error :表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次的 ...

  8. 牛客网Java刷题知识点之什么是异常、异常处理的原理是什么、为什么要使用异常、异常体系、运行时异常、普通异常、自定义异常、异常链

    不多说,直接上干货! 在这个世界不可能存在完美的东西,不管完美的思维有多么缜密,细心,我们都不可能考虑所有的因素,这就是所谓的智者千虑必有一失.同样的道理,计算机的世界也是不完美的,异常情况随时都会发 ...

  9. java异常分类(运行时异常,可检查异常)

    NullPointerException:是运行时异常(RuntimeException),也叫非检查异常 所以我们抛出该类异常实例时,方法声明处无需添加throws来列举该类异常的抛出,编译器在编译 ...

随机推荐

  1. 007-配置IP和DNS

    2.配置DNS. 3.

  2. mysql事务详解

    事务的四大特性ACID如下:       原子性:事务中的所有操作,要么全部完成,要么不做任何操作,不能只做部分操作.如果在执行的过程中发了错误,要回滚(Rollback)到事务开始前的状态,就像这个 ...

  3. input hidden的作用

    网上辣么多blabla的,我就总结一下 1 什么是hidden hidden 是input type的一个值,叫隐藏域,官方解释:“Hidden 对象代表一个 HTML 表单中的某个隐藏输入域. 这种 ...

  4. jQuery常用操作

    jQuery jQuery是一个轻量级的JS库,是一个被封装好的JS文件,提供了更为简便的元素操作方式,jQuery封装了DOM. 使用jQuery 引入jQuery文件 <scrtipt sr ...

  5. C/C++之标准库和标准模板库

    C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标准头文件中定义.在C++开发中,要尽可能地利用标准库完 成.这样做的直接好处包括:(1)成本:已经作为标准提供,何苦再花 ...

  6. Python Web笔记之高性能网络编程

    请参考博客: https://blog.csdn.net/russell_tao/article/details/9111769

  7. laravel 对接支付宝

    使用的库 omnipay-alipay 申请支付宝支付 这个就不说了, 不明白如何下手的伙伴让运营去和支付宝客服联系吧 composer 安装git库 将以下代码添加到 composer.json { ...

  8. js面向对象编程: js类定义函数时prototype和this区别?

    参考文章的链接:http://www.2cto.com/kf/201406/307790.html 测试代码如下: function ListCommon2(afirst) { var first=a ...

  9. 20145206邹京儒《网络对抗》逆向及Bof基础实践

    20145206邹京儒<网络对抗>逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:ma ...

  10. RS(纠删码)技术浅析及Python实现

    前言 在Ceph和RAID存储领域,RS纠删码扮演着重要的角色,纠删码是经典的时间换空间的案例,通过更多的CPU计算,降低低频存储数据的存储空间占用. 纠删码原理 纠删码基于范德蒙德矩阵实现,核心公式 ...