目录
break+循环标签、break、continue+循环标签、continue的区别
典型面试题1
典型面试题:在java中有没有goto?
众所周知我们对于c语言的学习中有一个goto的语法,从某些方面来说提供了一定的方便性,很奇妙,但是也很不合理,因为它使得程序的运行顺序被打乱,如果程序中多次的使用goto语句,不仅降低了程序的可读性,也会对程序的维护与更新造成影响。
因此为了避免上述的错误,Java语言取消了对goto的使用,取而代之的是使用循环标签。 但是为了避免程序员自行使用goto带来同样的混淆性(例如将方法或者变量名称声明为goto),Java语言依然将goto定义为一个关键字,用来限制程序员的使用,由于是一个从不会使用的关键字,所以也称为“保留字”。
在下面的代码中详细的解释了goto的性质:
public class gotoandconst {
public static void main(String[] args) {
int[][] array={{1,29,89},{2,3,4},{12,90}};
int number=0;
//int goto=0; //定义出错
outer:
for(int i=0;i<array.length;i++){
System.out.println("aaaa");
for(int j=0;j<array[i].length;j++){
System.out.println(array[i][j]);
number++;
if(number==5){
break outer;
//continue outer;
//goto outer; //没有这种用法
}
}
}
System.out.println("执行次数为:"+number+"次");
}
}
执行结果:
aaaa
1
29
89
aaaa
2
3
执行次数为:5次
输出数组的前五个数字后直接就跳出了循环,随后就打印了执行的次数。
还有一个知识点就是break和continue的区别,如果吧break改成continue会出现什么结果呢?
执行结果:
aaaa
1
29
89
aaaa
2
3
aaaa
12
90
执行次数为:7次
一共执行了七次,其中在输出第二个数组的时候少输出了一个数,但是我们想一下就会知道原因,在输出[1][1]的时候number已经是等于5了所以就会放弃执行当前循环跳到outer的位置继续执行,即执行了下一组数组。
注意:还有一个关键字和goto的性质一样,就是const。
典型面试题2
典型面试题:true、false、null是关键字吗?
在很多的集成开发环境中,true、false、null往往使用和关键字同样的颜色给以标注,这便增加了这三个符号的混淆性,很多人认为这三个是关键字,这个想法显然是错误的。在Java语言中,这3个符号是3个字面常量(也称直接量)。其中前两个是布尔类型的字面常量,null是一个引用类型的字面常量。这就好比“ABC”是String类型的字面常量一样。尽管他们不是关键字,也不可以将他们作为标识符来使用,否则还是会产生编译错误。
要点总结:
在Java中,goto与 const作为保留的关键字而存在,虽然未在程序中使用,但是也禁止程序员将其作为标识符来使用。
true、 false与null是3个字面常量,并非Java中的关键字,在程序中也禁止作为标识符使用
break+循环标签、break、continue+循环标签、continue的区别
1.continue+循环标签
outer1:
for(int i =0;i<4;i++){
System.out.println("开始循环的次数是:"+i+"次");
for(int j =0;j<2;j++){
if(i==2){
continue outer1;
//continue;
//break outer1;
//break;
}
System.out.println("当前值是:"+j);
}
System.out.println("@@@@@@@@@@@@@@@@@@");
}
运行结果为:
开始循环的次数是:0次
当前值是:0
当前值是:1
@@@@@@@@@@@@@@@@@@
开始循环的次数是:1次
当前值是:0
当前值是:1
@@@@@@@@@@@@@@@@@@
开始循环的次数是:2次
开始循环的次数是:3次
当前值是:0
当前值是:1
@@@@@@@@@@@@@@@@@@
注:当i=2的时候,continue outer1 使程序回到了outer1最开始循环的位置,开始下一次循环,这个时候执行的循环是i=3而不是重新从i=0开始。同时当使用continue outer1跳出内层循环的时候,外层循环后面的语句也不会执行。也就是是在开始循环的次数是:2次后面不会出现一串@号了。
2.continue
outer1:
for(int i =0;i<4;i++){
System.out.println("开始循环的次数是:"+i+"次");
for(int j =0;j<2;j++){
if(i==2){
//continue outer1;
continue;
//break outer1;
//break;
}
System.out.println("当前值是:"+j);
}
System.out.println("@@@@@@@@@@@@@@@@@@");
}
运行结果:
开始循环的次数是:0次
当前值是:0
当前值是:1
@@@@@@@@@@@@@@@@@@
开始循环的次数是:1次
当前值是:0
当前值是:1
@@@@@@@@@@@@@@@@@@
开始循环的次数是:2次
@@@@@@@@@@@@@@@@@@
开始循环的次数是:3次
当前值是:0
当前值是:1
@@@@@@@@@@@@@@@@@@
和上面相比就可以看出循环标签的用处了。continue和continue+循环标签的区别主要是在与起点不同。
3.break
outer1:
for(int i =0;i<4;i++){
System.out.println("开始循环的次数是:"+i+"次");
for(int j =0;j<2;j++){
if(i==2){
//continue outer1;
//continue;
//break outer1;
break;
}
System.out.println("当前值是:"+j);
}
System.out.println("@@@@@@@@@@@@@@@@@@");
}
运行结果:
开始循环的次数是:0次
当前值是:0
当前值是:1
@@@@@@@@@@@@@@@@@@
开始循环的次数是:1次
当前值是:0
当前值是:1
@@@@@@@@@@@@@@@@@@
开始循环的次数是:2次
@@@@@@@@@@@@@@@@@@
开始循环的次数是:3次
当前值是:0
当前值是:1
@@@@@@@@@@@@@@@@@@
注:我们直接使用break的话,只是直接跳出内层循环。
4.break+循环标签
outer1:
for(int i =0;i<4;i++){
System.out.println("开始循环的次数是:"+i+"次");
for(int j =0;j<2;j++){
if(i==2){
//continue outer1;
//continue;
break outer1;
//break;
}
System.out.println("当前值是:"+j);
}
System.out.println("@@@@@@@@@@@@@@@@@@");
}
运行结果:
开始循环的次数是:0次
当前值是:0
当前值是:1
@@@@@@@@@@@@@@@@@@
开始循环的次数是:1次
当前值是:0
当前值是:1
@@@@@@@@@@@@@@@@@@
开始循环的次数是:2次
注:从结果就可以看出当i=2的时候,break+标签 直接把内外层循环一起停掉了。而如果我们单独使用break的话就起不了这种效果,那样只是跳出内层循环而已。
动动小手,点点关注,学到更多!!!!
No pains No results