java两种异常_JAVA两种异常的区别 (转)
Java提供了两类主要的异常:runtime exception和checked exception。所有的checked exception是从java.lang.Exception类衍生出来的,而runtime exception则是从java.lang.RuntimeException或java.lang.Error类衍生出来的。
它们的不同之处表现在两方面:机制上和逻辑上。
一、机制上
它们在机制上的不同表现在两点:1.如何定义方法;2. 如何处理抛出的异常。请看下面CheckedException的定义:
public class CheckedException extends Exception
{
public CheckedException() {}
public CheckedException( String message )
{
super( message );
}
}
以及一个使用exception的例子:
public class ExceptionalClass
{
public void method1()
throws CheckedException
{
// ... throw new CheckedException( "...出错了" );
}
public void method2( String arg )
{
if( arg == null )
{
throw new NullPointerException( "method2的参数arg是null!" );
}
}
public void method3() throws CheckedException
{
method1();
}
}
你可能已经注意到了,两个方法method1()和method2()都会抛出exception,可是只有method1()做了声明。另外,method3()本身并不会抛出exception,可是它却声明会抛出CheckedException。在向你解释之前,让我们先来看看这个类的main()方法:
public static void main( String[] args )
{
ExceptionalClass example = new ExceptionalClass();
try
{
example.method1();
example.method3();
}
catch( CheckedException ex ) { } example.method2( null );
}
在main()方法中,如果要调用method1(),你必须把这个调用放在try/catch程序块当中,因为它会抛出Checked exception。
相比之下,当你调用method2()时,则不需要把它放在try/catch程序块当中,因为它会抛出的exception不是checked exception,而是runtime exception。会抛出runtime exception的方法在定义时不必声明它会抛出exception。
现在,让我们再来看看method3()。它调用了method1()却没有把这个调用放在try/catch程序块当中。它是通过声明它会抛出method1()会抛出的exception来避免这样做的。它没有捕获这个exception,而是把它传递下去。实际上main()方法也可以这样做,通过声明它会抛出Checked exception来避免使用try/catch程序块(当然我们反对这种做法)。
小结一下:
* Runtime exceptions:
在定义方法时不需要声明会抛出runtime exception;
在调用这个方法时不需要捕获这个runtime exception;
runtime exception是从java.lang.RuntimeException或java.lang.Error类衍生出来的。
* Checked exceptions:
定义方法时必须声明所有可能会抛出的checked exception;
在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去;
checked exception是从java.lang.Exception类衍生出来的
java两种异常_JAVA两种异常的区别 (转)相关推荐
- java运行时异常与非运行时异常_java 运行时异常与非运行时异常理解
所谓的异常就是阻止当前程序或方法继续执行的问题. java异常分为两种:运行时异常(RuntimeException)和非运行时异常(CheckedException)也叫检查式异常. 1.运行时异常 ...
- java中exception作用_java中的异常Exception的划分,以及他们的特性。
1.异常分为编译时异常(ExceptionSubclass)和运行时异常(RuntimeException): 2.编译时异常的发生概率高,而运行时异常的发生概率比较低,因此编译时在编写代码时应该处理 ...
- Java中非法参数的异常_Java中的异常
异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常. ...
- java的数据异常_java的各种异常
展开全部 Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表 ...
- java常见检查异常_java中常见异常总汇,附解释
Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系 ...
- java property异常_Java常见的异常和解决的办法
Java程序设计中我们经常会遇到异常,遇到异常不要浮躁,找到问题的原因解决是很容易的.我们整理了一些异常和解决的方法供大家参考. 1.java.lang.IllegalStateException: ...
- java 多个异常处理_Java 多个异常共享同一个异常处理器的方法
传统的异常处理 我们先来看下,传统的异常处理方式: // not share exception handler int[] intArray = new int[3]; try { for (int ...
- java 负数异常_java基础之异常
一.Throw(抛出异常,让调用者处理) Throw(将异常抛给调用者) 在java中,提供了一个throw关键字,它用来抛出一个指定的异常对象.那么,抛出一个异常具体如何操作呢? 1. 创建一个异常 ...
- classcastexception异常_Java 最全异常讲解
Java知其所以然 导引问题 实际工作中,遇到的情况不可能是非常完美的.比如:你写的某个模块,用户输入不一定符合你的要求.你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数 ...
最新文章
- 趣谈网络协议笔记-一
- boost::math::tools::ulps_plot用法的测试程序
- nodejs redis 发布订阅_太赞了:Spring boot+redis实现消息发布与订阅
- c语言链表萌新,萌新一枚,关于链表问题求大佬解答
- 仿QQ打开网址显示的当前网页非官方页面
- 第二十七章:五姓七望
- IOS的IPV6测试
- 浅谈css样式(border、background、table)
- Android图片爬虫,看妹纸神器项目源码,ListView单张图片查看
- Android Studio使用JDBC远程连接mysql的注意事项(附示例)
- 三斜线表头表格HTML,excel三栏斜线表头的完美制作方法
- matlab地理数据导入,基于Matlab的栅格地理数据处理-快速入门系列(1)
- Scrapy学习笔记(3)爬取知乎首页问题及答案
- 洪水!(Flooded!)
- Windows10下设置电脑屏幕仅显示黑白
- 【已解决】Nginx基于多端口、多域名配置
- 为activity设置主题theme
- Cubase中MIDI设备的如何创建面板
- 淘宝/天猫API:item_videolist-按分类搜索淘宝直播接口
- html电脑自动输出什么意思code,VScode自动生成HTML的含义
热门文章
- ajax成功之后在执行,ajax传入成功后执行后台方法
- java caller_js中的caller和callee属性
- mysql php ajax_PHP 和 AJAX MySQL 数据库实例
- python求123逆序数_应用Python来计算排列中的逆序数个数
- java 多层异常_Java多层嵌套异常处理的基本流程
- 中关村Win11 32位微软原版ISO V2021.08
- 如何为火狐浏览器添加附加组件?火狐浏览器附加组件管理器使用教程
- Mybatis的xml配置实例
- 后台返回给前端json字段的大小写问题,Lombok的坑@Data,@Getter
- WebService技术详解CXF