# {/ Z9 \! c( P7 J% N6 B# _ 第九,String s = new String("xyz");创建了几个String Object? + |1 M6 h" C$ W/ |1 L
8 v5 N. p% Q% R3 }2 v9 K
两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。 7 k* n: i' {* \2 G1 N" E, W
! Y: u! m3 ]% w' @6 \
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 8 X& i) D( R3 c: Y
& g9 H$ V, t) h. g7 W- R e7 Q Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11; # K" g4 s4 A0 b4 N! S- R V , B! [1 k+ ]- I8 V, l 第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 5 w7 m1 p( e! w+ Q/ R! ], i t' w# [+ r
# ?& t& e2 q9 u& p9 l) c
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。 , `0 n6 ^3 b1 t
) m% V, |$ T8 _, y& d- |( M w# ?( t) ]
第十二,sleep() 和 wait() 有什么区别? 搞线程的最爱 + W S" Q' i0 b* T8 W4 m7 k( l
! @! E# ?6 E, \
sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级,(b)正在运行的线程因为其它原因而阻塞。 - V* R6 A8 j. T. j0 v
- `1 h3 ^9 O! ?- Z( p wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。 i3 p9 K% Z6 B6 v5 o) D$ B+ Z+ h" r6 n$ L1 F X6 a
第十三,Java有没有goto? ' X5 I: W9 N% Z: }& a' E
, V- w/ g/ w# t9 m; a$ m Goto?java中的保留字,现在没有在java中使用。 , v: [' `* x/ A 0 w; H8 N! i: _/ e 第十四,数组有没有length()这个方法? String有没有length()这个方法? 2 x5 E! i: g' ^9 ^# H0 Q, | u( }0 H8 [/ [) }6 |. U
数组没有length()这个方法,有length的属性。 0 {$ o0 a& z, q; f4 X: T
String有有length()这个方法。 2 c4 R( E9 N; j0 d , x: e" \& J8 ` b4 ^4 F( N# Z 第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? / a$ V4 }+ `: c0 B, ?6 T
4 g' k6 b* [- d2 h! F 方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 * ]0 E$ C- R# K7 b/ h
# }+ p* z" s# z* A 第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? ! Z" H. T, ?& v# ^! ~6 k& N6 x v# C. [5 g- A) ^
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。 O9 Y& e y) ~( M
L; |0 g4 L! U6 L/ D# K I+ e9 _- S& @ p7 R
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? 8 s- ~. r) q; h! M. D
; _; [* ?8 n2 o) F switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。 # Y1 M4 p# M$ D3 W
% F3 K9 V3 ?. A# f' n' j5 M( B
第三十二,编程题: 写一个Singleton出来。 ( w. X S% S! ~% T1 k0 G8 f
4 v/ V# F9 D9 w. A# u; M& R
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 , N! p( P* Q( y7 G5 G- I/ N
' F1 R+ j! m7 J z, }" x2 `
一般Singleton模式通常有几种种形式: $ g+ z9 K) N o9 {, K; ^* V ) p( J) u. [& ~" M5 e6 |& d 第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。 & a1 ^6 d4 O) X/ ]9 F/ d! w7 g. d+ ^* |+ Z4 q8 y' E
public class Singleton { ( O) v- r" a, P private Singleton(){} " M2 a( s# h# H //在自己内部定义自己一个实例,是不是很奇怪? # p) p7 J% C( Q5 ] //注意这是private 只供内部调用 ( W$ O# [7 O3 Q# l private static Singleton instance = new Singleton(); 9 B; X$ Q7 Z5 ?( z& ~& l* i2 g
//这里提供了一个供外部访问本class的静态方法,可以直接访问 , h9 p7 r% T# r o public static Singleton getInstance() { " k$ Z! V9 M& ~$ l9 t z
return instance; % |* G6 Q* `$ G: p ]. d } - j9 C6 ^* y6 d& R2 e& @' s* q* v} / ? s1 ^' m/ ^& D. x + Q- z6 B5 m; q7 x3 I+ E: [$ T 第二种形式: 6 F+ M' c. a# x/ u& K" L, {3 ?! Y
3 w4 C) K$ |: r, H
public class Singleton { 5 s$ o) ]) B2 E7 x3 Z, V
private static Singleton instance = null; 9 V7 W3 I/ @: \9 q5 A( J# i public static synchronized Singleton getInstance() { 0 m2 z% \3 e' v1 }9 P //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次 5 R# ^' L! [" @+ C. O& v //使用时生成实例,提高了效率! " y6 r! k0 C$ R/ j' W4 K if (instance==null) ! h3 [$ Z( b& j: N G/ t
instance=new Singleton(); $ Z4 I* O3 \0 I) Kreturn instance; } 7 }2 M. x3 A4 V# ?6 Z} ; G6 U( W! H. J7 I: k3 s$ Z 6 {/ G8 h+ I+ w" F* p 其他形式: 0 g) \1 I5 ]4 o2 g" y % O1 s: B2 C# e- x5 e2 ^% Y1 _ 定义一个类,它的构造函数为private的,所有方法为static的。 5 C9 I- R4 W8 }8 t5 I 5 Q- w. }: `. N 一般认为第一种形式要更加安全些 / v$ U0 l R5 a
$ |) J8 v( D5 F7 q. V* I* j 第三十三 Hashtable和HashMap ' W; m9 g% |+ p0 o; j0 {& W. i, v; L( B% d/ V. d
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现 5 C" z. s$ r& `+ G
$ j7 D3 A8 B2 j' c' s* r
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许 ) O# n9 n' t+ r) x
6 B$ {' f5 s( w 还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 ) ^6 J+ J2 p2 ^/ j" l# ~' b
3 m0 e1 p. g1 w 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。 8 G% o, E g+ o7 l0 {+ _9 O) H& V- t# `- X+ m
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。