Checked异常和Runtime异常的区别_JAVA运行时异常

Checked异常和Runtime异常的区别_JAVA运行时异常目录一、运行时异常1、什么是RuntimeExceptioin2、运行时异常的特点3、如何运用运行时异常二、运行时异常和ckecked异常的区别1、机制上2、逻辑上一、运行时异常1、什么是运行时异常程序在运行过程中出现的异常,RumtimeException是Exception的一个子类我们可以查看Jav

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

目录

   一、运行时异常
   
     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://javaforall.net/187469.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何解决win7开机提示未能连接一个Windows服务「建议收藏」

    如何解决win7开机提示未能连接一个Windows服务「建议收藏」1.以安全模式打开电脑;2.打开运行菜单,在运行对话框中输入CMD,回车打开命令对话框;3.然后在命令对话框中输入“NETSHWINSOCKRESETCATALOG”命令,点击Enter;4.重启电脑。

    2022年5月15日
    46
  • 全面屏手机时代 指纹识别真的过时了吗吗_全面屏和普通屏哪个好

    全面屏手机时代 指纹识别真的过时了吗吗_全面屏和普通屏哪个好2019独角兽企业重金招聘Python工程师标准>>>…

    2022年8月10日
    7
  • 2022年最新一篇文章教你青龙面板拉库,拉取单文件,安装依赖,设置环境变量,解决没有或丢失依赖can‘t find module之保姆教程(附带几十个青龙面板脚本仓库)「建议收藏」

    2022年最新一篇文章教你青龙面板拉库,拉取单文件,安装依赖,设置环境变量,解决没有或丢失依赖can‘t find module之保姆教程(附带几十个青龙面板脚本仓库)「建议收藏」没有安装青龙面板的先看我另外一篇教程https://blog.csdn.net/qq_39997540/article/details/122363463?spm=1001.2014.3001.55011.青龙面板拉库打开浏览器进入按照我的主页里的另一篇教程安装好的青龙面板,点击右上角的添加任务编辑任务10-23/1***点击你添加好的拉库任务右边的运行按钮,过几分钟你要拉的库就下载到你的青龙面板了2.分享收集的青龙面板脚本仓库,建议选择拉一个就可以了1.JB库.

    2022年7月20日
    22
  • vmware虚拟机版本不兼容_vm虚拟机与device不兼容怎么处理

    vmware虚拟机版本不兼容_vm虚拟机与device不兼容怎么处理引言:现在的windows操作系统对旧版本的软件兼容性非常差,很多老软件无法在win10下运行,因此我们需要建立虚拟机来运行老版软件。可是我们通过虚拟机安装XP系统时,有时候会出现546错误。经过本人网上搜索,发现这种问题还不在少数。正文:网上有一些大神啊,就开始支招了:“一定是你的安装包不对,换一个安装程序就可以了”、“VM重启几次就好了”。但是。。。。。这种解决方案通常是解决不了问题。瞎支招的…

    2022年8月16日
    9
  • 手机游戏开发现状分析[通俗易懂]

    手机游戏开发现状分析[通俗易懂]随着近年来手机的日渐普及,手机游戏已经成为整个游戏领域发展速度最快的部分。根据英国某媒体研究公布的统计数据,今年的手机游戏市场的产值已经达到5.87亿美元,比去年年翻了一番。该公司预计到今后几年里这一市场的产值将达到目前的6倍,增至38亿美元。 我国的手机游戏在最近一年,也有了长足的发展。但是就其规模而言,还远远没有达到国外的水平。这其中原因很多,但有一点是可以肯定的,我国的手机游戏前景是光明

    2022年4月30日
    41
  • 【手把手】制作一个简单的HTML网页

    【手把手】制作一个简单的HTML网页新建一个html文件:我要给body添加一些样式,就在head元素上挂载一个style元素。然后,写样式表:效果:这样的话,我们就可以看到body部分了。现在,我给body添加一点padding。页面上看不出区别,让我们打开F12,看一下现在的body变成了什么样子。示意图:从图中可以看出,body元素分为三层,最里面的一层,就是520×500的那部分,这个叫做内部真实空间,也就是说,你可以在里面添加其他元素,比如div元素,p元素,a元素等等。然后中间的一层就是paddin

    2022年7月27日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号