• 异常类型


    1 读取文本文件中的每一行数据信息,求其和再存入最后一行

    文本文件pw.txt的内容如下所示:

    1. 大家好!
    2.     hello!
    3.     bye!

    操作完毕之后的文本文件pw.txt的内容如下所示:

    1. 大家好!
    2. hello!
    3. bye!
    4. 大家好!hello!bye!

    参考答案

    实现此案例需要按照如下步骤进行。

    步骤一:新建TestBrAndPw类,添加测试方法testBrAndPw方法

    首先,新建名为TestBrAndPw的类,并在类中添加单元测试方法 testBrAndPw,代码如下所示:

     
    1. import org.junit.Test;
    2. public class TestBrAndPw {
    3.     /**
    4.      * 使用BufferedReader和PrintWriter
    5.      */
    6.     @Test
    7.     public void testBrAndPw() throws Exception {
    8.     }
    9. }

    步骤二:读取文本文件的所有行

    首先,创建BufferedReader类的对象,并调用该对象的 readLine 方法逐一读取文件中的每行文本连接为一个字符串,代码如下所示:

     
    1. import java.io.BufferedReader;
    2. import java.io.FileInputStream;
    3. import java.io.FileOutputStream;
    4. import java.io.InputStreamReader;
    5. import java.io.OutputStream;
    6. import java.io.PrintWriter;
    7. import org.junit.Test;
    8. public class TestBrAndPw {
    9.     /**
    10.      * 使用BufferedReader和PrintWriter
    11.      */
    12.     @Test
    13.     public void testBrAndPw() throws Exception {
    14.         FileInputStream fis = new FileInputStream("pw.txt");
    15.         InputStreamReader isr = new InputStreamReader(fis);
    16.         BufferedReader br = new BufferedReader(isr);
    17.         
    18.         String line = "";
    19.         String all = "";
    20.         
    21.         while ((line = br.readLine()) != null) {
    22.             all += line;
    23.             System.out.println(line);
    24.         }
    25.     }
    26. }

    步骤三:使用PrintWriter对象写出数据

    PrintWriter是带有行刷新的缓冲字符输出流,它提供了丰富的重载print与println方法。其中,println方法在于输出目标数据后自动输出一个系统支持的换行符。

    为向文本文件中追加信息,首先创建OutputStream类的对象,构造该对象时要使该对象具备追加功能;然后,使用OutputStream类的对象构造 PrintWriter类的对象,最后调用 println 方法写入文本,并关闭BufferedReader 对象和PrintWriter对象。代码如下所示:

     
    1. import java.io.BufferedReader;
    2. import java.io.FileInputStream;
    3. import java.io.FileOutputStream;
    4. import java.io.InputStreamReader;
    5. import java.io.OutputStream;
    6. import java.io.PrintWriter;
    7. import org.junit.Test;
    8. public class TestBrAndPw {
    9.     /**
    10.      * 使用BufferedReader和PrintWriter
    11.      */
    12.     @Test
    13.     public void testBrAndPw() throws Exception {
    14.         FileInputStream fis = new FileInputStream("pw.txt");
    15.         InputStreamReader isr = new InputStreamReader(fis);
    16.         BufferedReader br = new BufferedReader(isr);
    17.         
    18.         String line = "";
    19.         String all = "";
    20.         
    21.         while ((line = br.readLine()) != null) {
    22.             all += line;
    23.             System.out.println(line);
    24.         }
    25.         OutputStream os=new FileOutputStream("pw.txt",true);
    26.         PrintWriter pw = new PrintWriter(os,true);
    27.         System.out.println(all);
    28.         pw.println();
    29.         pw.println(all);
    30.         br.close();
    31.         pw.close();
    32.     }
    33. }

    运行上述代码,文本文件pw.txt文件末尾多了一行数据,这一行的内容为pw.txt文本文件中的每一行数据信息累加的和。

    2 简述Error和Exception的区别

    参考答案

    Java异常结构中定义有Throwable类,Exception和Error是其派生的两个子类。其中Exception表示由于网络故障、文件损坏、设备错误、用户输入非法等情况导致的异常;而Error表示Java运行时环境出现的错误,例如:JVM内存资源耗尽等。

    3 下面关于异常处理的说法正确的是

    A.try … catch … catch,当多个catch时,后一个catch捕获类型一定是前一个的父类。

    B.try…finally可以组合使用。

    C.throw抛出的一些异常,程序不进行处理,程序编译也无错误。

    D.throws一定是写在方法后面。

    参考答案

    本题正确答案为BCD。

    本题中A选项说法错误,catch块可以捕获的异常类型是Throwable类及其子类类型,多个catch捕获的异常类型之间可以没有父子关系,但如果存在父子关系,则catch捕获的异常类型由上至下,顺序应是子类到父类,例如如下代码:

     
    1.     try{
    2.     …
    3.     }catch(NullPointerException e){
    4.     …
    5.     }catch(RuntimeException e){
    6.      …    
    7.     }catch(Exception e){
    8.      …
    9.     }

    子类型异常在前,父类型异常在后,这样的顺序依次捕获。否则编译不通过。

    4 改正下面代码的编译错误

     
    1. import java.io.FileNotFoundException;
    2. import java.io.FileOutputStream;
    3. public class Foo {
    4.     public void writeData(){
    5.         try {
    6.             FileOutputStream fos= new FileOutputStream("out.dat");
    7.             fos.write(1);
    8.             fos.close();
    9.         } catch (FileNotFoundException e) {
    10.             e.printStackTrace();
    11.         }
    12.     }
    13. }

    参考答案

    上述代码中,除了产生FileNotFoundException异常外,还会产生IOException异常,但在上述代码中没有对IOException做出处理,因此出现编译错误。可以在catch块中捕获该异常,也可以使用throws将异常抛出给方法的调用者。在此,使用了throws将异常抛出,改正后的代码如下所示:

     
    1. import java.io.FileNotFoundException;
    2. import java.io.FileOutputStream;
    3. import java.io.IOException;
    4. public class Foo {
    5.     public void writeData() throws IOException{
    6.         try {
    7.             FileOutputStream fos= new FileOutputStream("out.dat");
    8.             fos.write(1);
    9.             fos.close();
    10.         } catch (FileNotFoundException e) {
    11.             e.printStackTrace();
    12.         }
    13.     }
    14. }

    5 简述RuntimeException和非RuntimeException的区别

    参考答案

    Java异常可以分为可检测异常,非检测异常:

    1)可检测异常:可检测异常经编译器验证。对于声明抛出异常的任何方法,编译器将强制执行处理或声明规则,不捕捉这个异常,则产生编译错误。

    2)非检测异常:非检测异常不遵循处理或者声明规则。在产生此类异常时,不一定非要采取任何适当操作,编译器不会检查是否已经解决了这样一个异常。

    RuntimeException 类属于非检测异常,因为普通JVM操作引起的运行时异常随时可能发生,此类异常一般是由特定操作引发。但这些操作在java应用程序中会频繁出现。因此它们不受编译器检查与处理或声明规则的限制。非RuntimeException为可检测异常,该异常经编译器验证。

    6 写出5个常见的RuntimeException

    参考答案

    1)IllegalArgumentException抛出的异常表明向方法传递了一个不合法或不正确的参数

    2)NullPointerException当应用程序试图在需要对象的地方使用 null 时,抛出该异常

    3)ArrayIndexOutOfBoundsException当使用的数组下标超出数组允许范围时,抛出该异常

    4)ClassCastException当试图将对象强制转换为不是实例的子类时,抛出该异常

    5)NumberFormatException当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。

    7 printStackTrace方法的作用在于?

    参考答案

    printStackTrace方法可以输出错误信息,用来跟踪异常事件发生时执行堆栈的内容。

  • 相关阅读:
    164 Maximum Gap 最大间距
    162 Find Peak Element 寻找峰值
    160 Intersection of Two Linked Lists 相交链表
    155 Min Stack 最小栈
    154 Find Minimum in Rotated Sorted Array II
    153 Find Minimum in Rotated Sorted Array 旋转数组的最小值
    152 Maximum Product Subarray 乘积最大子序列
    151 Reverse Words in a String 翻转字符串里的单词
    bzoj3994: [SDOI2015]约数个数和
    bzoj 4590: [Shoi2015]自动刷题机
  • 原文地址:https://www.cnblogs.com/xyk1987/p/8330951.html
Copyright © 2020-2023  润新知