异常练习及面试题——博客园:师妹开讲啦
博客园:师妹开讲啦--已知:public class ExceptionText{
public static void main(String[] args){
try{
int i=1;
System.out.println(i++);
}finally{
System.out.println(++i);
}
}
}
程序编译并运行的结果为( C)
A.1 2 B.1 1 C.编译错误 D.1
解析:变量i只在try语句块内定义,所以其有效范围仅限于try语句块,finally语句块不能访问i,所以编译错误
已知:public class ExceptionDemo{
public static void main(String[] args){
try{
System.out.println("i="+(i++));
int m=10/0;
}catch(ArithmeticException e){
throw new ArithmeticException("算术异常");
e.printStackTrace();
}finally{
System.out.println("i="+(++i));
}
}
}
程序编译并运行的结果为( D)
A. 0 2
B. i=1
java.lang.ArithmeticException:/by zero
at ExceptionDemo.main(ExceptionDemo.java.7)
i=2
Exception in thread"main" java.lang.ArithmeticException:
at ExceptionDemo.main(ExceptionDemo.java.12)
C.
i=0
java.lang.ArithmeticException:/by zero
at ExceptionDemo.main(ExceptionDemo.java.7)
i=2
Exception in thread"main" java.lang.ArithmeticException:算术异常
at ExceptionDemo.main(ExceptionDemo.java.12)
D.编译错误,因为无法访问e.printStackTrace();
解析:throw语句后面不能紧跟其他语句,因为这些语句都没有被执行的机会
已知:
public class T3 {
public static void main(String[] args) {
int i=0;
try {
System.out.println("i="+(i++));
int m=10/0;
} catch (ArithmeticException e) {
System.exit(0);
e.printStackTrace();
}finally{
System.out.println("i="+(++i));
}
}
}
程序编译并运行的结果为(B)
A. i=0 i=2
B.i=0
C.i=0
java.lang.ArithmeticException:/by zero
at ExceptionDemo.main(T3.java.7)
D.编译错误
解析:在finally语句块之前执行了System.exit(0)退出运行,则finally语句块将不会被执行
已知:
public class T3 {
public static void main(String[] args) {
int n=fun(2);
System.out.println(n);
}
public static int fun(int i){
try{
int m=i/0;
return i++;
}catch(ArithmeticException e){
return (i+3);
}finally{
return (i+8);
}
}
}
程序编译并运行的结果为(C)
A.2 B.5 C.10 D.编译错误
解析:在执行try或catch语句块中的return语句时,假如有finally语句块,会先执行finally语句块。所以上面程序中先执行的是finally语句块中的return语句,返回10并退出方法
public class T3 {
public static void main(String[] args) {
int n=fun(2);
System.out.println(n);
}
public static int fun(int i){
try{
return i++;
}finally{
return i+8;
}
}
}
该代码的运行结果为11
public class T3 {
public static void main(String[] args) {
int n=fun(2);
System.out.println(n);
}
public static int fun(int i){
try{
return i++;
}finally{
i=i+8;
}
}
}
该代码的运行结果为2
public class T3 {
public static String output="";
public static void foo(int i){
try{
if(i==1)
throw new Exception();
output+="1";
}catch(Exception e){
output+="2";
return;
}finally{
output+=3;
}
output+=4;
}
public static void main(String[] args) {
foo(0);
System.out.println(output);
foo(1);
System.out.println(output);
}
}
改程序运行结果:
134
13423
(方法覆盖)有如下代码
class Super {
public void method() throws IOException {
}
}
public class MySub extends Super {
@Override
public void method()//_1_______________________ {
}
}
问:
在//1 处,填入以下________________________代码编译无法通过(C)
A.throws java.io.IOException
B.throws java.io.FileNotFoundException, java.io.EOFException
C.throws java.sql.SQLException
D.不抛出任何异常,即什么都不填写
与C、C++等语言相比,Java的异常处理机制有何优点?
答:1. 将错误代码从常规代码中分离出来,提高了程序的可读性,简化了程序的结构;2.允许对错误进行修正,可以对错误类型和错误差别进行分组,错误的处理变得规范;3.调用栈向上传送错误,方便定义错误和维护;4.可以使用catch语句输出错误信息;5.防止程序自动中断程序(try-catch)
error和exception有什么区别?
Error表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题。比如:内存资源不足等。对于这种错误,程序基本无能为力,除了退出运行外别无选择,它是由Java虚拟机抛出的。
Exception表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。
常见异常
ArithmeticException算术异常、ArrayIndexOutOfBoundsExceptin数组越界异常、ClassCastException对象转换异常、NullPointerException空指向异常、ArrayStoreException数组存储异常