返回顶部
首页 > 资讯 > 精选 >怎样浅析Java语言中两种异常的差别
  • 425
分享到

怎样浅析Java语言中两种异常的差别

2023-06-03 04:06:34 425人浏览 八月长安
摘要

怎样浅析Java语言中两种异常的差别,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。浅析Java语言中两种异常的差别  Java提供了两类主要的异常:runtime except

怎样浅析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类衍生出来的。

  二、逻辑上

  从逻辑的角度来说,checked exceptions和runtime exception是有不同的使用目的的。checked exception用来指示一种调用方能够直接处理的异常情况。而runtime exception则用来指示一种调用方本身无法处理或恢复的程序错误。

  checked exception迫使你捕获它并处理这种异常情况。以java.net.URL类的构建器(constructor)为例,它的每一个构建器都会抛出MalfORMedURLException。MalformedURLException就是一种checked exception。设想一下,你有一个简单的程序,用来提示用户输入一个URL,然后通过这个URL去下载一个网页。如果用户输入的URL有错误,构建器就会抛出一个exception。既然这个exception是checked exception,你的程序就可以捕获它并正确处理:比如说提示用户重新输入。

  再看下面这个例子:

  public void method()
  {

  int [] numbers = { 1, 2, 3 };
  int sum = numbers[0] numbers[3];
  }

  在运行方法method()时会遇到ArrayIndexOutOfBoundsException(因为数组numbers的成员是从0到2)。对于这个异常,调用方无法处理/纠正。这个方法method()和上面的method2()一样,都是runtime exception的情形。上面我已经提到,runtime exception用来指示一种调用方本身无法处理/恢复的程序错误。而程序错误通常是无法在运行过程中处理的,必须改正程序代码。

  总而言之,在程序的运行过程中一个checked exception被抛出的时候,只有能够适当处理这个异常的调用方才应该用try/catch来捕获它。而对于runtime exception,则不应当在程序中捕获它。如果你要捕获它的话,你就会冒这样一个风险:程序代码的错误(bug)被掩盖在运行当中无法被察觉。因为在程序测试过程中,系统打印出来的调用堆栈路径(StackTrace)往往使你更快找到并修改代码中的错误。有些程序员建议捕获runtime exception并纪录在log中,我反对这样做。这样做的坏处是你必须通过浏览log来找出问题,而用来测试程序的测试系统(比如Unit Test)却无法直接捕获问题并报告出来。

看完上述内容,你们掌握怎样浅析Java语言中两种异常的差别的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 怎样浅析Java语言中两种异常的差别

