zoukankan      html  css  js  c++  java
  • 黑马程序员系列第十篇 异常

    ASP.Net+Android+IOS开发  、Net培训、期待与您交流!

     

     目录:1、java中异常概述      2、java异常处理机制     3、java异常应用

     

    1、java中异常概述

    概念: 异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件。当条件生成时,错误将引发异常。

    异常类层次结构图(常用的就Exception)

    error

    这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefFoundError)等。这些错误是不可查的,因为它们在应用程序的控制和处理能力之 外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。在 Java中,错误通过Error的子类描述。

    Exception

    是程序本身可以处理的异常。Exception 类有一个重要的子类 RuntimeException。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。

    2、异常处理机制(抛出异常,捕捉异常)

            抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。

            捕获异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适 的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适 的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。

     

     3、java异常应用

     

    语法规则:

    1)  必须在 try 之后添加 catch 或 finally 块。try 块后可同时接 catch 和 finally 块,但至少有一个块。

    2) 必须遵循块顺序:若代码同时使用 catch 和 finally 块,则必须将 catch 块放在 try 块之后。

    3) catch 块与相应的异常类的类型相关。

    4) 一个 try 块可能有多个 catch 块。若如此,则执行第一个匹配块。即Java虚拟机会把实际抛出的异常对象依次和各个catch代码块声明的异常类型匹配,如果异常对象为某个异常类型或其子类的实例,就执行这个catch代码块,不会再执行其他的 catch代码块

    5) 可嵌套 try-catch-finally 结构。

    6) 在 try-catch-finally 结构中,可重新抛出异常。

    7) 除了下列情况,总将执行 finally 做为结束:JVM 过早终止(调用 System.exit(int));在 finally 块中抛出一个未处理的异常;计算机断电、失火、或遭遇病毒攻击。

     

        简单示例

     1 package Test;  
     2 import java.lang.Exception;  
     3 public class TestException {  
     4     static int quotient(int x, int y) throws MyException { // 定义方法抛出异常  
     5         if (y < 0) { // 判断参数是否小于0  
     6             throw new MyException("除数不能是负数"); // 异常信息  
     7         }  
     8         return x/y; // 返回值  
     9     }  
    10     public static void main(String args[]) { // 主方法  
    11         int  a =3;  
    12         int  b =0;   
    13         try { // try语句包含可能发生异常的语句  
    14             int result = quotient(a, b); // 调用方法quotient()  
    15         } catch (MyException e) { // 处理自定义异常  
    16             System.out.println(e.getMessage()); // 输出异常信息  
    17         } catch (ArithmeticException e) { // 处理ArithmeticException异常  
    18             System.out.println("除数不能为0"); // 输出提示信息  
    19         } catch (Exception e) { // 处理其他异常  
    20             System.out.println("程序发生了其他的异常"); // 输出提示信息  
    21         }  
    22     }  
    23   
    24 }  
    25 class MyException extends Exception { // 创建自定义异常类  
    26     String message; // 定义String类型变量  
    27     public MyException(String ErrorMessagr) { // 父类方法  
    28         message = ErrorMessagr;  
    29     }  
    30   
    31     public String getMessage() { // 覆盖getMessage()方法  
    32         return message;  
    33     }  
    34 }  

     

    ASP.Net+Android+IOS开发  、Net培训、期待与您交流!

  • 相关阅读:
    WPF/Sliverlight ScrollViewer与Panel(2)
    OpenGL学习笔记(7)多边形绘制
    OpenGL学习笔记(10)抗锯齿
    OpenGL学习笔记(9)颜色混合
    GLUT函数说明(转)
    OpenGL学习笔记(8)显示列表
    C#操作IIS的代码
    完整解决Flash载入中文FLASH乱码问题
    用C#的IIS上配置用户账号
    ASP.NET定时调用WebService 运行后台代码
  • 原文地址:https://www.cnblogs.com/blueFlowers/p/4977129.html
Copyright © 2011-2022 走看看