zoukankan      html  css  js  c++  java
  • 异常类型

    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方法可以输出错误信息,用来跟踪异常事件发生时执行堆栈的内容。

  • 相关阅读:
    饿汉模式单例模板
    QT高级01----自定义日志工具
    QT基础01----添加应用程序图标
    QML博客转载
    QML---自定义滚动条
    Mycat的做分库正确步骤
    Spring Cloud sentinel使用总结
    SpringCloud之Gateway原理解析(二)--调用过程
    SpringCloud之Gateway原理解析(一)--准备
    SpringCloud之Feign注解@EnableFeignClients
  • 原文地址:https://www.cnblogs.com/xyk1987/p/8330951.html
Copyright © 2011-2022 走看看