} } 3.仿照例6.5创建一个自己的异常类。 要求:在定义银行类时,若取钱数大于余额则作为异常处理(InsufficientFundsException)。 提示: (1)产生异常的条件是余额小于取款额,因此是否抛出异常要先判断该条件。 (2)确定产生异常的方法,应该在取钱方法(withdrawal)中产生异常Insufficient Funds Exception。 (3)处理异常安排在调用withdrawal的时候,因此withdrawal方法要声明异常,由上级方法捕获并处理。 (4)将例6.7,例6.8输入计算机,观察运行结果。 三.实验过程 1.(1)错误与异常的区别: 错误:指在程序编译时如果程序进入死循环,或递归无法结束,或内存溢出。错误只能在编程阶段解决,只能依靠其他程序干预,否则会一直处于非正常状态。 异常:指运算时除数为0,或操作数超过范围,或打开一个文件时发现文件并不存在,或欲装入的类文件丢失,或网络连接中断等。 (2) java提供了一种利用简单易行的方法检查和处理运行时产生的错误的异常处理机制,它是通过面向对象的方法来处理异常的。在java程序的执行过程中,如果出现了异常事件,就会生成一个异常对象。生成的异常对象将传递给java运行时系统,这一异常的产生和提交过程成为抛弃异常。当java运行时系统得到一个异常对象时,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这类异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获异常。 (3) 根据程序对错误与异常的处理方式,可以将java中的异常分为Error类,RuntimeException类和Exception类。其中Error类包括的是一些严重的程序不能处理的系统错误类,如内存溢出,虚拟机错误,栈溢出等。这类错误一般主要与硬件有关,与程序本身无关,通常由系统进行处理,程序本身无需去捕获和处理。程序运行过程中,可能出现RuntimeException类的异常数量相当大,对于运行时的异常类,如数组越界,算术异常等,应通过程序尽量避免而不是去捕获它。 (4) 为了避免程序运行时可能出现的错误,将程序代码放在try程序块中,紧跟在try语句后面包括一个catch语句,用来指定需要捕获的异常类型。 在程序中发生异常时,程序员可以抛出(throw)一个自定义异常类的实例,将其放到异常队列中去,并激活java的异常处理机制。 当抛出一个异常时,程序的执行就不再是线性的,这样就有可能导致方法的执行中断。在java语言中,使用finally语句来解决此类问题。Finally语句创建一个代码块,在try/catch语句执行后执行,不管是否抛出一个异常,系统都将执行finally语句的程序代码。 2. import java.io.*; 第11页
public class ExceptionTest { public static void main(String args[]) { for(int i=0;i<4;i++){ int k; try{ switch(i){ case 0://divided by zero int zero=0; k=911/zero; break; case 1://null pointer int b[]=null; k=b[0]; break; case 2://array index out of bound int c[]=new int[2]; k=c[9]; break; case 3://string index out of bound char ch=\ break; } }catch(Exception e){ System.out.println(\ System.out.println(e); } } } } 3. import java.io.*; import java.util.*; public class L_06_07 { public static void main(String args[]){ L_06_07 grades=new L_06_07(); grades.calculateGrades(); } //Instance variables Vector names=new Vector(); Vector marks=new Vector(); public void calculateGrades(){ int i; loadData(\调用loadData()方法读数据 for(i=0;i System.out.print(names.elementAt(i)); System.out.println(\ } } public void loadData(String filename){ //Define local variables FileReader inputFile; Reader reader; StreamTokenizer st; String aString; int aNumber,next; try{ //Set uplink tofile and tokenreader inputFile=new FileReader(\ reader=new BufferedReader(inputFile); st=new StreamTokenizer(reader); System.out.print(\开始读入数据:\ //Read contents of file while((next=st.nextToken())!=st.TT_EOF){ if (next==st.TT_NUMBER){ aNumber=(int)st.nval; marks.addElement(new Integer(aNumber)); } else{ aString=st.sval; System.out.print(aString+\ names.addElement(aString); } }//End of while inputFile.close();//Nowclose the file }//End of try catch(IOException e){ System.out.println(\读文件出现问题。\ }finally{ System.out.println(\读文件结束.\ } } } 4. import java.io.*; class Account{ public String account; public double balance=0; public Account(String account,double balance)//构造方法 { this.account=account; 第13页 this.balance=balance; } public void deposit(double money){ this.balance+=money; } public double getbalance(){ return this.balance; } public double withdrawl(double money) throws InsufficientFundsException { if(money>this.balance){ throw new InsufficientFundsException(); } this.balance-=money; } public void process(boolean save, double money) { if(save) { System.out.println(\你的余额为:\ } else { try{ double left = withdrawl(money); } catch(InsufficientFundsException e) { } } } public class Bank { public static void main(String args[]){ Account a=new Account(\ System.out.println(\账户余额为\元\ a.deposit(500); System.out.println(\你存入\元\ System.out.println(\账户余额为\元\ a.withdrawl(300); } } 5. class DivideByZeroException extends Exception{ public Object offender; public DivideByZeroException(Object anObject){ super(\ offender=anObject; } } public class L_06_02 { int x,y; 第14页 public static void main(String args[]){ L_06_02 my=new L_06_02 (5,0); //对5除以0进行测试 try{ my.test(); }catch(DivideByZeroException e){ System.out.println(\零作除数。\ } } public L_06_02 (int a,int b){ x=a; y=b; } public void test() throws DivideByZeroException{ if(y==0) throw new DivideByZeroException(this); else System.out.println(x/y); } } 四.实验结果 实验2的运行结果如下: 实验3的运行结果如下: 第15页