下班后翻了翻面试题,发现面试题竟然有部分都答不上来,下面我就列出10道看大家能答出来几道呢?(我的回答不一定都正确,欢迎指正,共同进步!)
1.下面java代码的输出是什么?
public class Test {
public static void main(String[] args) {
method(null);
}
public static void method(Object o) {
System.out.println("Object method");
}
public static void method(String s) {
System.out.println("String method");
}
}
答案:将打印"String method".首先,null在Java中不是一个对象,在Java中我们可以将null赋给任何一个引用类型。而Java中字符串是java.lang.String类的对象,在这里,Java编辑器会选择最具体的参数类型来调用重载方法,而String类型比Object更为具体,所以会调用method(String s)方法;
2.下面java代码的输出是什么?
public class Test{
public static void main(String[] args){
Integer num1 = 100;
Integer num2 = 100;
if(num1 == num2){
System.out.println("num1 == num2");
}
else{
System.out.println("num1 != num2");
}
}
}
答案:将打印"num1 == num2".每当使用"=="比较两个不同的对象引用时,值总是false.但是在这里,由于Integer缓存,num1和num2是自动装箱的,因此num1==num2返回"true",同时需要注意,整数缓存只会发生在-128到127之间的值;
3.垃圾收集是否可以防止Java应用程序内存不足?
答案:Java垃圾收集器不能防Java应用程序耗尽内存,他只是在对象超出范围不在需要时清除未使用的内存.因此,他不能保证防止Java应用程序不耗尽内存;
4.Java是按 [引用传递] 还是 [按值传递]?
答案:Java总是[按值传递],然而,当我们传递一个对象的值时,我们传递对它的引用,因为变量存储对象引用,而不是对象本身.但这不是[引用传递];
5.下面的代码创建了多少个String对象?
public class Test{
public static void main(String[] args){
String s = new String("Hello World");
}
}
答案:创建了2个String对象,一个在堆内存中,一个在方法区中的字符串常量池中。
6.下面的代码输出什么?
public class Test{
public static void main(String[] arr){
System.out.println(0.1*3 == 0.3);
System.out.println(0.1*2 == 0.2);
}
}
答案:第一局输出false,第二局输出true。
7.有没有可能在Java中重写或重载静态方法?
答案:重载(overload)静态Java方法时可能的,但是不可能重写(override)他们,你可以在子类中编写具有相同命名的另一个静态方法,但是它不会重写超类方法,他在Java中被称为方法隐藏。
8.测试两个double值是否相等的最可靠的方法是什么?
答案:Double.compare(d1,d2)==0;
9.如果try或catch块执行一个return语句,finally块是否会被执行?
答案:会执行,阻止finally块执行的唯一方法是使用System.exit();
10.下面代码输出什么?
public class Test{
public static void main(String[] args){
System.out.println("main method");
}
public static void main(String args){
System.out.println("Overloaded main method");
}
}
答案:会打印"main method".不会错误或异常,因为main方法可以在Java中重载,必须从main方法内部调用它才能像其他方法一样执行。
最后今天没有加班开森,加U!