荣岩岩作业15
1.在Java的异常处理机制中,try程序块、catch程序块和finally程序块各起到什么作用?try-catch-finally语句如何使用?
程序首先执行可能发生异常的try语句块。
如果try语句没有出现运行时异常则执行完后跳至finally语句块执行;
如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。
catch语句块可以有多个,分别捕获不同类型的异常。
catch语句块执行完后程序会继续执行finally语句块。
finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行。
2.说明throws与throw的作用。有什么联系和区别?
(1)、throw是在代码块内的,即在捕获方法内的异常并抛出时用的;
(2)、throws是针对方法的,即将方法的异常信息抛出去
(3)、可以理解为throw是主动(在方法内容里我们是主动捕获并throw的),而throws是被动(在方法上是没有捕获异常进行处理,直接throws的) throw 用于抛出 java.lang.Throwable 类的一个实例化对象,意思是说你可以通 过关键字 throw 抛出一个 Error 或者 一个 Exception,
如: throw new IllegalArgumentException(“size must be multiple of 2″ ) 而 throws 的作用是作为方法声明和签名的一部分,方法被抛出相应的异常以便 调用者能处理。Java 中,任何未处理的受检查异常强制在 throws 子句中声明。
3.如果try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行? 会执行,在方法返回调用前执行。准确的说是在return中间执行。 下面举个例子:
public class Test { public static void main(String[] args) {
System.out.println("结果: " + new Test().test()); }
static int test(){ int i = 1;
try { System.out.println("try里面的i : " + i);
return i; }
finally{ System.out.println("进入finally...");
++i;
System.out.println("fianlly里面的i : " + i);
//return i; } } }
结果是:try里面的i : 1 进入finally... fianlly里面的i : 2 结果: 1 结果是1,并不是大家想象的结2。
4.finally一定会被执行吗? 1. 发生异常的代码必须在try 代码块中,才有可能被执行
public class MyTest { public static void main(String[] args) {
System.out.println("main 代码块中的执行结果为:" + myMethod()); }
public static int myMethod() { int i = 0; int[] num = { 1, 2, 3 };
System.out.println(num[3]);
try { System.out.println("try 代码块被执行!");
return 0; }
catch (Exception e) { System.out.println("catch 代码块被执行!");
return 0; }
finally { System.out.println("finally 代码块被执行!");
return 2; } } }
2. public class MyTest { public static void main(String[] args) {
System.out.println("main 代码块中的执行结果为:" + myMethod()); }
public static int myMethod() {
int i = 6;
try { System.out.println("try 代码块被执行!");
//i = i/0;
return 1; }
catch (Exception e) { System.out.println("catch 代码块被执行!");
return 2; }
finally { System.out.println("finally 代码块被执行!");
} } }