在java的日常使用当中,总是会有各种各样的问题出现。今天就为大家介绍一下,在java中怎样用关键字来声明,以及怎样自定义异常。
首先,在使用该方法的前提是,这个方法没有捕获到一个检查性异常,那么该方法必须使用throws关键字来声明。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 }
同时需要注意,一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。
举个例子,下面的方法声明抛出RemoteException和InsufficientFundsException:
import java.io.*; public class className { public void withdraw(double amount) throws RemoteException , InsufficientFundsException { // Method implementation } //Remainder of class definition }
还有一种方法是用finally关键字来声明。
一般来说,finally关键字用来创建在try代码块后面执行的代码块。所以无论是否发生异常,finally代码块中的代码总会被执行。并且在finally代码块中,可以运行清理类型等收尾善后性质的语句。
当finally代码块出现在catch代码块最后,语法如下:
try { // 程序代码 } catch (异常类型1 异常的变量名1) { // 程序代码 } catch (异常类型2 异常的变量名2) { // 程序代码 } finally { // 程序代码 }
下面用一个实例展示:
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
同时需要注意的是:1.catch不能独立于try存在;2.在try/catch后面添加finally块并非强制性要求的;3.try代码后不能既没catch块也没finally块;4.try, catch, finally块之间不能添加任何代码。
那么,我们应该怎么样来自定义异常呢?
首先,我们编写的时候应该要注意以下几点:1.所有异常都必须是Throwable的子类;2.如果希望写一个检查性异常类,则需要继承Exception 类;3.如果你想写一个运行时异常类,那么需要继承RuntimeException类。
我们可以像下面这样定义自己的异常类:
class MyException extends Exception {}
并且只继承Exception类,来创建的异常类是检查性异常类。
下面的InsufficientFundsException类是用户定义的异常类,它继承自Exception。一个异常类和其它任何类一样,包含有变量和方法。
下面是一个实例,这个实例是一个银行账户的模拟,通过银行卡的号码完成识别,可以进行存钱和取钱的操作:
// 文件名InsufficientFundsException.java import java.io.*; //自定义异常类,继承Exception类 public class InsufficientFundsException extends Exception { //此处的amount用来储存当出现异常(取出钱多于余额时)所缺乏的钱 private double amount; public InsufficientFundsException(double amount) { this.amount = amount; } public double getAmount() { return amount; } }
为了展示如何使用我们自定义的异常类,在下面的CheckingAccount类中包含一个withdraw()方法抛出一个InsufficientFundsException异常,代码展示:
// 文件名称 CheckingAccount.java import java.io.*; //此类模拟银行账户 public class CheckingAccount { //balance为余额,number为卡号 private double balance; private int number; public CheckingAccount(int number) { this.number = number; } //方法:存钱 public void deposit(double amount) { balance += amount; } //方法:取钱 public void withdraw(double amount) throws InsufficientFundsException { if (amount <= balance) { balance -= amount; } else { double needs = amount - balance; throw new InsufficientFundsException(needs); } } //方法:返回余额 public double getBalance() { return balance; } //方法:返回卡号 public int getNumber() { return number; } }
下面的BankDemo程序示范了如何调用CheckingAccount类的deposit()和withdraw()方法。代码展示:
//文件名称 BankDemo.java public class BankDemo { public static void main(String[] args) { CheckingAccount c = new CheckingAccount(101); System.out.println("Depositing $500..."); c.deposit(500.00); try { System.out.println("\nWithdrawing $100..."); c.withdraw(100.00); System.out.println("\nWithdrawing $600..."); c.withdraw(600.00); } catch (InsufficientFundsException e) { System.out.println("Sorry, but you are short $" + e.getAmount()); e.printStackTrace(); } } }
同时,通过编译上面三个文件,并运行程序BankDemo,得到结果如下所示:
Depositing $500... Withdrawing $100... Withdrawing $600... Sorry, but you are short $200 .0 InsufficientFundsException at CheckingAccount.withdraw(CheckingAccount.java: 25) at BankDemo.main(BankDemo.java: 13)
通过上文我们可以得知怎么用关键字来声明,同时如何自定义异常。更多有关java常见问题,敬请关注奇Q工具网。
推荐阅读: