黑马程序员技术交流社区

标题: 关于跳出循环语句 [打印本页]

作者: 刘学    时间: 2012-8-10 10:34
标题: 关于跳出循环语句
本帖最后由 刘学 于 2012-8-10 15:21 编辑

public class B {

public static void main(String[] agrs){

  outer:  //标签
  for(int i = 0;i<5;i++){
   for(int j = 0;j <4; j++){
    if(j==2){
    //return;
     //break;
     //continue
     //continue outer;
     //break outer;

     }
    }
   }
  }
}

请问蓝色部分的几个语句的区别和异同?希望各位用自己的理解方式去讲。


作者: 黄敏    时间: 2012-8-10 18:07
我的回答你看看  红色字体部分

public class B {

public static void main(String[] agrs){

  outer:  //标签
  for(int i = 0;i<5;i++){
   for(int j = 0;j <4; j++){
    if(j==2){
    //return;   return关键字并不是专门用于跳出循环的,而是结束一个方法。一旦在循环体内执行到一个return语句,该方法将会结束,循环自然也随之结束。
     //break;  在多重循环中,不带标号的break语句将只退出它所在的内循环
     //continue  停止当前循环的迭代,退回循环起始处,开始下次迭代
     //continue outer; 带标签的continue会达到标签的位置,并重新进入紧接在那个标签后面的循环。
     //break outer;   带标签的break语句从多重循环体的内部跳出到标号所标志的那层循环,并从标号标志的那层循环后面的语句继续执行。
     }
    }
   }
  }
}

作者: 魏-玉-彪    时间: 2012-8-10 18:58
//return; 执行到此语句,下面不执行,将值返回给系统。
     //break;  执行到此语句本次内循环结束,
     //continue  执行到此语句继续向下执行
     //continue outer;   执行到此语句结束本次内循环,继续本次外循环
//break outer; 结束外循环,实际是整个循环结束
作者: 黑马-王泽斌    时间: 2012-8-10 19:43
1、//return;执行return后就会停止执行函数中所有下边的代码,然后返回函数,整个函数都停止执行,但如果在try()finally{}中,如果在try中执行了return,依然会先执行finally,在return,而且finally不会改变return返回的值  例如:
public class Test {
public static void main(String[] args) throws Exception {
                System.out.println(fun());
}

public static int fun() throws Exception {
                int i = 0 ;                            //给i附初始值
                try {
                        return i;                          //return i,此时i的值是初始值0
                }finally {
                        ++i;                               //给i自加1,但最后return返回的值依然是初始值0,所以finally无法改变返回值
                        System.out.println("finally");     //先打印finally再执行return
                }
        }
}
2、//break;停止并跳出当前方法或循环体,但还会执行函数中其他的方法,还用在switch中。
//continue:跳出当前一次的循环,继续下一次循环。
以下两个也待大神指点
//continue outer;
//break outer;
作者: 左建飞    时间: 2012-8-10 20:48
public class B {

public static void main(String[] agrs){

  outer:  //标签
  for(int i = 0;i<5;i++){
   for(int j = 0;j <4; j++){
    if(j==2){
    //return;//返回值给调用者,并结束这个方法。
     //break;//结束当前循环,就拿这个程序来说,结束内循环。
     //continue;//结束当前循环的这次循环,继续下一次循环。其和break单独使用时,下面不能写任何语句,因为执行不到。
     //continue outer;//跳出当前的循环,跳到标签处,继续执行标签后面的语句。这个语句和下面的break 标签名;这两条语句一般用于循环嵌套中。
     //break outer; //跳出标签所指循环。执行这个所指循环后面的语句。
以上两条的区别是:
     }
    }
   }
  }
}
作者: 左建飞    时间: 2012-8-10 21:02
接上面:continue oute是结束当前的循环,继续执行标签所指的循环。
            而break outer是直接结束标签所指的循环。
标签就是循环的名字。
break和continue还有一个区别就是break还可以用于switch语句中,而continue只能用于循环语句。
作者: 刘学    时间: 2012-8-10 21:09
谢谢回答,明白了,问题已解决




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2