`
李瑞辉++
  • 浏览: 20808 次
  • 性别: Icon_minigender_1
  • 来自: 信阳
社区版块
存档分类
最新评论

异常机制 小结

 
阅读更多

异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。

一.先介绍下面四

个类(来自java API 文档)。

  • Throwable

   Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。

   两个子类的实例,Error Exception,通常用于指示发生了异常情况。通常,这些实例是在异常情况的上下文中新近创建的,因此包含了相关的信息(比如堆栈跟踪数据)

  • Exception

  Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件,表示程序本身可以处理的异常。

  • Error

Error Throwable 的子类,表示仅靠程序本身无法恢复的严重错误,用于指示合理的应用程序不应该试图捕获的严重问题。

在执行该方法期间,无需在方法中通过throws声明可能抛出但没有捕获的 Error 的任何子类,因为Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过。

  • RuntimeException

   RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过,这种异常可以通过改进代码实现来避免。

 

二.Java语言中处理异常的五个关键词try, catch, throw, throwsfinally,try来执行一段程序,如果出现异常,系统会抛出一个异常,可以通过类型来捕捉(catch,或是在最后(finally)由默认处理器来处理.)

 

 

try{
 //程序块
}catch(Exception1  e){
 对Exception1  进行处理
} catch(Exception2  e){
 对Exception2  进行处理
}finally{
 最终处理块,不管异常是否被捕捉,这里都将执行.
}

 

 

三、Java异常处理机制

  对于可能出现异常的代码,有两种处理办法:

 

   1.在方法中用try...catch语句捕获并处理异常,catch语句可以有多个,用来匹配多个异常。例如: 

public void p(int x){ 
  try{ 
  ... 
  }catch(Exception e){ 
  ... 
  }finally{ 
  ... 
  } 
  }

 

 

   2、对于处理不了的异常或者要转型的异常,在方法的声明处通过throws语句抛出异常。例如:

 

 

public void test1() throws MyException{ 
  ... 
  if(....){ 
  throw new MyException(); 
  } 
  } 

 

 

 

  如果每个方法都是简单的抛出异常,那么在方法调用方法的多层嵌套调用中,Java虚拟机会从出现异常的方法代码块中往回找,直到找到处理该异常的代码块为止。然后将异常交给相应的catch语句处理。如果Java虚拟机追溯到方法调用最底部main()方法时,如果仍然没有找到处理异常的代码块,将按照下面的步骤处理:

    调用异常的对象的printStackTrace()方法,打印方法调用的异常信息。

    另外.finally语句在任何情况下都必须执行的代码,这样可以保证一些在任何情况下都必须执行代码的可靠性。finally语句先于return语句执行,而不论其先后位置,也不管是否try块出现异常。finally语句唯一不被执行的情况是方法执行了System.exit()方法。System.exit()的作用是终止当前正在运行的 Java 虚拟机。finally语句块中不能通过给变量赋新值来改变return的返回值,所以不要在finally块中使用return语句,没有意义还容易导致错误。

  最后还应该注意一下异常处理的语法规则:

  1try语句不能单独存在,可以和catchfinally组成 try...catch...finallytry...catchtry...finally三种结构,catch语句可以有一个或多个,finally语句最多一个,trycatchfinally这三个关键字均不能单独使用。

  2trycatchfinally三个代码块中变量的作用域分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。

  3、多个catch块时候,Java虚拟机会匹配其中一个异常类或其子类,就执行这个catch块,而不会再执行别的catch块。

  4throw语句后不允许有紧跟其他语句,因为这些没有机会执行。

  5、如果一个方法调用了另外一个声明抛出异常的方法,那么这个方法要么处理异常,要么声明抛出。

  那怎么判断一个方法可能会出现异常呢?一般来说,方法声明的时候用了throws语句,方法中有throw语句,方法调用的方法声明有throws关键字。

  throwthrows关键字的区别

  throw用来抛出一个异常,在方法体内。语法格式为:throw 异常对象。throws用来声明方法可能会抛出什么异常,在方法名后,语法格式为:throws 异常类型1,异常类型2...异常类型n

四、如何定义和使用异常类

  1、使用已有的异常类,假如为IOExceptionSQLException

 

    

try{ 
  程序代码 
  }catch(IOException ioe){ 
  程序代码 
  }catch(SQLException sqle){ 
  程序代码 
  }finally{ 
  程序代码 
  }

 

 

 

 2、自定义异常类

  创建Exception或者RuntimeException的子类即可得到一个自定义的异常类。例如 

 

 

 public class MyException extends Exception{ 
  public MyException(){} 
  public MyException(String smg){ 
  super(smg); 
  } 
  }

 

 3、使用自定义的异常

  用throws声明方法可能抛出自定义的异常,并用throw语句在适当的地方抛出自定义的异常。例如:

在某种条件抛出异常

 

public void test1() throws MyException{ 
  ... 
  if(....){ 
  throw new MyException(); 
  } 
  }

 

 

 

 

 

 

 

 将异常转型(也叫转译),使得异常更易读易于理解

 

 

 public void test2() throws MyException{ 
  ... 
  try{ 
  ... 
  }catch(SQLException e){ 
  ... 
  throw new MyException(); //异常转型
  } 
  }

 

 

   

 

 

五、运行时异常和受检查异常

  Exception类可以分为两种:运行时异常和受检查异常。

  1、运行时异常

  RuntimeException类及其子类都被称为运行时异常,这种异常的特点是Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过。例如,当除数为零时,就会抛出java.lang.ArithmeticException异常。

  2、受检查异常

  除了RuntimeException类及其子类外,其他的Exception类及其子类都属于受检查异常,这种异常的特点是要么用try...catch捕获处理,要么用throws语句声明抛出,否则编译不会通过。

  3、两者的区别

  运行时异常表示无法让程序恢复运行的异常,导致这种异常的原因通常是由于执行了错误的操作。一旦出现错误,建议让程序终止。

受检查异常表示程序可以处理的异常。如果抛出异常的方法本身不处理或者不能处理它,那么方法的调用者就必须去处理该异常,否则调用会出错,连编译也无法通过。 当然,这两种异常都是可以通过程序来捕获并处理的,比如除数为零的运行时异常:

 

 

 

public class HelloWorld { 
  public static void main(String[] args) { 
  System.out.println("Hello World!!!"); 
  try{ 
  System.out.println(1/0); 
  }catch(ArithmeticException e){ 
  System.out.println("除数为0!"); 
  } 
  System.out.println("除数为零后程序没有终止啊,呵呵!!!"); 
  } 
  } 
  运行结果: 
  Hello World!!! 
  除数为0! 
  除数为零后程序没有终止啊,呵呵!!!

 

 

 

 

 

六、Java异常处理的原则和技巧

  1、避免过大的try块,不要把不会出现异常的代码放到try块里面,尽量保持一个try块对应一个或多个异常。

  2、细化异常的类型,不要不管什么类型的异常都写成Excetpion

  3catch块尽量保持一个块捕获一类异常,不要忽略捕获的异常,捕获到后要么处理,要么转译,要么重新抛出新类型的异常。

 

分享到:
评论

相关推荐

    java异常机制小结

    Java 异常机制小结 Java 异常机制是 Java 语言中一个非常重要的方面,也是程序设计的一大难点。Java 语言在设计的当初就考虑到异常处理的框架的方案,使得所有的异常都可以用一个类型来表示,不同类型的异常对应...

    java异常小结

    当程序执行过程中遇到问题,异常机制会提供一个安全的出口,使得程序控制权能够转移到预先定义的异常处理器。传统的错误处理方式,比如通过特殊返回值来表示异常,存在一些问题,如混淆正确的返回值和异常值,降低...

    Python-错误和异常小结.doc

    本文将对Python的错误和异常进行小结,以供参考。 1. Python 异常类 Python是面向对象的语言,异常也是通过类来表示的。以下是一些常见的Python内置异常: - `BaseException`:所有异常的基类,它是所有其他异常...

    异常类:自定义异常类

    #### 小结 通过本示例,我们学习了如何在 Java 中创建和使用自定义异常类。自定义异常类不仅可以使代码更加清晰易读,还可以帮助开发者更精确地控制异常处理流程,提高程序的健壮性和可维护性。在实际开发中,合理...

    Java异常处理操作实例小结

    Java 异常处理操作实例小结 Java 异常处理是 Java 编程语言中的一种错误处理机制,用于捕获和处理运行时的异常情况。本文将通过实例形式总结分析 Java 异常处理操作的常见情况与相关处理技巧。 一、异常处理的使用...

    JDBC个人小结

    ### JDBC个人小结 #### 一、JDBC简介与初始化 **JDBC**(Java Database Connectivity)是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 Java 编程语言编写的接口和类组成。...

    java异常讲解

    #### 七、小结 通过以上介绍,我们可以了解到Java异常处理机制的强大之处。正确地使用异常处理不仅可以提高程序的健壮性,还可以让程序更加易于维护和扩展。在实际开发中,合理地使用异常处理机制对于构建高质量的...

    软件测试小结

    ### 软件测试小结:深度解析与关键知识点 #### 概述 软件测试作为软件开发生命周期中不可或缺的一环,旨在确保软件产品的质量和可靠性。本文将从测试的基本概念出发,深入探讨测试的目的、原则,以及不同类型的...

    Java异常小结

    Java异常处理是编程中至关重要的一个部分,它用于处理程序运行时可能出现的错误或异常情况。在Java中,异常处理采用了一种面向...通过理解和熟练运用Java的异常处理机制,开发者可以编写出更健壮、更易于维护的代码。

    Java异常处理-自定义异常类及课后练习

    #### (1)小结:异常处理5个关键字 - `try`:包含可能抛出异常的代码块。 - `catch`:捕获并处理异常的代码块。 - `throw`:抛出一个异常实例。 - `throws`:在方法签名上声明方法可能抛出的异常。 - `finally`:...

    反激小结.rar_flyback_反激电源_反激设计小结_开关电源_开关电源设计

    - **保护机制**:包括过压、过流、短路和过热保护,以确保电源在异常情况下的安全性。 3. **效率优化**: - **最小化开关损耗**:通过优化开关器件的开关速度和选择低内阻的元件可以降低开关损耗。 - **谐振电路...

    预防接种服务规范培训小结1.doc

    疫苗与免疫程序的讲解旨在让参与者了解不同疫苗的作用机制和接种时间表,以确保适时、适龄地进行预防接种。 预防接种规范实施部分,要求医护人员严格按照法律法规执行接种操作,确保接种的安全性和有效性。疫苗及冷...

    Java 异常处理小结,从入门到精通

    本文将深入探讨Java的异常处理机制,包括内置异常、异常处理的核心方法、异常捕获以及自定义异常。 首先,Java内置异常是Java标准库中已经预定义的异常类型,它们直接或间接地继承自`Throwable`类。`Throwable`是...

    Spring_AOP_学习小结 Spring_AOP_学习小结 Spring_AOP_学习小结

    4. ThrowsAdvice(异常通知):在方法抛出异常后调用。 5. IntroductionInterceptor(引入拦截器):用于向目标对象添加新的字段或方法。 五、Spring AOP切入点 1. Pointcut:定义了匹配特定Joinpoint的规则,...

    Try…Catch使用小结

    总之,Try…Catch 机制是异常处理的核心,它帮助我们优雅地处理预期之外的问题,保证程序的健壮性。正确地使用 Try…Catch 结构,结合自定义异常和资源管理策略,可以提高代码的稳定性和可维护性。

    javascript编程异常处理实例小结

    JavaScript提供了一套异常处理机制,帮助开发者捕获和处理运行时发生的异常,从而保证程序的健壮性和用户的良好体验。 2. 常见的JavaScript异常类型 - TypeError:当操作一个未初始化的变量时或者在期望使用特定...

    php中异常处理方法小结

    在进行PHP编程时,异常处理是保障程序稳定运行的一个非常重要的机制。从PHP 5版本开始,PHP支持了与其它编程语言类似的异常处理方式,主要涉及到以下几个知识点: 1. 异常处理基本概念:异常处理是指当程序运行中...

    java基础小结

    《Java基础小结》 Java,作为一种广泛应用的编程语言,以其跨平台、面向对象的特点深受开发者喜爱。这篇博文和随附的PDF笔记旨在总结Java的基础知识,帮助初学者巩固理解,同时也为有经验的开发者提供回顾参考。 1...

    车间安全生产工作月度小结.doc

    车间安全生产工作月度小结是企业在生产管理中的一项重要内容,旨在总结过去一个月的安全生产情况,查找潜在风险,提出改进措施,以确保生产过程的安全、高效。4月份的安全生产工作表现出良好的态势,以下是对该月度...

Global site tag (gtag.js) - Google Analytics