java 中异常处理

一:简介

程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。

Java提供了优秀的解决办法:异常处理机制。

二:Java异常的分类和类结构图

Java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。

Throwable又派生出Error类和Exception类。

错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。

异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。

三:异常处理的基本语法

在编写代码处理异常时,对于检查异常,有2种不同的处理方式:使用try…catch…finally语句块处理它。或者,在函数签名中使用throws 声明交给函数调用者caller去解决。

try…catch…finally语句块

try{
     //try块中放可能发生异常的代码。
     //如果执行完try且不发生异常,则接着去执行finally块和finally后面的代码(如果有的话)。
     //如果发生异常,则尝试去匹配catch块。
 
}catch(SQLException SQLexception){
    //每一个catch块用于捕获并处理一个特定的异常,或者这异常类型的子类。Java7中可以将多个异常声明在一个catch中。
    //catch后面的括号定义了异常类型和异常参数。如果异常与之匹配且是最先匹配到的,则虚拟机将使用这个catch块来处理异常。
    //在catch块中可以使用这个块的异常参数来获取异常的相关信息。异常参数是这个catch块中的局部变量,其它块不能访问。
    //如果当前try块中发生的异常在后续的所有catch中都没捕获到,则先去执行finally,然后到这个函数的外部caller中去匹配异常处理器。
    //如果try中没有发生异常,则所有的catch块将被忽略。
 
}catch(Exception exception){
    //...
}finally{
 
    //finally块通常是可选的。
   //无论异常是否发生,异常是否匹配被处理,finally都会执行。
   //一个try至少要有一个catch块,否则, 至少要有1个finally块。但是finally不是用来处理异常的,finally不会捕获异常。
  //finally主要做一些清理工作,如流的关闭,数据库连接的关闭等。 
}

throws 函数声明

throws声明:如果一个方法内部的代码会抛出检查异常(checked exception),而方法自己又没有完全处理掉,则javac保证你必须在方法的签名上使用throws关键字声明这些可能抛出的异常,否则编译不通过。

public void foo() throws ExceptionType1 , ExceptionType2 ,ExceptionTypeN
{ 
     //f可以抛出 ExceptionType1 , ExceptionType2 ,ExceptionTypeN 类的异常,或者他们的子类的异常对象。
}
package cc;

import java.util.*;

public class p1 { 
  static int quotient(int x, int y) throws MyException { // 定义方法抛出异常 
    if (y < 0) { // 判断参数是否小于0 
      throw new MyException("除数不能是负数"); // 异常信息 
    } 
    return x/y; // 返回值 
  } 
  public static void main(String args[]) { // 主方法 
    int a =3; 
    int b =-1;  
    try { // try语句包含可能发生异常的语句 
      int result = quotient(a, b); // 调用方法quotient() 
    } catch (MyException e) { // 处理自定义异常 
      System.out.println(e.getMessage()); // 输出异常信息 
    } catch (ArithmeticException e) { // 处理ArithmeticException异常 
      System.out.println("除数不能为0"); // 输出提示信息 
    } catch (Exception e) { // 处理其他异常 
      System.out.println("程序发生了其他的异常"); // 输出提示信息 
    } 
  } 
  
} 
class MyException extends Exception { // 创建自定义异常类 
  String message; // 定义String类型变量 
  public MyException(String ErrorMessagr) { // 父类方法 
    message = ErrorMessagr; 
  } 
  
  public String getMessage() { // 覆盖getMessage()方法 
    return message; 
  } 
}

链接

猜你喜欢

转载自blog.csdn.net/CC_1012/article/details/89295048