java什么是异常-描述下异常处理-,JAVA什么是异常处理

  java什么是异常?描述下异常处理?,JAVA什么是异常处理

  如何解决写爬虫IP受阻的问题?立即使用。

  什么是异常?

  结构不良的代码是无法运行的,这是Java的基本思想。

  发现错误的理想时间是在编译时。但是编译器并不能发现所有的错误,剩下的问题需要在程序运行的时候解决。这就要求错误能够以某种方式将适当的信息传递给特定的接收者。

  Java中异常处理的目的是用少量的代码简化大型可靠程序的生成,使你的应用程序中不存在未处理的错误,同时也带来了一个明显的好处:降低错误处理代码的复杂度。

  不正常,从字面上看,就是意料之外的意思。放到代码层面去理解,就是阻止当前的方法或者范围继续执行。异常是阻止程序按预期执行的事件。有三种类型的异常——检查异常、错误和运行时异常。

  在Java中,异常被视为对象,它们的基类是可抛出的。

  Java中的异常类型

  异常和错误直接源自Java Throwable。异常是可以抛出的基本类型。异常类型的异常可能在Java类库、方法和运行时故障中抛出。异常是指可恢复的异常,可以被编译器捕获;错误是指编译时和系统错误,是指系统在运行过程中出现了严重的错误,而且是不可恢复的错误。因为是JVM级别的严重错误,这个错误会导致程序终止执行。异常分为检查异常和运行时异常。

  异常类的层次结构图如下:

  典型的RuntimeException包括nullpointerexception、classcastexception、IndexOutOfBoundsException、IllegalArgumentException、ArrayStoreException(数组存储异常)、AruthmeticException(算术异常)、BufferOverflowException(缓冲区溢出异常)等。

  非RuntimeException(检查异常)包括IoException、SQLException、中断异常(中断异常——调用线程休眠时)、NumberFormatException(数字格式化异常)等。

  根据编译器检查方法,异常可以分为CheckedException和UncheckedException。Error和RuntimeException统称为UncheckedException。之所以这样称呼它们,是因为编译器不检查方法是处理还是抛出这两种类型的异常,所以这种类型的异常在编译期间不会被报告。默认情况下,虚拟机提供处理方法。除了Error和RuntimeException之外,其他异常都称为检查异常。

  Java如何处理异常

  试着抓住,试着抓住,试着抓住

  对于检查类型异常,我们要么处理它,要么在方法头中抛出它。

  公共静态void createFile()引发IOException{

  File File=new File( C:/test . txt );

  如果(!file.exists()){

  file . create new file();

  }

  }

  公共静态void main(String[] args) {

  尝试{

  create file();

  } catch (IOException ex) {

  //在此处理异常

  }

  }关于catch的几点注意事项:

  1)参数的异常类型必须是Throwable类或其子类。

  2)对于自顶向下的catch语句,参数类型必须按照从子类到父类的顺序,因为一旦匹配了一个类型,后续的catch就会被忽略。例如,IOException必须放在Exception之前,否则编译器会报告错误。

  3)可以有一个或多个catch语句,或者即使有finally语句,也不能有catch语句,比如try-finally。

  如果要捕获多个异常,可以使用多个catch语句。JDK7后来提供了另一种方式:多抓。

  尝试{

  //其他代码

  } catch(io exception SQLException ex){

  扔ex;

  }4)、不要忽略异常。空的catch块将使异常无法实现其预期目的,除非,例如,当关闭FileInputStream时,您不必执行任何恢复操作,因为您没有更改文件的状态,并且您已经从文件中读取了所需的信息,因此您不必终止正在进行的操作。

  最后要注意几点:

  finally中的代码将始终被执行,除非在执行try或catch语句时虚拟机退出(System.exit(1))。

  2) finally block可以做一些资源清理,比如关闭文件和游标。

  3)最终阻塞是不必要的。

  此外,如果return语句在try和finally块中都执行,则最终返回将是finally中的返回值。

  2.异常链

  经常想在捕捉到异常后再抛出一个,想保存原来的异常信息。这是异常链。在JDK1.4之后,Throwable子类可以接受一个cause对象作为构造函数中的参数来表示原始异常。通过这种方式将原始异常传递给新异常,即使新异常是在当前位置创建并抛出的,也可以通过这个异常链跟踪到异常的原始位置。

  但是在Throwable子类中,只有Error、exception和RuntimeException三个异常类为构造函数提供了cause参数,其他类型的异常都需要传递initCause()方法。例如,定义了CustomException类,可以这样使用:

  custom exception cmex=new custom exception();

  cmex.initCause(新的NullPointerException);

  抛cmex这样,CustomException继承自Exception或RuntimeException,后者是一个自定义异常。

  一般来说,自定义异常的功能如下:

  1)将支票型异常转化为非支票型异常。

  2)封装上下文信息,定义异常代码,异常发生时收集环境对象,有利于信息的传递。

  异常使用指南

  1.只有当你知道如何处理异常时才捕捉它们。

  2.用户定义的异常类型用于封装所有检查异常。

  3.在程序边界捕捉异常。比如在服务器对应客户端的请求下,出口处的catch里面可能会有异常,打包好的异常统一丢给客户端,以免暴露服务器的敏感信息。

  4.仅在异常情况下使用异常。不要习惯性地在所有代码中使用try-catch,因为它会影响性能。

  5.抛出一个异常,而不是抽象。如果方法抛出的异常与其执行的任务没有明显的联系,这种情况会让人不知所措。为了避免这个问题,更高级别的实现应该捕捉低级别的异常,并抛出可以根据高级抽象解释的异常。这种做法称为异常转换,如下所示:

  尝试{

  //使用较低层次的抽象来完成我们的投标

  } catch(lowerleveexception ex){

  抛出新的HigherLevelException(.);

  }另一种特殊的异常翻译叫做异常链,上面已经介绍过了。如果低级异常对于调试导致高级异常的问题非常有帮助,那么使用异常链是合适的。高层异常提供访问方法(Throwable.getCause)来获取低层异常。

  6.应该记录每个方法抛出的异常。使用Javadoc的@throws标记来记录抛出每个异常的条件。如果一个方法可能抛出多个异常,不要使用这些异常类的超类。如果不声明一个方法“throws Exception”或者“throws Throwable”,就没有指导。那是java。什么是例外?更多详情请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: