Java checked 异常 和 RuntimeException(运行时异常)

Java checked 异常 和 RuntimeException(运行时异常)目录一 运行时异常 1 什么是 RuntimeExcep 运行时异常的特点 3 如何运用运行时异常二 运行时异常和 ckecked 异常的区别 1 机制上 2 逻辑上一 运行时异常 1 什么是运行时异常程序在运行过程中出现的异常 RumtimeExcep 是 Exception 的一个子类我们可以查看 Jav

目录

 一、运行时异常 1、什么是RuntimeExceptioin 2、运行时异常的特点 3、如何运用运行时异常 二、运行时异常和ckecked异常的区别 1、机制上 2、逻辑上 

一、运行时异常

1、什么是运行时异常

2、运行异常的特点

一般来说,我们在方法体内出现异常,我们用throw 关键字 将 异常对象或 异常对象的引用抛出,如果当前方法无法处理异常,那么必须在方法的参数列表后方法体前 必须 用 throws 声明异常所属类,交给调用者去处理。但是RuntimeException是非常特殊的子类,你可以不用throw和throws,哪怕你throw了,也没必要thtows,即使你throws了,调用者也没必要try-catch

1> 如果在函数内容中抛出该类异常或其子类异常,函数上可以不用声明,编译一样通过

2> 如果在函数上声明该异常,调用者可以不同处理(try-catch),编译一样通过

为什么不用声明 ?

之所以不用在函数上声明,是因为不需要让调用者处理,当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望程序停止后由程序员对代码进行修正。

3、如何运用运行时异常

自定义异常时,如果该异常的发生,无法继续进行运行,就让自定义异常类继承RuntimeException

二、运行时异常和ckecked异常的区别

对于异常分两种:检查异常和非检查异常(运行时异常)

检查异常 : 编译时被检测的异常 (throw后,方法有能力处理就try-catch处理,没能力处理就必须throws)。编译不通过,检查语法(其实就是throw和throws的配套使用)。

运行时异常 : 编译时不被检查的异常(运行时异常。RuntimeException及其子类)。编译通过。

1、机制上

运行时异常,不需要用throws 声明抛出 异常对象所属类,也可以不用throw 抛出异常对象或异常引用。对于调用该方法,也不需要放于 try-catch 代码块中。(为什么 ? 如果你捕获它,就会冒这么一个风险:程序代码错误被掩盖在运行中无法察觉)

而检查异常 : 一旦 用throw 抛出异常,如果当前方法 可处理异常,那么直接在该方法内用try-catch 去处理。如果当前方法不具备处理该异常的能力,那么就必须在 参数列表后方法体前用 throws 声明 异常 所属类,交给调用该方法的 调用者(方法) 去处理 。

2、逻辑上

从逻辑的角度来看, checked 异常 和 RuntimeException 有着不同的使用目的,检查性异常 用来指示 一种调用方能够直接处理的异常情况(例如: 用户输入错误,程序可以直接捕获并处理,提示用户输入错误), 而RuntimeException 是用来指 调用方 本身无法 处理或回复 的程序错误(例如,你封装个库给别人用,当别人调用你库中某个方法是,需要传入某些参数,如果用户传入的参数不合法,你自己没办法处理,那么刺客你抛出的就应该是运行时异常)。

我个人感觉,RuntimeException 跟OC 中的 断言(NSAlert) 有点像哦

进一步思考 : 前面的知识点有降到,携带参数的构造方法既可以为对象赋初始值,还可以为对象 赋一个合理的值。例如,初始化一个长方形对象,用构造方法给定 width 和 length ,我们可以在构造方法里面判断 长 宽 值的合理性,但是如果此时你初始化这个对象成功后,你调用 求面积的方法,返回一个 值,那么这个值 是异常值。按照所学的知识,我们一般会在求面积的方法,判断值的合理性,如果不合理抛出异常。但是,反过来想,如果我一开始让你传入 的 width 和 length 就抛出异常呢,这个直接让你初始化对象不成功 是不是好点。因为你有可能不知道 我 求面积的方法是怎么实现的,就算我给你抛出异常,你也不知道如何处理。(通过这点,我们也了解到一个小知识点,构造方法也是可以抛出异常的,而且,抛出异常的类型通常是运行时异常)

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223234.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午2:33
下一篇 2026年3月17日 下午2:33


相关推荐

  • H5常用标签大全

    H5常用标签大全1 HTML5 头部结构 nbsp DOCTYPEhtml 声明文档类型为 HTML5 文件 文档声明在 HTML5 文档必不可少 且必须放在文档的第一行 nbsp meta 标签 1 charset 属性 单独使用 设置文档字符及编码格式 写法 lt metacharset UTF 8 gt 常见的中文编码格式 B 2312 国标码 简体中文 GBK 扩展的国标编码 简体

    2026年3月17日
    2
  • initiator、target、lun之间的映射「建议收藏」

    initiator、target、lun之间的映射「建议收藏」本人一开始不了解这个ITL映射是如何进行连接并访问的,正好用到了这方面的知识,以此记录下来。I_T_L映射指的是电脑和远程存储服务器之间的映射。initiator是一个连接发起程序,由电脑本地发起

    2022年8月2日
    9
  • cocos2d基础篇笔记四

    cocos2d基础篇笔记四

    2021年12月5日
    52
  • matlab求解不定方程组_matlab解参数方程组

    matlab求解不定方程组_matlab解参数方程组最想说的一句话:要查matlab用法,一定要到官网去查,一些用法matlab官方是在不断更新的,现存的一些办法已经无法解决问题使用的是solve这个函数它拥有解决优化问题,解方程的功能,下面我将举一些常用的例子文章目录一、解单变量方程二、解多变量方程三、解带参数方程四、解不等式知识点总结一、解单变量方程题目:求解方程2x+1=0 2x+1=02x+1=0symsx…

    2025年11月14日
    7
  • Numpy数据类型转换astype,dtype

    Numpy数据类型转换astype,dtypendarray数据类型astype:1、查看数据类型In[11]:arr=np.array([1,2,3,4,5])In[12]:arrOut[12]:array([1,2,3,4,5])//该命令查看数据类型In[13]:arr.dtypeOut[13]:dtype(‘int64’)In[14]:float_arr=arr.astype(np.f

    2022年6月12日
    30
  • java fel_FEL表达式的用法

    java fel_FEL表达式的用法Fel 是开放的 引擎执行中的多个模块都可以扩展或替换 Fel 的执行主要是通过函数实现 运算符 等都是 Fel 函数 所有这些函数都是可以替换的 扩展函数也非常简单 Fel 有双引擎 同时支持解释执行和编译执行 可以根据性能要求选择执行方式 编译执行就是将表达式编译成字节码 生成 java 代码和编译模块都是可以扩展和替换的 FEL 可以进行算数运算以及逻辑运算 也可以调用类的静态方法 非静态方法 只需

    2026年3月19日
    2

发表回复

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

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