zoukankan      html  css  js  c++  java
  • 1.一个.java源文件中是否可以包括多个类?2...

    1.一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?

        答:可以有多个类,但只能有一个public类,并且public的类名必须与文件名相一致。

    2.java有没有goto?

        答:java中的保留字,现在没有在java中使用。

    3.说说&和&&的区别?

        答:&和&&都可以用作逻辑与的运算,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。

             双与还具有短路功能,双与运算时,当双与左边为假时,则不再计算双与右边的表达式了。

             所以,双与更为高效,双与用的较多。

             此外,单与还可以作位运算。

             补充知识点:位运算

             <<     左移,左移几位其实就是该数据乘以2的几次方(可完成2的次幂运算)

             >>     右移,右移几位就是除以2的几次幂

             >>>   无符号右移,数据右移时,高位出现空位,无论原高位是什么,空位都用0补。

             &       与运算    例3&6即将3和6都用二进制数表示,然后每一位做与运算(都为1则得1,其余都得0)

             |        或运算    例3|6即将3和6都用二进制数表示,然后每一位做或运算(有一个为1则为1)

             ^       异或运算   相同为0,相反为1 (一个数异或同一个数两次结果还是这个数)

             ~       反码   取反(除了符号位以外)

    4.将两个数进行互换a=3,b=5 (不需要第三方变量)

        a=a^b;//a=3^5

        b=a^b;//b=(3^5)^5  ;b=3

        a=a^b;//a=(3^5)^3  ;a=5

    5.用最有效率的方法计算出2乘以8等于几?

        2<<3

        因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算是cpu直接支持的,效率最高。

    6.在java中如何跳出当前的多重嵌套循环?

        在java中,想要跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break语句,即可跳出外层循环。例如:

         label:

         for(int i=0;i<10;i++){

             for(int j=0;j<10;J++){

                    System.out.println("i="+i+"j="+j);

                       if(j==5) break label;

              }

          }

    补充:在java中,标签起作用的唯一的地方刚好是在迭代语句之前。“刚好之前”的意思表明,在标签和迭代之间置入任何语句都不好。而在迭代之前设置标签的唯一理由是:我们希望在其中嵌套另一个迭代或者一个开关。这是由于break和continue关键词通常只中断当前循环,但若随同标签一起使用,他们就会中断循环,直到标签所在的地方:

        label1:

        outer-iteration {

            inner-iteration  {

                  //...

                  break; //(1)

                 //...

                  continue; //(2)

                 //...

                  continue label1; //(3)

                 //...

                  break label1; //(4)

           }

       }

    在(1)中,break中断内部迭代,回到外部迭代。在(2)中,continue使执行点回到内部迭代的起始处。在(3)中,continue label1同时中断内部迭代以及外部迭代,直到转到label1处;随后,他实际上是继续迭代过程,但是从外部迭代开始。在(4)中,break label1也会中断所有迭代,并回到label1处,但并不重新进入迭代。也就是说,他实际是完全终止了两个迭代。

           1.一般的,continue会停止运行剩余的循环主体,退回到循环的开始处继续运行。

           2.带标签的continue会到达标签的位置,并重新进去紧接在那个标签后面的循环。

           3.一般的break会中断并跳出当前循环。

           4.带标签的break会中断并跳出标签所指的循环。

    要记住的重点是:在Java里需要使用标签的唯一理由就是因为有循环嵌套的存在,而且想从多层嵌套中break或continue。

  • 相关阅读:
    牛客代码测试栈深度
    "Coding Interview Guide" -- 在行列都排好序的矩阵中找数
    "Coding Interview Guide" -- 括号字符串的有效性和最长有效长度
    "Coding Interview Guide" -- 将正方形矩阵顺时针转动90°
    "Coding Interview Guide" -- 按照左右半区的方式重新组合单链表
    "Coding Interview Guide" -- 先序、中序和后序数组两两结合重构二叉树
    "Coding Interview Guide" -- 只用位运算不用算术运算实现整数的加减乘除运算
    "Coding Interview Guide" -- 从N个数中等概率打印M个数
    "Coding Interview Guide" -- 判断字符数组中是否所有的字符都只出现过一次
    "Coding Interview Guide" -- 字符串的统计字符串
  • 原文地址:https://www.cnblogs.com/dazuihou/p/3562570.html
Copyright © 2011-2022 走看看