1.一个.java源文件中是否可以包括多个类?2...

时间:2021-10-24 19:40:56

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。