本文链接: https://lsjlt.com/news/232772.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎样浅析Java语言中两种异常的差别
    怎样浅析Java语言中两种异常的差别,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。浅析Java语言中两种异常的差别  Java提供了两类主要的异常:runtime except...
    99+
    2023-06-03
  • Java两种主要异常的差别是什么
    本篇文章给大家分享的是有关Java两种主要异常的差别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java提供了两类主要的异常:runtime exception和che...
    99+
    2023-06-17
  • 深入浅析Java中的异常继承
    这篇文章给大家介绍深入浅析Java中的异常继承,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java异常类层次结构图: 异常的英文单词是exception,字面翻译就是“意外、例外”的意思,也就是非正常情况。...
    99+
    2023-05-31
    java 异常继承 ava
  • 浅析Java语言中的内部类
    浅析Java语言中的内部类[@more@]  提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比。内部类从表面上...
    99+
    2023-06-03
  • Kotlin语言中CompileSdkVersion与targetSdkVersion的区别浅析
    目录前言一.CompileSdkVersion与targetSdkVersion是什么1.1 compileSdkVersion1.2 targetSdkVersion二.compi...
    99+
    2023-02-23
    Kotlin CompileSdkVersion与targetSdkVersion的区别 Kotlin CompileSdkVersion
  • 深入浅析java中connection reset 的异常处理
    今天就跟大家聊聊有关深入浅析java中connection reset 的异常处理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在Java中常看见的几个connection rest...
    99+
    2023-05-31
    connection reset java
  • 怎么浅析CSS在IE6、IE7、IE8中的兼容差异
    本篇文章为大家展示了怎么浅析CSS在IE6、IE7、IE8中的兼容差异,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。你对CSS在IE6...
    99+
    2024-04-02
  • 比较Go语言和Java的差异:语法和编程模式的分析
    Go语言与Java的差异:语法与编程模型 Go语言和Java都是现代流行的编程语言,具有许多相似之处,但也有许多差异。这些差异主要体现在语法和编程模型上。 语法 1. 变量声明 Go语言中,变量声明需要使用v...
    99+
    2024-02-01
    java go语言 差异
  • 怎样解析Java的异常处理机制
    这期内容当中小编将会给大家带来有关怎样解析Java的异常处理机制,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。你觉得自己是一个Java专家吗是否肯定自己已经全面掌握了Java的异常处理机制在下面这段代码中...
    99+
    2023-06-17
  • c语言和c++语言中const修饰的变量区别浅析
    目录c:修饰全局变量:修饰局部变量:c++:修饰全局变量:修饰局部变量:总结:在c语言中:在c++语言中:总结c: 修饰全局变量: 用const修饰的全局变量是没有办法直接修改的,间...
    99+
    2024-04-02
  • 在Java中怎么查找两个列表之间的差异
    本篇内容介绍了“在Java中怎么查找两个列表之间的差异”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. ...
    99+
    2024-04-02
  • 浅析Java语言中状态模式的优点
    目录一.介绍二.UML类图三.示意代码四.使用场景五.状态模式与策略模式对比六.优点一.介绍 状态模式(State Pattern)属于行为型模式。当控制一个对象状态转换的条件表达式...
    99+
    2023-02-16
    Java状态模式 Java状态模式优点
  • C语言中几种常量的认识和理解是怎样的
    本篇文章为大家展示了C语言中几种常量的认识和理解是怎样的 ,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、C语言常量是什么?常量是指在程序运行过程中其值不能被改变的量。 C语言中常量可分为直接常量...
    99+
    2023-06-22
  • 浅谈Java异常的Exception e中的egetMessage()和toString()方法的区别
    Exception e中e的getMessage()和toString()方法的区别:示例代码1:public class TestInfo { private static String str =null; public stati...
    99+
    2023-05-31
    egetmessage tostring java
  • 五种基于JVM的脚本语言分别是怎样的
    这期内容当中小编将会给大家带来有关五种基于JVM的脚本语言分别是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用...
    99+
    2023-06-17
  • R语言中的五种常用统计分析方法
    1、分组分析aggregation 根据分组字段,将分析对象划分为不同的部分,以进行对比分析各组之间差异性的一种分析方法。 常用统计指标: 计数 length 求和 sum 平均值 ...
    99+
    2024-04-02
  • Java是一种健壮的语言,具有强大的异常处理能力。
    Java异常处理概述: Java语言提供了丰富的异常处理机制,使开发人员能够轻松地处理和管理异常情况。通过异常处理,程序能够在发生异常时采取适当的措施,例如将错误信息显示给用户或记录到日志中,并继续执行程序,而不会导致程序崩溃或其他严重...
    99+
    2024-02-06
    Java 异常处理 try-catch finally throw throws
  • Spring Boot 中密码加密的两种方法分别是怎样的
    Spring Boot 中密码加密的两种方法分别是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。先说一句:密码是无法解密的。大家也不要再问松哥微人事项目中的密码怎么解...
    99+
    2023-06-17
  • python数据分析中的异常值处理是怎样的
    本篇文章为大家展示了python数据分析中的异常值处理是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。异常值异常值是指样本中的个别值,其数值明显偏离其余的观测值。异常值也称离群点,异常值的分析...
    99+
    2023-06-29
  • 游戏开发中常见的10种编程语言分别是什么
    今天就跟大家聊聊有关游戏开发中常见的10种编程语言分别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。游戏开发是非常有经验和熟练的程序员的工作。 它可能花费数亿美元。 这是一项非...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作