Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4027255
  • 博文数量: 366
  • 博客积分: 9916
  • 博客等级: 中将
  • 技术积分: 7195
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-29 23:27
个人简介

简单!

文章分类

全部博文(366)

文章存档

2013年(51)

2012年(269)

2011年(46)

分类: Java

2012-09-26 14:56:59

       第一:return语句并不是函数的最终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回)

  第二:finally里面不建议放return语句,根据需要,return语句可以放在try和catch里面和函数的最后。可行的做法有四:1、return语句只在函数最后出现一次;2、return语句仅在try和catch里面都出现;3、return语句仅在try和函数的最后都出现;4、return语句仅在catch和函数的最后都出现。

  注意,除此之外的其他做法都是不可行的,编译器会报错。

  (1)如果程序运行到try成功时可以返回结果,则采用方法2。(见下面的例子test0_1,在那个例子中,方法2和4都是可行的,但是推荐方法2)

  (2)如果程序运行到catch时(即中途出错时)无需再继续执行后面的代码了,则采取方法4;(见下面例子中的test0,在那个特殊的例子中,只能采取方法4)

  (3)如果程序运行到try或catch时还需要继续执行后面的代码,则采取方法1(见下面的例子test0_2,该例子只能采用方法1)。

  1. public class Test {
  2.     public static void main(String[] args) {
  3.         System.out.println("=============test1==================");
  4.         System.out.println(test1());
  5.         System.out.println("====================================");

  6.         System.out.println("=============test1_1==================");
  7.         System.out.println(test1_1());
  8.         System.out.println("====================================");

  9.         System.out.println("\n============test2===================");
  10.         System.out.println(test2());
  11.         System.out.println("====================================");

  12.         System.out.println("\n============test2_1===================");
  13.         System.out.println(test2_1());
  14.         System.out.println("====================================");

  15.         System.out.println("\n============test3===================");
  16.         System.out.println(test3());
  17.         System.out.println("====================================");

  18.         System.out.println("\n============test3_1===================");
  19.         System.out.println(test3_1());
  20.         System.out.println("====================================");
  21.     }

  22.     public static String test0() {
  23.            String a;
  24.          int b;

  25.          try{
  26.               b = 8/0;
  27.          }
  28.         catch(Exception e){
  29.               return null;
  30.          }
  31.          a = String.valueOf(b);
  32.          return a+b;
  33.     }
  34.  
  35.     public static String test0_1() {
  36.         String a;
  37.          int b;

  38.          try{
  39.               b = 8/0;
  40.               a = String.valueOf(b);
  41.              return a+b;
  42.          }
  43.         catch(Exception e){
  44.               return null;
  45.          }
  46.     }
  47.    
  48.     public static String test0_2() {
  49.         String a;
  50.          int b=0;

  51.          try{
  52.               b = 8/0;
  53.          }
  54.         catch(Exception e){
  55.          }
  56.          a = String.valueOf(b);
  57.          return a;
  58.     }

  59.     public static String test1() {
  60.         String a = "in try";
  61.         int n = -1;

  62.            try{
  63.             return a+n; //先执行这个,再执行finally
  64.         }
  65.         catch ( Exception e ) {

  66.         }
  67.         finally {
  68.          //对String和int的更改均无效
  69.            a = "in finally";
  70.            n = 123;
  71.            System.out.println("do finally");
  72.         }
  73.         return a; //不会执行
  74.     } //总结:return语句并不是函数的最终出口,如果有finally语句,在return之后还会执行finally

  75.     public static String test1_1() {
  76.         String a = "in try";

  77.         try{
  78.            return a;
  79.         }
  80.         catch ( Exception e ) {

  81.         }
  82.         finally {
  83.            a = "in finally";
  84.            System.out.println("do finally");
  85.            return a; //从eclpise报警告可看出,finally里面不建议有return语句;注释掉这句,eclipse将不再警告
  86.         }
  87.     }

  88.     public static int test2() {
  89.         int a = 1;

  90.         try{
  91.            return a;
  92.         }
  93.         catch ( Exception e ) {

  94.         }
  95.         finally {
  96.            a = 2;
  97.            System.out.println("do finally");
  98.         }
  99.         return a;
  100.     } //很显然,finally里面更改无效,返回的是a=1

  101.     public static int test2_1() {
  102.         int a = 1;

  103.            try{
  104.            return a;
  105.         }
  106.         catch ( Exception e ) {

  107.         }
  108.         finally {
  109.            a = 2;
  110.            System.out.println("do finally");
  111.            return a;
  112.         }
  113.     } //很显然,a取finally里面的值,a=2

  114.     //Helper类,将整数转换成字符串
  115.     static class Helper {
  116.         int a;

  117.         public String toString() {
  118.            return String.valueOf(a);
  119.         }
  120.     }
  121.    
  122.     public static Helper test3() {
  123.         Helper h = new Helper();
  124.         h.a = 1;

  125.         try{
  126.            return h;
  127.         }
  128.         catch ( Exception e ) {

  129.         }
  130.         finally {
  131.            h.a = 2; //对h.a的更改起作用,因为在try里面返回的是一个句柄,它指向的对象的内容是可以改变的
  132.            System.out.println("do finally");
  133.         }
  134.        
  135.         return h; //这个不会被执行
  136.     }

  137.     public static Helper test3_1() {
  138.         Helper h = new Helper();
  139.         h.a = 1;

  140.            try{
  141.             return h;
  142.         }
  143.         catch ( Exception e ) {

  144.         }
  145.         finally {
  146.            h.a = 2; //返回a=2,这个不用说了
  147.            System.out.println("do finally");
  148.            return h;
  149.         }
  150.     }

  151.     //总结:return语句,finally里面不建议放return语句,根据需要,可以放在try和catch里面
  152. }
阅读(1463) | 评论(0) | 转发(0) |
0

上一篇:Android异步加载图片

下一篇:java中数组

给主人留下些什么吧!~~