& E' a/ X7 W2 ^ 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 7 A0 `5 u% y2 u, V3 x7 l4 _
( r! {% j- j5 w: m: [0 }; o
第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 4 a2 d* i& I+ W1 b5 S( I4 i, s. d1 e; H
第四,&和&&的区别。 $ H, ]8 G7 U+ v8 }- } % a5 B" H* K0 I& t! V' J4 L 第五,HashMap和Hashtable的区别。 0 ?- n7 o' I: N: y( g$ \+ w
- r* ~$ D% t5 T
第六,Collection 和 Collections的区别。 0 m+ {% `( n- Z# x, y
0 a& X2 Q0 X j+ F8 a 第七,什么时候用assert. ; K6 \+ M2 f! d7 |9 V
) r8 u7 [4 m8 J8 f0 p2 l$ {. ` 第八,GC是什么? 为什么要有GC? T: M& Q6 P; i 1 e( U* W$ u+ }4 ?2 C- Y: |" C 第九,String s = new String("xyz");创建了几个String Object? ) j: j. D! n' E
* r/ {! k) T" k, o
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少? * f. ~, H; g5 k9 U' V & Q/ ], e' z9 ^( J3 X; t 第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? - S2 V: p$ C. N g6 c, y$ ?
8 h! Z5 d1 W* M) P3 ^5 U. c9 {; k 第十二,sleep() 和 wait() 有什么区别? ' Q: }) W N; q Q8 n+ }
' F9 }. p- |! v 第十三,Java有没有goto? 5 s9 F2 K4 Y. u8 y2 P2 Q$ j( t- s # u* v. {( ~6 t9 m) e1 H 第十四,数组有没有length()这个方法? String有没有length()这个方法? 2 `8 l7 B1 G0 Y. N& C" g1 E* R, S0 S & c7 t/ {1 T/ N' v 第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? E: b0 V( ~0 x0 P1 p1 R9 X. d/ {) D; Q+ s$ n( { }, q g& L
第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? ; _8 L0 Q9 |+ q0 o+ ~9 Q7 r5 B
' n! _: P3 Z/ s" X( e$ R! M 第十七,给我一个你最常见到的runtime exception. 5 B' U7 x- G; ?7 t2 d5 P9 i / h/ Y; t: l7 V, V9 h8 C2 Q B 第十八,error和exception有什么区别? + l3 H, K7 v* g8 W. l
- i3 p1 d# G) d$ D/ E! m
第十九,List, Set, Map是否继承自Collection接口? / `8 s9 a( }9 T& J( x( s* c# F 1 l" a* z0 u+ k! K* j2 R 第二十,abstract class和interface有什么区别? 3 F. P8 b9 Y( ]- z6 B! b( r
0 I& v6 N, C, U7 a! V6 \" W
第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? : p3 d0 h' \/ o8 K
- P3 `- C; A/ }' l 第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 1 k% h% n, {1 E' b - B4 C' ? I" g' l 第二十三,启动一个线程是用run()还是start()? * J1 ~% j) F% a$ W7 p
' ^2 P/ ^! r N. q' s 第二十四,构造器Constructor是否可被override? r" `. \7 ^; o* [; v8 f# l7 s: d6 F6 T8 ~
第二十五,是否可以继承String类? ( s5 y4 y) D& q0 g7 s n+ p' k1 y) b/ W7 H+ }
第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? , G8 T# z9 }# ?9 o+ d$ @% N+ N# Y, V* x 5 m L% h& ?- n. X( [ 第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 0 @4 t& s# N" S! d1 n: s
* c8 c) q, O. Q0 ~9 d' V t7 [% p 第二十八,编程题: 用最有效率的方法算出2乘以8等於几? 9 ` B1 j: n2 _0 K8 K% b: ^8 }, r- s8 ^4 l
第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? & V( J2 r8 c l/ V2 _" ^5 E9 f. Y2 ~* j L' s; C
第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 0 f5 u5 }5 U) U$ Z" q$ B( ^ C8 r! h& S' ^+ j
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? ) d# x' C; _6 ?/ h) {5 v7 N$ s* d 9 o+ O Y' O% A: | 第三十二,编程题: 写一个Singleton出来。 $ d8 o1 x$ G& S* W3 s$ k/ R8 C: n2 e H4 G# `
以下是答案 " t; l" Y& d' x" }/ a
9 l. `3 P% c2 h4 [. Q2 Y
第一,谈谈final, finally, finalize的区别。 ) J e4 n( Y: d6 h( ?5 R1 e
) e& J; @- v8 R: e# [9 p; @
final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 ' e1 D% p8 D) h# ?4 k# a7 q
5 |( x7 x( ~ I4 h 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 6 ?8 f) ?) O) V" _6 v! u: c' s3 I' o" Q+ [; X
匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。 3 D! W2 o0 a+ m* R
/ H8 ?9 L. G* a6 |8 z 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 + M* q! n6 Z* J( u; Q$ `$ P; t$ i& _+ m) k( u
Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&page=1 , m+ w; G8 a' x) X
7 p( O. q) [7 }! Z1 f 注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 2 T0 }/ |2 w1 j" ~4 G8 w) M5 D9 H- v
第四,&和&&的区别。 " G: X- y* D7 v$ j0 d9 S - c4 G1 E( e) f; s& {" [/ u# ~ &是位运算符。&&是布尔逻辑运算符。 1 O8 r! H# i. A5 v$ y 5 t! p5 |9 p# [2 e: T2 D 第五,HashMap和Hashtable的区别。 5 i5 e8 I" a' Z" M) w4 G7 ]; a& ]9 m5 n( F7 @2 i
都属于Map接口的类,实现了将惟一键映射到特定的值上。 & e) o8 J* f, Z/ r2 S
5 `9 Q1 q% V9 C" S$ g
HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。 7 A2 T/ }4 ]$ h5 \7 L9 P l* R: ]
% k- Y% G; |- y1 e* F4 p) s# i0 M
Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。 5 s9 c: e5 N) ]" V! ~4 H3 p2 F" F
( f5 p3 l! @, Q* w
第六,Collection 和 Collections的区别。 6 i. Z7 X- x, U
$ I, y* j- O% [& E3 ?; [2 g
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。 + U" W4 X O! L2 [- E1 t1 o2 r, `$ h
r4 G# t8 m: U" Y
Collection是个java.util下的接口,它是各种集合结构的父接口。 , a6 r9 M! M/ g1 F, c' e% [) T
3 T4 D8 `+ {# b; y [* j第七,什么时候用assert。 1 n8 W4 u% v7 |- s
$ ^" C" D" w: P 断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 AssertionError。它用于调试目的: 4 s' _, c" {8 p* C6 c' ~1 O( P
- p: ~2 j( K6 j1 massert(a > 0); // throws an AssertionError if a <= 0 % p3 c3 w1 m$ x& r1 Q9 F, W $ I/ A ^6 U& I! u0 Q- F9 v 断言可以有两种形式: * {: |5 U" C/ n0 T) K8 S6 _
* X! K' l/ [' m0 L# d# p assert Expression1 ; , f; W4 P3 a& L4 K9 N |- y' U! C; M assert Expression1 : Expression2 ; " B- x R/ [* ^8 [3 w4 ~" f5 l