看着这些java面试题让面试官唱征服(一)

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

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

2.java有没有goto?

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

3.说说&和&&的区别

答:

  1. 共同点:&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式结果都为true时,整个运算结果才为true,否则只要有一方为false。则结果为false。
  2. &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。例如:对于if(str!=null && !str.equals(""))表达式,当str=null时,则后面的表达式不会被执行,所以不会出现空指针异常,如果将&&改为&则会出现。
  3. &还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算符,来获取该整数的最低的4个bit位,例如:0x31 & 0x0f 的结果为0x01。
  4. &符号通常用于位运算,也可以用作逻辑运算。&&符号主要用于逻辑运算,他们两个的最大区别在于,&是用于非短路的而&&是短路的。==

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

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

ok:
for(int i=0;i<10;i++){
	for(intj=0;j<10;j++){
	System.out.println("i="+i+",j="+j);
	if(j==5)break ok;
	}
   }	

但是,我个人通常并不习惯使用这种标号方式,而是让外层的循环条件表达式的结果可以受到里层循环体代码的控制。例如:要在二维数组中查找某个数字。

int arr[][]={{1,2,3},{4,5,6,7}.{9}};
boolean found =false;
for(int i=0;i<arr.length && !found;i++){
	for(intj=0;j<arr[i].length;j++){
		System.out.println("i="+i+",j="+j)
		if(arr[i][j] == 5){
		found = true;
		break;
		}
	}
}	

5.switch语句能否作用在byte上,能够作用在long上,能否作用在String上?

答:
在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte、short、char都可以隐含转换为int,所以这些类型以及这些类型的包装类型也是可以的。显然,lomg和String类型都不符合switch的语法规定,并且不能被隐式装换成int型,所以他们不能作用于switch语句中。

6.short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?

答:
对于short s1=1;s1=s1+1;由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再复制给short类型s1时,编译器将报告需要强制转换类型的错误。
而对于short s1=1;s1+=1;由于+=是java语言规定的运算符,java编译器会对他进行特殊处理,因此可以正确编译。

7.char型变量中能不能贮存一个中文汉字?为什么?

答:
char型变量是用来存储Unicode编码的字符的,Unicode编码字符集中包含了汉字,所以char型变量中当然可以存储汉字。不过,如果某个特殊的汉字没有被包含在Unicode字符集中,那么char型变量就不能存储这个特殊汉字。补充说明:Unicode编码占用两个字节,所以char类型的变量也是占用两个字节。

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

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

猜你喜欢

转载自blog.csdn.net/weixin_42507474/article/details/107552851