本文转载自 微信公众号“Java知音”
内容稍有修改或者添加,侵权则删。
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
考点:Java基础知识
答:Java源文件中可以包含多个类,但是必须只能有一个类是public来修饰的,并且用public来修饰的类名要与文件名一致。
2、Java有没有goto?
考点:保留字
答:goto是java的保留字,现在没有在Java中使用。
3、说说&和&&的区别。
考点:运算符
答:
回答思路:相同点、不同点
相同点:&和&&都可以用作于逻辑与(AND)操作,当符号两侧的表达式结果都为true时,结果才为true,如果两侧表达式有一侧为false,结果为false。
不同点:&&有短路与功能,当符号两侧中,左侧的表达式已经为false,那么右侧表达式就不会执行。如:
if(s != null && str.equals(s))
如果使用短路与&&,s为null时,后面的代码就不会执行,也不会抛出NullPointerException,如果用&的时候,就会抛出这个异常。
其次,&还可以做为位运算符,当&符号两边的符号不为boolean时,&进行按位与操作。
4、在JAVA中如何跳出当前的多重嵌套循环?
考点:控制流程
可以在外层的循环条件中受到内层变量的影响,如:
boolean found = false;
for(int i = 0; i<len && !found;i++){
for(int j = 0; j<len2 ;j++){
if(xxxxx){
found = true;
}
}
}
5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
考点:控制流程
swicth(e)中,e支持整型变量和枚举变量,其中整形变量指的是int类型或者其包装类Integer类,显然char,short,byte都可以隐式转换为int,所以他们switch支持他们,long不支持转换为int,因此swicth不支持long,自从Java 1.7之后,swicth已经支持String了。
6、short s1= 1; s1 = s1 + 1;有没有错? short s1 = 1; s1 += 1;有没有错?
考点:运算符、数值类型之间的转换
- 有错。因为s1是short类型,而1默认是int类型,所以在进行相加运算时,Java编译器会自动把运算结果提升为Int类型,Int比short类型高阶,需要强制类型转换,在这里没有,因此会报错。
- 没有错。+=是Java语言规定的运算法,java编译器会对它进行特殊的处理,因此可以正确编译。
PS:合理的转换如下。从低到高是可以隐式转换的,但是从高到低则不可以隐式转换,并且容易丢失一定的精度。
7、char型变量中能不能存贮一个中文汉字?为什么?
考点:变量
答:可以。因为char变量用存储Unicode类型的编码,Unicode类型编码中包含中文汉字,因此char也可以用来存贮一个中文汉字,如果一个特殊的中文汉字不包含在Unicode编码中,那么就无法保存。另外,Unicode编码占2个字节,char也占据两个字节。
附带一个Java字符长度表
8、用最有效率的方法算出2乘以8等於几?
考点:位运算
2 << 3
9、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
考点:Finnal修饰符
在使用final关键字修饰一个变量的时候,是引用的变量不能变,而是不是引用的对象不能变。
例:
final StringBuilder a = new StringBuilder("sasd");
a不能再指向一个新的对象。
但是a指向的对象是可以进行变更的,如:
a.append("haha");
10、静态变量和实例变量的区别?
考点:类变量
不同点:
1. 语法定义上的不同:静态变量在类中定义需要加上static关键字,而实例变量不需要。
2. 程序运行时的区别:静态变量只要程序加载了类的字节码,那么不需要创建任何实例对象,静态变量也会被分配空间,所以静态变量也叫做类变量。实例变量则必须要创建实例对象,才会被分配空间。
3. 使用的区别:静态变量的使用是:类名.变量名;实例变量的使用是:实例名.变量名