1. java源文件的后缀名是?一个java源文件中是否可以包括多个类(不是内部类)?有什么限制?
java源文件是以”.java”为后缀的;一个java源文件可以包含多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。
2. java语言中的goto关键字有什么作用?
goto是java语言的保留字,目前还未在java语言中使用。goto在其他语言中(C语言)通常与条件语句配合使用,可用来实现条件转移,构成循环,跳出循环体等功能。而在结构化程序语言中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。
3. &和&&有什么区别?
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有逻辑短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException,如果将&&改为&,则会抛出NullPointerException异常。又如if(x==33 &++y>0) y必定会增长,if(x==33 && ++y>0)不一定会增长。
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,例如我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,“0x31 & 0x0f”的结果为0x01。
4. switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
switch可作用于char、byte、short、int,switch可作用于char、byte、short、int对应的包装类;switch不可作用于long、double、float、boolean,包括他们的包装类。switch中可以是字符串类型,String(jdk1.7之后才可以作用在string上)。
5. “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编译器会对它进行特殊处理,因此可以正确编译。
6. java中标号的作用是什么?
标号提供了一种简单的break语句所不能实现的控制循环的方法,当在循环语句中遇到break时,不管其它控制变量,都会终止。outer用于解决当嵌套在几层循环中想退出循环时的情况。正常的break只退出一重循环,你可以用标号标出你想退出哪一个语句。
//当i为某个值时,找出一组k+j>i的组合
for(int i = 1; i < 10 ; i++){
outerJ:
for(int j = 1; j < 10; j++){
for(int k = 1; k < 10; k++){
if(k + j > i){
System.out.println(String.format("i=%d,j=%d,k=%d", i , j, k ));
break outerJ;
}
}
}
}
7. char类型的变量占用几个字节?一个中文汉字可以用char型变量存贮么?
char型变量是用来存储Unicode编码的字符的,unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字,但是,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。
8. 用最有效率的方法算出2乘以16等於几?
2 << 4,因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以16只要将其左移4位即可,而位运算cpu直接支持的,效率最高,所以,2乘以16等於几的最效率的方法是2 << 4。
9. 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
10. byte类型的两个值为-1的变量相加值是多少,byte类型的两个值为-128的变量相加又是多少?
byte类型的两个值为-1的变量相加值是-2,byte类型的两个值为-128的变量相加值是0。byte类型用1个字节进行存储,表示的最大数值范围为-128到+127。-1在内存中对应的二进制数据为11111111,如果两个byte类型的-1相加,运算后会产生进位,二进制结果为1,11111110,由于进位后超过了byte类型的存储空间,所以进位部分被舍弃,即最终的结果为11111110,也就是-2,这正好利用溢位的方式实现了负数的运算。-128在内存中对应的二进制数据为10000000,如果两个byte类型的-128相加,运算后会产生进位,二进制结果为1,00000000,由于进位后超过了byte类型的存储空间,所以进位部分被舍弃,即最终的结果为00000000,也就是0,这样的结果显然不是我们期望的,这说明计算机中的算术运算是会发生越界情况的,两个数值的运算结果不能超过计算机中的该类型的数值范围。