一、请问什么是程序的健壮性?
答:是指程序在多数情况下能够正常运行,返回预期的正确结果;如果偶尔遇到异常情况,程序也能采取周到的解决措施。
二、请问Java异常处理机制有什么?
答:①try-catch:捕获异常;
②finally语句:任何情况下必须执行的代码;
③throws子句:声明一个方法可能会出现的异常;
④throw语句:抛出异常。
三、请问异常处理语句的语法规则有哪些?
答:①try代码块后面可以有零个或多个catch代码块,还可以有零个或至多一个finally代码块。
②try代码块后面只跟finally代码块;
③如果一个方法可能出现受检查异常,要么用try-catch语句捕获,要么用throws子句声明将它抛出,否则会导致编译错误。
④throw语句后面不允许紧跟其他语句,因为这些语句永远不会被执行。
四、请问异常流程的运行过程是什么?
答:①finally语句不被执行的唯一情况是先执行了用于终止程序的System.exit()方法。java.lang.System类的静态方法exit()用于终止当前的java虚拟机进程,java虚拟机所执行的java程序页随之终止。
②return语句用于退出本方法。
③finally代码块在return语句之前被执行,但fianlly代码块不能通过重新给变量赋值的方式来改变return语句的返回值。
五、请阐述一下java异常类。
答:所有异常类的祖先类为java.lang.Throwable类,它的实例表示具体的异常对象。
Throwable类有两个直接子类:
①Error类:表示单靠程序本身无法恢复的严重错误,比如内存空间不足,或者java虚拟机的方法调用栈溢出。在大多数情况下,遇到这样的错误,建议让程序终止。
②Exception类:表示程序本身可以处理的异常。当程序运行时出现这类异常,应该尽可能地处理异常,并且使程序恢复运行,而不应该随意终止程序。
六、请你简述一下你会遇到的异常?
答:①IOException:操作输入流和输出流时可能出现的异常。
②ArithmeticException:数学异常。如果把整数除以0,就会出现这种异常。
③NullPointerException:空指针异常。当引用变量为null时,试图访问对象的属性和方法,就会出现这种异常。
④IndexOutOfBoundsException:下标越界异常。
⑤ClassCastException:类型转换异常。
⑥IllergalArgumentException:非法参数异常。可用来检查方法的参数是否合法。
七、请你介绍一下运行时异常和受检查异常?
答:Exception类还可以分为两种:运行时异常和受检查异常。
①运行时异常是RuntimeException类及其子类,这种异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常时,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
②受检查异常:除了RuntimeException及其子类外,其他的Exception类及其子类都属于受检查异常。这种异常的特点就是Java编译器会检查它,也就是说,当程序中可能出现这类异常时,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。
八、请问如何区分运行时异常和受检查异常?
答:受检查异常表示程序可以处理的异常,如果抛出异常的方法本身不能处理它,那么方法调用者应该去处理它,从而使程序恢复运行,不至于终止程序。
运行时异常表示无法让程序恢复运行时的异常,导致这种异常的原因通常是执行了错误操作。一旦出现了错误操作,建议终止程序。
九、请问如何区分运行时异常和错误?
答:相同点:java编译器都不会检查它们,当程序运行时出现它们,都会终止程序。
不同点:Error类及其子类表示的错误通常会由java虚拟机抛出的,在jdk中预定义了一些错误类。比如OutOfMemoryError和StackOutofMemoryError。
而RuntimeException类表示程序代码中的错误,它是可以扩展的,用户可以根据特定的问题领域,来创建相关的运行时异常类。