Java基本概念(世外隐者——隐居深山的“关键字”)

目录

 典型面试题1

  典型面试题2

break+循环标签、break、continue+循环标签、continue的区别 

1.continue+循环标签

2.continue

3.break

4.break+循环标签

 典型面试题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 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值