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。