class HexRead{
String[] input = { "000A110D1D260219 ","78700F1318141E0C ","6A197D45B0FFFFFF "};

public static void main(String[] args){
HexRead hex = new HexRead();
for (int i = 0; i < hex.input.length; i++)
    hex.readLine(hex.input[i]);
}
void readLine(String code){
try{
for (int j=0;j+1<code.length();j+=2){
String sub=code.substring(j,j+2);
int num=Integer.parseInt(sub,16);
if(num == 255)
    return;
System.out.print(num + " ");
}
}finally{
System.out.println("**");
}
return;
}
}以上程序中try...finally块中的return到底有什么用啊?我知道return是返回的意思,但在try...finally块中return是否还有其它作用呢?请各位大哥讲解一下这个程序中两个return的作用?

解决方案 »

  1.   

    你这个例子里面,也还是if(num == 255)返回啊-_-!
      

  2.   

    那它这里的执行顺序是怎样的啊?是不是先读取两个数转换后如果等于255就把上执行finally语句,然后return返回。如果不等于255就输出System.out.print(num + " ");,一直到这个字符串读取好,最好再输出finally语句。而下面这个return是返回进入下一个字符串的迭代循环
    请问是不是这样的啊?
      

  3.   

    那它这里的执行顺序是怎样的啊?是不是先读取两个数转换后如果等于255就把上执行finally语句,然后return返回。如果不等于255就输出System.out.print(num + " ");,一直到这个字符串读取好,最好再输出finally语句。而下面这个return是返回进入下一个字符串的迭代循环两个return都是返回进入下一个迭代循环,第一个return是条件退出,即满足条件则退出函数,第二个return是正常退出,即程序执行完后自然退出,在这里,第二个return不要也是一样的
    另外值得注意的是,try...finally的执行机制是,finally之前有return就先return后finally,finally之后有return那就相当于程序执行完自然return了,现在你的例子里没有返回值,即是void的类型,如果是有返回值的,你就更清楚了,举个例子class A {
        public static void main(String[] args) {
            A a = new A();
            int result;
            result = a.test();
            System.out.println("result is " + result);
        }
        
        public int test() {
            int result;
            try {
                result = 1;
                System.out.println("result is " + result);
                return result;  //返回1
            } fianlly {
                result = 2;
                System.out.println("result is " + result);
            }
            //return result;  //返回2
        }
    }
    把返回1和返回2依次注释掉试试就知道了
      

  4.   

    这个已经有人解释过了.比如:
    class A {
        public static void main(String[] args) {
            A a = new A();
            int result;
            result = a.test();
            System.out.println("result is " + result);
        }
        
        public int test() {
            int result;
            try {
                result = 1;
                System.out.println("result is " + result);
                return result;  //返回1
            } finally {
                result = 2;
                System.out.println("result is " + result);
            }
            //return result;  //返回2
        }
    }
    在这个中第一个返回语句,会先将result进栈,然后执行finally,执行完finally后,弹出result.所以这个的结果是 1,2,1.
      

  5.   

    感觉感谢 qybao(阿宝)和 interhanchi(我的偶像--Bruce Eckel)的回答,问题已经解决。我马上结贴。