Java语言异常处理学习笔记续

来源:互联网 发布:网站域名注册证书 编辑:程序博客网 时间:2024/05/22 10:48

前一篇写的几个程序让我们知道了如果框架中出现退出程序的语句异常处理机制是如何运行的,那么如果框架中出现return语句结果又如何呢?

public class TryCatch{
 public static void main(String[] args) {
  try{
   int i = 1/0;
   return ;
  } catch(Exception e) {
   System.out.println("exception");
  } finally {
   System.out.println("finally");
  }
 }
}

运行结果:

可以看出跟前面的结果一样,发生异常的语句后的语句不会被执行,而是直接到catch中去匹配

public class TryCatch{
 public static void main(String[] args) {
  try{
   int i = 1/0;
  } catch(Exception e) {
   System.out.println("exception");
   return ;
  } finally {
   System.out.println("finally");
  }
 }
}

运行结果:

我们将异常代码移入另一个方法中:

public class TryCatch{
 public static void main(String[] args) {
  new TryCatch().test();
 }
 
 int test() {
  try{
   int i = 1/0;
  } catch(Exception e) {
   System.out.println("exception");
   return 0;
  } finally {
   System.out.println("finally");
  }
 }
}

其结果:

可以看出在catch代码块中出现return语句时程序并不会退出,而是继续执行,直到finally,那么再试一下

public class TryCatch{
 public static void main(String[] args) {
  System.out.println("" + new TryCatch().test());
 }
 
 int test() {
  int result=0;
  try{
   int i = 1/0;
  } catch(Exception e) {
   System.out.println("exception");
   result=1;
   return result;
  } finally {
   System.out.println("finally");
   result=2;
  }
  System.out.println("return");
  return result;
 }
}

运行结果:

从上面可以看出,finally代码块依旧被执行,但是返回值却是catch中的值,至于为什么,个人理解是return语句只能执行一次,之后的操作无论怎么改变变量的值都影响不到已返回的值,除非在finally中还存在return语句,这时才能改变已返回的值

public class TryCatch{
 public static void main(String[] args) {
  System.out.println("" + new TryCatch().test());
 }
 
 int test() {
  int result=0;
  try{
   int i = 1/0;
  } catch(Exception e) {
   System.out.println("exception");
   result=1;
   return result;
  } finally {
   System.out.println("finally");
   result=2;
   return result;
  }
  //System.out.println("return");//这两句必须注释掉,否则编译不通过,提示访问不到的语句
  //return result;
 }
}

运行结果:

具体怎么回事只能等到深入理解JVM之后才能知道了,暂时先记着吧

原创粉丝点击