continue,break和return大家再熟悉不过了,今天主要对这三个关键字的使用细节和三者之间的区别进行一个简单的总结。
func1 begin
i=0
i=1
end
func1 begin
i=0
i=1
finally
continue和break最常用也是最基础的,所以在这里就不去列举代码实例进行说明了。
continue的作用:如果你在循环语句内使用continue,当执行到continue时,本次循环结束进行下一次的循环,而continue后的的代码将不会被执行。
break的作用:主要有两种用法一是结束循环体,二是在switch中结束case。不过这里要特殊说明的是带标签的break,虽然不是很常用,不过大家可以了解一下。
public class Test { public static void main(String[] args){ { back:for(int i = 0;i < 5;i++){ if (i == 2) {System.out.println("break"); break back; } } System.out.println("end");} } }
运行结果:break
end
再来看下面这段代码
public class Test { public static void main(String[] args){ back:{ for(int i = 0;i < 5;i++){ if (i == 2) {System.out.println("break"); break back; } } System.out.println("end");} } }运行结果:break
接下来重点说说return,return可以返回值也可以返回空值,一直对return空值有所疑问,于是做了一个实验。
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("begin"); func1(); System.out.println("end"); } public static void func1(){ System.out.println("func1 begin"); for(int i=0;i<5;i++){ if(i==2){ return; } System.out.println("i="+i); } System.out.println("func1 end"); } }运行结果:begin
func1 begin
i=0
i=1
end
当执行到return;的时候返回到了函数被调用的地方。
还有一个疑问就是return和finally块中的代码谁先执行,来看下面的代码
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("begin"); int j=func1(); System.out.println("j="+j); System.out.println("end"); } public static int func1(){ System.out.println("func1 begin"); try{ for(int i=0;i<5;i++){ if(i==2){ return i; } System.out.println("i="+i); } }catch (Exception e) { // TODO: handle exception System.out.println("catch"); }finally{ System.out.println("finally"); } System.out.println("func1 end"); return -1; }运行结果:begin
func1 begin
i=0
i=1
finally
j=2
end
通过以上结果来看finally中的语句先于return来执行的。
最后给大家看一个很有意思的情况
public int func(){ while (isTrue()) return 4; } boolean isTrue(){ return true; }以上代码会报错。
public int func(){ while (isTrue()) return 4; return 0; } boolean isTrue(){ return true; }这样就不会报错。
原因是编译器并不知道isTrue()返回的值是什么,所以它不知道当isTrue()为假时该怎么处理。
转帖请注明出处 http://blog.csdn.net/MichaelFeng726 谢谢!
作者:MichaelFeng726 发表于2013-4-6 0:45:52 原文链接
阅读:96 评论:0 查看评论