1. 编程学习网 > 编程教程 > java教程 > 第三十五篇 Java异常处理(2)

第三十五篇 Java异常处理(2)

第26章-Java异常处理(2)
异常捕获:
使用try和catch关键字可以捕获异常。将这二者的代码块放在异常可能发生的地方。
这样的代码我们称之为保护代码,使用语法如下:

try
{
   // 程序代码
}catch(ExceptionName e1)
{
   //Catch 块
}

Catch语句要包含捕获异常类型的声明,当保护代码块中发生一个异常时catch块就会检查出,若异常在catch块中异常则会被传递到块中,与传递参数的方法类似。
实现代码如下:

// 文件名 : ExcepTest.java
import java.io.*;
public class ExcepTest{
 
   public static void main(String args[]){
      try{
         int arr[] = new int[2];
         System.out.println("Access element three :" + arr[3]);
      }catch(ArrayIndexOutOfBoundsException e){
         System.out.println("Exception thrown  :" + e);
      }
      System.out.println("Out of the block");
   }
}

多重捕获块:
所谓多重捕获就是在try代码块之后跟随多个catch代码块,实现代码如下:

try{
  // 程序代码
}catch(异常类型1 异常的变量名1){
 // 程序代码
}catch(异常类型2 异常的变量名2){
 // 程序代码
}catch(异常类型2 异常的变量名2){
 // 程序代码
}

异常会在这三个块中进行匹配:
异常:catch_1---->不匹配
传递给catch_2---->不匹配
传递给catch_3---->匹配
若不匹配异常会在这三个中传递直到全部传递一遍。
若写了4个catch则会使以下情况:
异常:catch_1---->不匹配
传递给catch_2---->不匹配
传递给catch_3---->匹配/*catch_3接受了异常则不会传递给catch_4
没有传递给catch_4。
实现代码如下:

try {
  file = new FileInputStream(fileName);
  x = (byte) file.read();
} catch(FileNotFoundException f) { // Not valid!
  f.printStackTrace();
  return -1;
} catch(IOException i) {
  i.printStackTrace();
  return -1;
}

 
throws/throw关键字:
若在所使用的方法中没有捕获到一个检查性异常则该方法需要使用throws关键字来声明,throws关键字放在签名的尾部。
代码实现如下(抛出一个RemoteException异常):

import java.io.*;
public class className
{
  public void deposit(double amount) throws RemoteException
  {
    // Method implementation
    throw new RemoteException();
  }
  //Remainder of class definition
}

一个方法抛出多个异常(用逗号隔开),参考上面的代码在throws RemoteExcetion后加逗号再添加别的异常。
 
Finally关键字:
注意以下几点:
Finally用来创建在try代码块后的代码块。
无论异常与否,finally代码块中的内容总会被执行。
在finally代码块中出现在catch代码块的最后。
实现语法如下:

try{
  // 程序代码
}catch(异常类型1 异常的变量名1){
  // 程序代码
}catch(异常类型2 异常的变量名2){
  // 程序代码
}finally{
  // 程序代码
}

实现代码:
public class ExcepTest{
  public static void main(String args[]){
    int arr[] = new int[2];
    try{
       System.out.println("Access element three :" + arr[3]);
    }catch(ArrayIndexOutOfBoundsException e){
       System.out.println("Exception thrown  :" + e);
    }
    finally{
       arr[0] = 6;
       System.out.println("First element value: " +arr[0]);
       System.out.println("The finally statement is executed");
    }
  }
}

注意事项:
Catch不能独立与try存在。
Try代码后面必须有catch块或finally块。
这三者之间不能存在其他代码。
 
自定义异常:
用户可在继承Exception类的基础上自定义异常类。
大体步骤如下:
1. 创建自定义异常类。
2. 在方法中通过throw关键字抛出异常对象。
3. 若处理异常尝试使用try-catch的语句进行捕获并处理。不然就要使用throws关键字指明要抛出给方法调用者的异常,才能继续进行下一步操作。
4. 再出现异常调用者中来捕获并处理。
实现代码:

public class MyException extends Exception{//创建自定义异常,继承Exception类
  public MyException(String Error){//构造方法
    super(ErrorMessage);//父类构造
  }
}

实例代码:
public class Tran{
  static int avg(int number1 ,int number2 )throws MyException{
    if(number1<0||number2<0){
      throw new  MyException("不可用负数");
    }
    if(number1>100||number2>100){
      throw new MyException("数值过大");
    }
    return (number1*number2)/2;
  }
}
public static void main(String[] args){
    try{
      int result=avg(102,105);
      System.out.println(result);
    }
    catch(MyException e){
      System.out.println(e);
 
    }
}
 

通用异类:
在Java中定义了两种类型的异常和错误。
· JVM(Java虚拟机) 异常:由 JVM 抛出的异常或错误。例如:NullPointerException 类,ArrayIndexOutOfBoundsException 类,ClassCastException 类。
· 程序级异常:由程序或者API程序抛出的异常。例如 IllegalArgumentException 类,IllegalStateException 类。

本文由IT教学网整理发布,转载请注明出处:http://www.itjx.com/jiaocheng/java/477.html

联系我们

在线咨询:点击这里给我发消息

咨询电话:400-998-2681

工作时间:7*24小时无休