Java异常处理

一、异常概述

Java将程序运行过程中所发生的不正常严重错误称为异常,但并不是所有的错误都称为异常。而对异常的处理称为异常处理。

一旦程序在运行的过程中出现了异常,且异常没有被处理,那么正在运行的异常极有可能被中断。

 

为了区分异常与错误,可以参考下面的博客:

https://blog.youkuaiyun.com/u011046058/article/details/47129657

 

二、异常分类

 

1、Exception异常分为RuntimeException (运行时异常)和CheckedException(检查时异常)。

 

2、RuntimeException是程序运行时抛出的异常。这种异常在不进行处理,Java源文件也能编译通过。RuntimeException异常类及其子类都是运行时异常。

示例:

 

3、CheckedException,又称非运行时异常。这种异常必须在编程时进行处理,否则就不能编译。Exception异常类及其子类(RuntimeException异常类及其子类)都是检查时异常。

示例:

 

三、异常处理

Java异常处理的方式有两种:一种是try catch和finally关键字捕获异常;另一种是throw和throws抛出异常。

1、捕获异常

语法结构:

该结构中try语句块是必须的,catch和finally语句块至少出现一个即可。

 

示例:

 

多重catch

 

finally关键字

 

finally 关键字用来创建在 try 代码块后面执行的代码块。

无论是否发生异常,finally 代码块中的代码总会被执行。

在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。

finally 代码块出现在 catch 代码块最后,语法如下:

try{

// 程序代码

}catch(异常类型1 异常的变量名1){

// 程序代码

}catch(异常类型2 异常的变量名2){

// 程序代码

}finally{

// 程序代码

}

实例

ExcepTest.java 文件代码:

public class ExcepTest{

public static void main(String args[]){

int a[] = new int[2];

try{

System.out.println("Access element three :" + a[3]);

}catch(ArrayIndexOutOfBoundsException e){

        System.out.println("Exception thrown :" + e);

}

finally{

a[0] = 6;

System.out.println("First element value: " +a[0]);

System.out.println("The finally statement is executed");

}

}

}

以上实例编译运行结果如下:

Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
First element value: 6
The finally statement is executed thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
First element value: 6
The finally statement is executed

 

2、throw和throws抛出异常

如果一个方法没有捕获一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。如果throw抛出的是运行时异常则不必使用throws关键字来声明。

 

下面方法的声明抛出一个 RemoteException 异常:

import java.io.*;

public class className{

public void deposit(double amount) throws RemoteException

{

// Method implementation

throw new RemoteException();

}

//Remainder of class definition

}

一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。

例如,下面的方法声明抛出 RemoteException 和 InsufficientFundsException:

import java.io.*;

public class className{

public void withdraw(double amount) throws RemoteException,      InsufficientFundsException

{

// Method implementation

}

//Remainder of class definition

}

 

四、自定义异常类

 

自定义的异常类应该包含两个构造器,一个是默认的构造器,另一个是带有详细描述信息的的构造器,便于代码的调试。定义异常类应注意以下几点:

 

  • 所有异常都必须是 Throwable 的子类。
  • 如果希望写一个检查性异常类,则需要继承 Exception 类。
  • 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。

 

示例:

使用异常类:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值