java基础之异常练习题

异常

1.Java 中所有的错误/异常都继承自 Throwable类;在该类的子类中, Error 类表示严重的底层错误, 对于这类错误一般处理的方式是 直接报告并终止程序  Exception 类表示异常。

2.查阅API,完成以下填空:

(1)异常类java.rmi.AlreadyBoundException,从分类上说,该类属于 已检查 (已检查|运行时)异常, 从处理方式上说,对这种异常 抛出 处理。

(2)异常类java.util.regex.PatternSyntaxException,从分类上说,该类属于 运行时 (已检查|运行时) 异常,从处理方式上说,对这种异常 try catch处理。

3.Java 中用来抛出异常的关键字是()

A. try B. catch C. throw D. finally

4.在异常处理中,释放资源、关闭文件等应由  处理()

A.  try 语句 B. catch 语句 C. finally 语句 D. throw 语句

5.finally 语句块中的代码()

  1. 总是被执行
  2. 当try 语句块后面没有catch 时,finally 中的代码才会被执行
  3. 异常发生时才被执行
 
  1. 异常没有发生时才被执行

6.自定义异常类时,可以继承的类是()

A. Error    B. ArrayList C. Exception 不行D. NullPointerException

7.对于 try{ ... }catch...语句的排列方式,下列描述正确的是()

  1. 子类异常在前,父类异常在后
  2. 父类异常在前,子类异常在后
  3. 只能有子类异常
  4. 父类异常不能与子类异常同时出现

8.仔细阅读以下代码,将代码补全。

 throw new NullPointException();

try{

throw new ClassCastException(“类型转换出错”);

}catch(ClassCastException e){

System.out.orintln(e.getMessage());

}

9.代码改错:仔细阅读以下程序,将错误的代码进行改正。

class MyException extends RuntimeException;

try{

m();

}catch(ArithmeticException e){

System.out.println(“ArithmeticException”);

}catch(Exception e){

System.out.println(“Exception”);

}finally{

return 100;

}

 

10.仔细阅读以下代码,当读入的 n 分别为 1,2,3,4,5 时,输出的结果分别是什么?

为1时:

main1

ma1

mb1

catch EOFException

In Finally

main2

为2时:

 main1

ma1

mb1

catch IOException

In Finally

main2

为3时:

main1

ma1

mb1

catch SQLException

In Finally

main2

为4时:

main1

ma1

mb1

catch Exception

In Finally

main2

11. 仔细阅读以下代码:

在//1 处,填入以下 AB 代码可以编译通过,在//2 处,填入 D 代码可以编译通过

  1. throws java.io.IOException
  2. throws java.io.FileNotFoundException, java.io.EOFException
 
  1. throws java.sql.SQLException
  2. 不能抛出任何异常

12.仔细阅读以下代码,关于程序描述正确的是()

A. 不通过  未初始化变量 B. 编译通过,输出-1

C. 编译通过,输出 0 D. 以上描述都不正确

13.仔细阅读以下代码,在ma 方法中,当读入的b 为 100 时,输出结果为 100 ,当读入的b 为 0 时,输出结果为 100  

14.仔细阅读以下代码,在ma 方法中,读入整数b,如果读入的值为 10,则输出 ma1, ma21,In fianlly ;如果读入的值为 0,则输出 ma1,In Finally

15.仔细阅读以下代码,是否能编译通过?如果不能,应该如何修改?

class MySub2 extends MySub{

    public void m() throws EOFException{}

}

16.仔细阅读以下代码,关于程序描述正确的是()

A. 编译出错

B. 编译正常,输出 main1 ma1 In Catch

C. 编译正常,运行时出错

D. 以上描述都不正确

17.仔细阅读以下程序,下面哪些代码放在/*1*/处可以编译通过()

A. catch(NullPointerException npe){}

B. catch(IOException ioe){}

C. catch(SQLException sqle){}

18.简述 final、finlize、finally 的区别。

fianl 是一个修饰符,用来修饰类,引用,方法,属性,表示最后的,不可更改的

final

1.当它修饰一个变量时,表示这个变量是常量,一旦赋值就不能被修改。

2.当它修饰一个方法时,表示这个方法不能被子类重写。

3.当它修饰一个类时,表示这个类不能被继承。

finalize: 是Java中Object类的一个方法,也被称为终结器方法。当垃圾收集器决定回收一个对象时,会首先调用该对象的finalize方法。这个方法在Java中被视为一种特殊的"逃逸区",允许对象在垃圾回收前进行一些清理工作。然而,由于性能问题,从Java 9开始,finalize方法已被弃用。

finally: 是Java中异常处理的一部分。在try-catch-finally结构中,无论try块中的代码是否抛出异常,finally块中的代码总是会被执行。这使得finally块成为处理清理工作的理想场所,例如关闭文件、网络连接等。

19.在 try 里有 return 语句,那 finally 里的语句还会执行么?为什么?

会,因为里边的内容必须被执行

如果在 try 块中有 return 语句,那么 finally 块中的代码仍然会被执行。这是因为 finally 块是异常处理的一部分,它的作用是确保一些必要的清理工作被执行,无论 try 块中的代码是否成功执行或抛出异常

20.仔细阅读以下代码,写出程序执行的结果。

StepB    SetpE

21. 编程:创建两个自定义异常类 MyException1 和 MyException2,要求如下:

(1) MyException1 为已检查异常,MyException2 为运行时异常;

(2) 这两个异常均具有两个构造函数:一个无参,另一个带字符串参数,参数表示产生异常的信息。

package com.by.exception;

public class MyRuntimeException extends NullPointerException{
    public MyRuntimeException(){}
    public MyRuntimeException(String message){
        super(message);
    }
}
class Test{
    public static void main(String[] args) {
        try {
            throw new MyRuntimeException("我的详细信息");
        } catch (MyRuntimeException e) {
            System.out.println(e.getMessage());
        }
        throw new ClassCastException();
    }
}



package com.by.exception;

public class MyException2 extends Exception{
    public MyException2(){}
    public MyException2(String message){
        super(message);
    }

}

22.在上一题的基础上,把下面代码补充完整。

 输出ex1详细放大调用栈信息

System.out.println(ex1.getMessage);

package com.by.exception;

public class TestMyException {
    public static void main(String[] args) throws MyException2 {
        int n;
        n=3;
        try {
            m(n);
        } catch (MyException1 ex1) {
            System.out.println(ex1.getMessage());
        }catch (MyException2 ex2){
            System.out.println(ex2.getMessage());
            throw new MyException2("n==2");
        }

    }
    public static void m(int n) throws MyException1, MyException2 {
        if (n==1){
            throw new MyException1("n==1");
        }else{
            throw new MyException2("n==2");
        }
    }
}

  • 33
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这孩子叫逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值