A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fiend 中级黑马   /  2012-7-27 23:20  /  1992 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 fiend 于 2012-7-28 08:23 编辑
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 for (int i = 0; i < 3;) {
  4.                         return;
  5.                 }               
  6.                 System.out.println("有执行这句吗?");
  7.                 try {
  8.                         return;
  9.                 } catch (Exception e) {
  10.                         System.out.println("catch块");
  11.                 } finally {
  12.                         System.out.println("finally块");
  13.                 }
  14.         }
  15. }
复制代码
程序执行不会输出“有执行这句吗?”就结束了。当我把for循环语句注释掉后为什么return语句到try块中就失效了呢?谁能帮我解释一下程序运行的过程吗?

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
return是结束方法的,你在for循环里加return,main方法就结束了,不再往下走了。
同理for循环注释掉,走try,然后走return,结束main方法
回复 使用道具 举报
return是结束的意思,当你执行到for循环时,先执行int i = 0;然后执行i < 3;然后再执行return;,程序就结束了。所以System.out.println("有执行这句吗?");
是不会输出的。
当你把for循环注释掉,你先执行System.out.println("有执行这句吗?");,输出“有执行这句吗?”,然后执行到try{return}时,你的程序就结束了,后面都不执行了。所以 这就是你说的“为什么return语句到try块中就失效了呢”的原因。
回复 使用道具 举报
return 的作用是给方法返回值,在此段代码中,for循环执行过程中,return执行,给没方法返回了void类型,方法结束。(其实void方法也有返回值,返回值类型就是void)
如果注释掉for中的return,则继续往下执行,执行到try块中的return,但在抛异常的情况下,有finally块的话,必须执行,不管方法有没有返回值。
希望对你有所帮助....

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. public class Test {

  2.         public static void main(String[] args) {

  3.              [color=Red]   for (int i = 0; i < 3;) {

  4.                         return;

  5.                 }   [/color]
  6.                 System.out.println("有执行这句吗?");

  7.                 try {

  8.                         return;

  9.                 } catch (Exception e) {

  10.                         System.out.println("catch块");

  11.                 } finally {

  12.                         System.out.println("finally块");

  13.                 }

  14.         }

  15. }
复制代码
1.首先你这个for循环是个死循环,你可以再return前面打印一句语句,当你加上return之后就退出当前for循环。这个return只会对循环起作用。本来你的for是一个死循环,当有return时候就不停的执行for语句,然后执行到return返回循环,结束当前循环。然后再执行for循环。再执行return。当你把for注释之后死循环就没有了,当然就会执行到后面的语句。没有特殊情况下程序是从上往下执行的,因为前面的死循环。所以一直都执行不到后面的System.out.println("有执行这句吗?");

点评

兄弟,for虽然看上去是死循环,但是当循环中遇到return的时候,就直接结束main方法了。  发表于 2012-7-28 00:23
回复 使用道具 举报
public class Test {
        public static void main(String[] args)
  {
                 for (int i = 0; i < 3; ) //这里原是个死循环,不太合适,加上i++,更好
     {
          System.out.println("这里被执行了");//可以加这句验证执行结果
                          return;//这里的return语句时终止后面的代码执行的标志,
                //因为没有执行到try就连finally也不会被执行
                }               
                System.out.println("有执行这句吗?");//
                try
    {
   
                        return;//如果将for循环注视,执行到这里是程序也会终止,但是程序终止前会执行finally,
                }
    catch (Exception e) {
                        System.out.println("catch块");
                } finally {
                        System.out.println("finally块");
                }
        }
}
/*
return的常用作用有以下两种
种是返回参数所用的关键字,假如一个有返回值的方法执行完了之后需要返回一个参数,
示例:public string  Test(){
         String s = "hello";
         return s;
}
那么这个方法被调用之后就会返回一个值为hello的字符串,string result = Test();

第二种用法是,代码执行到此处终止。
比如当代码执行到某个地方会出现几种结果,然后其中一种结果就不能执行后续代码,
这时候在那里加上一个return就可以终止后面的代码执行。
*/

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
于星星 发表于 2012-7-27 23:44
1.首先你这个for循环是个死循环,你可以再return前面打印一句语句,当你加上return之后就退出当前for循环。 ...

对。刚刚这里有点晕了。谢谢指正过来。执行到return直接结束方法。后面的语句都不会执行。当把return注释掉之后,因为是死循环后面的语句还是不会执行,除非注释掉整个for循环。
回复 使用道具 举报
fiend 中级黑马 2012-7-28 08:23:10
8#
当程序执行到try块遇到了return语句,return语句会导致该方法立即结束。系统执行完return语句后,并不会立即结束该方法,而是去寻找该异常处理流程中是否包含finally块,如果没有,方法终止,返回相应的值。如果有,系统立即执行------只有当finally块执行完成后,系统才会再次跳回来根据return语句结束方法。
谢谢大家。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马