第七章作业

it2024-03-10  67

1. 简述Java Error类与Exception类的区别。

1、Error异常和Exception异常都继承于throwable异常类。

2、throwable异常类下面分为两个子类:error异常(又名系统异常),和Exception异常(编码,环境,操作异常)

3、Error异常是系统异常(都是非检查异常),主要包括虚拟机错误(virtualmachineError)、线程死锁(threaddeth)。一旦出现Error异常就代表着程序崩溃了,可将其看作程序的终结者。

4.Exception异常包括两个大类:非检查异常(RuntimeException)和检查异常。

- RuntimeException异常主要包括四种异常:空指针异常,数组下标越界异常、类型转换异常、算术异常。由java虚拟机自动抛出和自动捕获。 - 检查异常:主要是一些文件异常,日志异常,sql异常,和一些需要我们人为干预的异常。检查异常,需要手动添加异常的捕获和处理。

2. 简述异常处理的两种方式,并举例说明区别。

声明抛出处理:声明抛出也分为隐式和显式两种方式。隐式声明抛出:异常类型是RuntimeException或者是其子类,程序可以对异常不作任何声明与处理。显式声明抛出:对异常进行声明处理,当编译遇到该类型的异常时就会抛出。注意:当子类覆盖父类的方法时,子类抛出的异常类型应和父类抛出的异常相同或为其子类,不能为其父类。也就是子类抛出的异常范围应该更小、更精确。 隐式声明抛出 package bookcode.ex7.part7_5; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ioEXception { private static int[] x; public static void main(String[] args) { // 隐式 System.out.println(x[0]); String foo = args[1]; System.out.println("foo = " + foo); } }

显式声明抛出

package bookcode.ex7.part7_5; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ioEXception { public static void main(String[] args) throws IOException {//显式声明抛出 BufferedReader keyin = new BufferedReader(new InputStreamReader(System.in)); String c1; int i = 0; String[] e = new String[10]; while (i < 10) { c1 = keyin.readLine(); e[i] = c1; i++; } } } ```javascript 捕获处理 package bookcode.ex7.part7_5; public class ioEXception { public static void main(String args[]) { try { int a[] = new int[2]; System.out.println("Access element three :" + a[3]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Exception thrown :" + e); } System.out.println("Out of the block"); } }

3. 选取RuntimeException类的五个子类,编写抛出并捕获上述子类异常的程序。(例如算术异常,空指针异常,类转换异常,数组越界异常等)

算数异常

package bookcode.ex7.partTest; public class arithmeticException { public static void main(String args[]){ int a, b, c; a = 9; b = 0; c = 8; System.out.println(a / b + c); } }

空指针异常

package bookcode.ex7.partTest; public class nullException { private static int[] x; public static void main(String args[]){ System.out.println(x[0]); } }

类转换异常

package bookcode.ex7.partTest; public class classCastException { static class One { public void foo() { System.out.println("One"); } } static class Two extends One { public void foo() { System.out.println("Two"); } public void dosth(){ System.out.println("Two again"); } } public static void main(String[] args) throws Exception{ One t = new Two(); //向上转型,即父类引用指向子类对象,此时子类对象的类型为父类的类型 t.foo(); t.dosth();//编译错误 t = (Two)t; t.dosth();//编译错误 ((Two) t).dosth();//编译成功 } }

数组越界

package bookcode.ex7.partTest; public class listException { public static void main(String args[]){ String foo = args[1]; System.out.println("foo = " + foo); } }

空栈异常

package bookcode.ex7.partTest; import java.util.Stack; public class stackException { public static void main(String args[]){ Stack stack = new Stack(); Object ob = stack.pop(); } }

4. 仿照例7.9,自定义一个异常类,并在某场景下抛出该异常对象。

package bookcode.ex7.part7_5; public class InsufficientFundsException extends Exception { private double amount; public InsufficientFundsException(double amount) { this.amount = amount; } public double getAmount() { return amount; } } package bookcode.ex7.part7_5; 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; } }
最新回复(0)