日期:2014-05-20  浏览次数:20800 次

JAVA程序员面试32问!(答者有分!)
第一,谈谈final, finally, finalize的区别。 
第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。

第四,&和&&的区别。

第五,HashMap和Hashtable的区别。

第六,Collection 和 Collections的区别。

第七,什么时候用assert。

第八,GC是什么? 为什么要有GC? 

第九,String s = new String("xyz");创建了几个String Object?

第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

第十二,sleep() 和 wait() 有什么区别?

第十三,Java有没有goto?

第十四,数组有没有length()这个方法? String有没有length()这个方法?

第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

第十七,给我一个你最常见到的runtime exception。

第十八,error和exception有什么区别?

第十九,List, Set, Map是否继承自Collection接口?

第二十,abstract class和interface有什么区别?

第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

第二十三,启动一个线程是用run()还是start()?

第二十四,构造器Constructor是否可被override?

第二十五,是否可以继承String类?

第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

第二十八,编程题: 用最有效率的方法算出2乘以8等於几?

第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

第三十二,编程题: 写一个Singleton出来。


------解决方案--------------------
1: final是常量关键字,finally 是异常处理中的一块(tyr,carch,),finalize是Object 中提供的一个方法,
在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,
例如关闭文件等。 
2: 可以。
3: 静态类的方法直接用方法名就可调用,类部类的方法其他类不可直接调用。
4:&是位运算符,&&是逻辑运算符。
5: HashMap 是HashTable 的轻量级实现,HashMap允许空键值,HashTable不允许,
6: collection 是集合类的上级接口,继承她的有 List,Map ,collections 是针对集合类提供的方法,包括索引..
7: 断言,为了精确反应方法返回值进行的测试。
8: GC 垃圾回收机制,java中新提供的方法,有了GC程序员就不用在去费力管理自己声明的对象,..
9: 2
10:12,-11
11: 有,类型不一致,
12:sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那 
个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级 (b)正在运
行的线程因为其它原因而阻塞。 wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,
该线程会 暂停执行,被调对象进入等待状 态,直到被唤醒或等待时间到。
13:有,保留子,不使用。
14:数组是属性,String是方法,
15:一个是重写(对类的操作,子类继承父类,重写父类的方法),一个是重载(对方法,相同的方法名,
不同的参数个数,类型,构成重载),Overloaded可改变返回值。
16: equals(),==是比较是否的同一对象,equals对值比较
17: 下标越界,空指针
18: error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序
能处理这样的情况。 
  exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。 
19:List ,Set是
20: Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。
而通常的内部类需要在外部类实例化后才能实例化。 

21: 可以。
22: 都可以。
23:start(). 
24: 不可以
25: 不可以
26: 不可以,
27: 之前,
28: 2<<3
29: 不可以
30: 值传递
31: 可以。
32:
public class StringLogn {
public StringLogn (){};
private static StringLogn logn=new StringLogn();
public StringLogn getLogn(){
return logn;
}
}

------解决方案--------------------
Java陷阱一箩筐----面试题集及解答
第一,谈谈final, finally, finalize的区别。
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
  finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
  finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。