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 语句块中的代码()
- 总是被执行
- 当try 语句块后面没有catch 时,finally 中的代码才会被执行
- 异常发生时才被执行
- 异常没有发生时才被执行
6.自定义异常类时,可以继承的类是()
A. Error B. ArrayList C. Exception 不行D. NullPointerException
7.对于 try{ ... }catch...语句的排列方式,下列描述正确的是()
- 子类异常在前,父类异常在后
- 父类异常在前,子类异常在后
- 只能有子类异常
- 父类异常不能与子类异常同时出现
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 代码可以编译通过
- throws java.io.IOException
- throws java.io.FileNotFoundException, java.io.EOFException
- throws java.sql.SQLException
- 不能抛出任何异常
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");
}
}
}