zoukankan      html  css  js  c++  java
  • JavaSE之Exception和Error有什么区别?

    Q:请对比Exception和Error,另外,运行时异常与一般异常有什么区别?

    考点分析

       从概念的角度考察java异常的处理机制,分析Exception和Error的区别。其次,理解其概念后,又该如何去处理好对应的异常:(1) 理解好异常的设计和分类;(2)理解好如何去捕获处理异常。

      (1)理解Throwable、Exception、Error的设计和分类

    (2)理解Java语言中操作Throwable的元素和实践

      掌握最基本的语法是必须的,如try-catch-finally块,throw、throws关键字等。与此同时,也要懂得如何处理典型场景。

    参考回答 

      Exception和Error都是继承了Throwable类,在Java中只有Throwable类(或其子类)的实例对象才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。

      Exception和Error体现了Java平台设计者对不同异常情况的分类:

    • Error:一般是指java虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常应用程序无法处理这些错误,因此应用程序不应该捕获Error对象,也无须在其throws子句中声明该方法抛出任何Error或其子类。常见的比如OutOfMemoryError之类,都是Error的子类。
    • Exception:是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。Exception又分为可检查(checked)异常和不检查(unchecked)异常。
      • 可检查异常(非运行时异常),是RuntimeException以外的异常,类型上都属于Exception类和其子类,如IOException、SQLException等以及用户自定义的Exception异常。对于这种异常,java编译器强制要求我们必须对出现的这些异常进行处理,否则程序就不能编译通过。
      • 不检查异常(运行时异常),其异常都是RuntimeException类及其子类,如 NullPointerException、ArrayIndexOutOfBoundsException之类,这些异常可以选择在程序里捕获处理,也可以不处理,一般是由程序逻辑错误引起的,从逻辑的角度去避免这种异常的发生,如果不处理该异常,程序会把异常一直往上层抛,一直到最上层,导致线程退出或者程序退出。

    NoClassDefFoundError和ClassNOtFoundException的区别?

    (1)ClassNotFoundException是一个可检查异常(非运行时异常),当应用程序运行的过程中尝试使用类加载器去加载Class文件的时候,如果没有在classpath中查找到指定的类,就会抛出ClassNotFoundException。一般情况下,当我们使用Class.forName()或者ClassLoader.loadClass以及使用ClassLoader.findSystemClass()在运行时加载类的时候,如果类没有被找到,那么就会导致JVM抛出ClassNotFoundException。

      当我们使用JDBC去连接数据库的时候,我们一般会使用Class.forName()的方式去加载JDBC的驱动,如果我们没有将驱动放到应用的classpath下,那么会导致运行时找不到类,所以运行Class.forName()会抛出ClassNotFoundException。

    (2)NoClassDefFoundError是一个错误,程序本身无法去恢复和预防错误。当JVM在加载一个类的时候,如果这个类在编译时是可用的,但是在运行时找不到这个类的定义的时候,JVM就会抛出一个NoClassDefFoundError错误。比如当我们在new一个类的实例的时候,如果在运行是类找不到,则会抛出一个NoClassDefFoundError的错误。

      当我们编写成功后,把某个xx.class文件删除,程序就会停止运行并显示这个错误。

    参考:

      极客时间:《Java核心技术面试精讲

      牛客网:https://www.nowcoder.com/questionTerminal/a679dbc19a6a41c580a50e86fbdfc185

  • 相关阅读:
    .Net 平台下的互联网架构新思考
    图形化机构树静态页面
    互联网应用架构谈
    解决android调用IIS Express中的WCF服务时,出现错误400问题
    远程连接sql server 数据库的方法
    WPF样式——多条件触发器
    Ubuntu 16.04 安装 RabbitMQ
    session共享个人小结
    Nginx负载均衡配置
    MySQL数据库设置主从同步
  • 原文地址:https://www.cnblogs.com/GuixinChan/p/13499756.html
Copyright © 2011-2022 走看看