第十二章
12.1:它能使方法抛出一个异常给它的调用者,并由调用者处理该异常。如果没有这个能力,那么被调用的方法就必须自己处理异常或者终止该程序。被调用的方法通常不知道在出错的情况下该做些什么,这是库方法的一般情况。库方法可以检测出错误,但是只有调用者才知道出现错误时需要做些什么。异常处理最根本的优势就是将检测错误(由被调用的方法完成)从处理错误(由调用方法完成)中分离出来。
12.2:第一条语句:System.out.println(1 / 0);会抛出异常。
12.3:将Long.MAX_VALUE加上1会超出long值的范围,但是当前的java没有把这种情况报告为例外。
12.4:出现异常时,JVM会抛出异常,如果需要捕获异常,可以编写try-catch语句。
12.5:如果value = 30,则输出结果为:

Value is too small
 Continue after the catch block

如果value = 50,则输出结果为:

Continue after the catch block

12.6:输出结果为:
a)0 1
b)0
12.7:Throwable 类是所有异常类的根。所有的 Java 异常类都直接或者间接地继承自
Throwable。这些异常类可以分为三种主要类型:系统错误、异常和运行时异常。
12.8:将抛出异常名为:
a)ArithmeticException
b)IndexOutOfBoundsException
c)IndexOutOfBoundsException
d)ClassCastException
e)NullPointerException
f)No exception
12.9:声明异常的目的是告诉java运行时系统可能会出现的异常情况,可以在方法声明中使用抛出关键字声明异常,可以声明多个异常,用逗号隔开。
12.10:由于这个方法抛出 RuntimeException (免检异常)子类 rilegalArgumentException的一个实例,所以,如果不使用 try语句,这个测试程序也能编译。如果方法抛出 RuntimeException和 Error 之外的异常(即必检异常),那么此方法就必须在 try-catch 块内调用。
12.11:使用方法中抛出语句抛出异常,即throw(exceptionName),不可以在throw语句中抛出多个异常。
12.12:关键字throw是抛出异常的关键字,关键字throws是声明异常的关键字。
12.13:
1)不会执行statement3.
2)不会执行statement4,因为try语句执行完后程序就结束了。
3)会执行statement4.
12.14:显示:RuntimeException
12.15:显示:ArithmeticException
12.16:显示:RuntimeException in method()
After the method call
12.17:getMessage()在Throwable类中被定义,以返回描述异常的字符串。
12.18:若要向控制台显示跟踪信息,可以执行的操作。
12.19:没有异常发生时,try-catch 块的存在不会引起额外的系统开销。
12.20:代码修改为:

public void m(int value) throws Exception{
 if(value < 40)
 throw new Exception(“value is too small”);
 }


12.21:
1)如果没有异常发生,会执行statement4,也会执行statement5.
2如果异常类型是 Exceptionl, 会执行 statement4,也会执行 statements5.
3如果异常不是类型 Exceptionl,会执行 statement,不会执行 statements5.
12.22:该方法是正确的,但是有一点,不要把异常处理用作简单的逻辑测试。

public static Boolean isNumeric(String token) {
 for (int I = 0; I < token.length(); i++) {
 if (!(token.chatAt(i) >= ‘0’&& token.chatAt(i) <= ‘9’)) {
 return false;
 }
 }
 return true;
 }


12.23:

  1. 如果没有异常发生,会执行语句 statement4,也会执行语句 statement5。
  2. 如果异常类型是 Exceptionl,会执行 statement4,也会执行 statement5.
  3. 如果异常类型是 Exception2,会执行 statement4 ,不会执行 statement5。
  4. 如果异常类型不是 Exceptionl以及 Exception2 类型的,那么会执行 statement4 ,不会执行 statement5 。 12.24:输出结果为: java.lang.Exception:
New info from methodl at ChainedExceptionDemo.methodlfChainedExceptionDemo.java:16) at ChainedExceptionDemo.main(ChainedExceptionDemo.java:4)

12.26:输出结果为: Exception in method() Exception in main

12.27:在 Windows 中目录的分隔符是反斜杠()。但是在 Java 中,反斜杠是一个特殊的 字符,应该写成 \的形式,故改为:new File(“c:\book\test.dat”);

12.28:创建一个file对象,利用file.exists()表示文件是否存在,file.delete()表示删除文件,file.renameTo(File)表示重命名文件名,使用file.length()表示获得文件的大小。

12.29:不能使用File类进行输入/输出,File类可用于获取文件的属性和操作文件;不是创建一个 File 对象就是在磁盘上创建一个文件。

12.30:创建对象 PrintWriter output = new PrintWriter(FileName);以向文件写数据。此语句可能引发异常,java迫使你编写代码来处理异常,处理它的一种方法是在方法声明中声明抛出异常。如果不调用close()方法,则可能无法正确保存数据。

12.31:输出结果为: Amount is 32.320000 3.232000e+01 Amount is 32.3200 3.2320e+01 False Java 12.32:

public class Test {
 public static void main (String[] args) throws Exception {
 try(java.io.PrintWriter output = new java.io.PrintWriter(“temp.txt”)) {
 output.printf(“amount is %f %e\r\n”, 32.32, 32.32);
 output.pr1ntf(“amount 1s %5.4f %5.4e\r\n, 32.32,32.32);
 output.printf(”%6b\r\n",(1 > 2));
 output.printf(“%6s\r\n”,“java”);
 output.close();
 }
 }


12.33:Scanner input = new Scanner(FileName);从文件读取数据。Main方法中的语句可能会引发异常,java你迫使编写代码来处理异常,处理异常的一种方法就是在方法声明中声明抛出异常。如果不调用close()方法,则可能无法正确保存数据。
12.34如果试图对一个不存在的文件创建 Scanner,程序将会出现异常;如果试图对一个已经存在的文件创建 PrintWriter,则现有的文件内容将消失。
12.35:不同平台上的行分隔符不同,windows平台上的行分隔符是\n.
12.36:intValue = 45; doubleValue = 57.8; line = ‘’‘7’‘8’‘9’。
12.37: intValue = 45; doubleValue = 57.8; line = ‘’
12.38:创建一个URL对象,并使用行动Scanner(url.openStream())创建一个Scanner对象,用于读取URL流中的数据。
12.39:有可能包含重复的URL。假设链接1不在listOfTraverseURL中,但它可能在一个页面中出现不止一次。这样的重复链接1将添加到listOfPendingURL中。