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两种异常的区别 (转)相关推荐

  1. java运行时异常与非运行时异常_java 运行时异常与非运行时异常理解

    所谓的异常就是阻止当前程序或方法继续执行的问题. java异常分为两种:运行时异常(RuntimeException)和非运行时异常(CheckedException)也叫检查式异常. 1.运行时异常 ...

  2. java中exception作用_java中的异常Exception的划分,以及他们的特性。

    1.异常分为编译时异常(ExceptionSubclass)和运行时异常(RuntimeException): 2.编译时异常的发生概率高,而运行时异常的发生概率比较低,因此编译时在编写代码时应该处理 ...

  3. Java中非法参数的异常_Java中的异常

    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常. ...

  4. java的数据异常_java的各种异常

    展开全部 Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表 ...

  5. java常见检查异常_java中常见异常总汇,附解释

    Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系 ...

  6. java property异常_Java常见的异常和解决的办法

    Java程序设计中我们经常会遇到异常,遇到异常不要浮躁,找到问题的原因解决是很容易的.我们整理了一些异常和解决的方法供大家参考. 1.java.lang.IllegalStateException: ...

  7. java 多个异常处理_Java 多个异常共享同一个异常处理器的方法

    传统的异常处理 我们先来看下,传统的异常处理方式: // not share exception handler int[] intArray = new int[3]; try { for (int ...

  8. java 负数异常_java基础之异常

    一.Throw(抛出异常,让调用者处理) Throw(将异常抛给调用者) 在java中,提供了一个throw关键字,它用来抛出一个指定的异常对象.那么,抛出一个异常具体如何操作呢? 1. 创建一个异常 ...

  9. classcastexception异常_Java 最全异常讲解

    Java知其所以然 导引问题 实际工作中,遇到的情况不可能是非常完美的.比如:你写的某个模块,用户输入不一定符合你的要求.你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数 ...

最新文章

  1. 趣谈网络协议笔记-一
  2. boost::math::tools::ulps_plot用法的测试程序
  3. nodejs redis 发布订阅_太赞了:Spring boot+redis实现消息发布与订阅
  4. c语言链表萌新,萌新一枚,关于链表问题求大佬解答
  5. 仿QQ打开网址显示的当前网页非官方页面
  6. 第二十七章:五姓七望
  7. IOS的IPV6测试
  8. 浅谈css样式(border、background、table)
  9. Android图片爬虫,看妹纸神器项目源码,ListView单张图片查看
  10. Android Studio使用JDBC远程连接mysql的注意事项(附示例)
  11. 三斜线表头表格HTML,excel三栏斜线表头的完美制作方法
  12. matlab地理数据导入,基于Matlab的栅格地理数据处理-快速入门系列(1)
  13. Scrapy学习笔记(3)爬取知乎首页问题及答案
  14. 洪水!(Flooded!)
  15. Windows10下设置电脑屏幕仅显示黑白
  16. 【已解决】Nginx基于多端口、多域名配置
  17. 为activity设置主题theme
  18. Cubase中MIDI设备的如何创建面板
  19. 淘宝/天猫API:item_videolist-按分类搜索淘宝直播接口
  20. html电脑自动输出什么意思code,VScode自动生成HTML的含义

热门文章

  1. ajax成功之后在执行,ajax传入成功后执行后台方法
  2. java caller_js中的caller和callee属性
  3. mysql php ajax_PHP 和 AJAX MySQL 数据库实例
  4. python求123逆序数_应用Python来计算排列中的逆序数个数
  5. java 多层异常_Java多层嵌套异常处理的基本流程
  6. 中关村Win11 32位微软原版ISO V2021.08
  7. 如何为火狐浏览器添加附加组件?火狐浏览器附加组件管理器使用教程
  8. Mybatis的xml配置实例
  9. 后台返回给前端json字段的大小写问题,Lombok的坑@Data,@Getter
  10. WebService技术详解CXF