java中容易混淆的15个问题

第一,��final, finally, finalize的�^�e。
第二,Anonymous Inner Class (匿名�炔款�) 是否可以extends(�^承)其他�,是否可以implements(���F)interface(介面)?
第三,Static Nested Class 和 Inner Class的不同,�f得越多越好(面��}有的很�\�y)。
第四,&和&&的�^�e。
第五,HashMap和Hashtable的�^�e。
第六,Collection 和 Collections的�^�e。
第七,什�N�r候用assert。
第八,GC是什�N? �槭颤N要有GC?
第九,String s = new String("xyz");��建了���String Object?
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
第十一,short s1 = 1; s1 = s1 + 1;有什�N�e? short s1 = 1; s1 += 1;有什�N�e?
第十二,sleep() 和 wait() 有什�N�^�e?
第十三,Java有�]有goto?
第十四,�列有�]有length()�@��方法? String有�]有length()�@��方法?
第十五,Overload和Override的�^�e。Overloaded的方法是否可以改�返回值的�型?
第十六,Set�Y的元素是不能重�}的,那�N用什�N方法��^分重�}�c否呢? 是用==�是equals()? 它��有何�^�e?
第十七,�o我一��你最常�到的runtime exception。
第十八,error和exception有什�N�^�e?
第十九,List, Set, Map是否�^承自Collection介面?
第二十,abstract class和interface有什�N�^�e?
第二十一,abstract的method是否可同�r是static,是否可同�r是native,是否可同�r是synchronized?
第二十二,介面是否可�^承介面? 抽象�是否可���F(implements)介面? 抽象�是否可�^承���w�(concrete class)?
第二十三,��右���程是用run()�是start()?
第二十四,��造器Constructor是否可被override?
第二十五,是否可以�^承String�?
第二十六,��一���程�M入一��物件的一��synchronized方法後,其他�程是否可�M入此物件的其他方法?
第二十七,try {}�Y有一��return�Z句,那�N�o跟在�@��try後的finally {}�Y的code��不��被�绦校�什�N�r候被�绦校�在return前�是後?
第二十八,�程�}: 用最有效率的方法算出2乘以8等於��?
第二十九,����ο笾迪嗤�(x.equals(y) == true),但�s可有不同的hash code,�@句��Σ��?
第三十,��一��物件被��作���鬟f到一��方法後,此方法可改��@��物件的�傩裕��K可返回�化後的�Y果,那�N�@�Y到底是值�鬟f�是引用�鬟f?
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
第三十二,�程�}: ��一��Singleton出�怼�
以下是答案
第一,�� final, finally, finalize 的�^�e。
final-
修�符(�P�I字)如果一���被�明�� final ,意味著它不能再派生出新的子�,不能作�楦割�被�^承。因此一���不能既被�明�� abstract 的,又被�明�� final 的。�⒆��祷蚍椒��明�� final ,可以保�C它��在使用中不被改�。被�明�� final 的��当仨�在�明�r�o定初值,而在以後的引用中只能�x取,不可修改。被�明�� final 的方法也同�又荒苁褂茫�不能重�d
finally-
再��常�理�r提供 finally �K��绦腥魏吻宄�操作。如果��出一����常,那�N相匹配的 catch 子句就���绦校�然後控制就���M入 finally �K(如果有的�)。
finalize-
方法名。 Java 技�g允�S使用 finalize() 方法在垃圾收集器�⑽锛��挠����w中清除出去之前做必要的清理工作。�@��方法是由垃圾收集器在�_定�@��物件�]有被引用�r���@��物件�{用的。它是在 Object �中定�x的,因此所有的�都�^承了它。子�覆�w finalize() 方法以整理系�y�Y源或者�绦衅渌�清理工作。 finalize() 方法是在垃圾收集器�h除物件之前���@��物件�{用的。
第二, Anonymous Inner Class ( 匿名�炔款� ) 是否可以 extends( �^承 ) 其他�,是否可以 implements( ���F )interface( 介面 )? 匿名的�炔款�是�]有名字的�炔款�。不能 extends( �^承 ) 其他�,但一���炔款�可以作�橐��介面,由另一���炔款����F。
第三, Static Nested Class Inner Class 的不同,�f得越多越好 ( 面��}有的很�\�y )
Nested Class
(一般是 C++ 的�f法), Inner Class ( 一般是 JAVA 的�f法 ) Java �炔款��c C++ 嵌套�最大的不同就在於是否有指向外部的引用上。具�w可� http: //www.frontfree.net/articles/services/view.asp?id=704&page=1 注: �o�B�炔款�( Inner Class )意味著 1 ��建一�� static �炔款�的物件,不需要一��外部�物件, 2 不能�囊�� static �炔款�的一��物件�L��一��外部�物件
第四, & && 的�^�e。
&
是位�\算符。 && 是布林���\算符。
第五, HashMap Hashtable 的�^�e。 都�凫� Map 介面的�,���F了�⑽┮绘I映射到特定的值上。
HashMap
��]有分�或者排序。它允�S一�� null �I和多�� null 值。
Hashtable
�似於 HashMap ,但是不允�S null �I和 null 值。它也比 HashMap 慢,因�樗�是同步的。
第六, Collection Collections 的�^�e。
Collections
是�� java.util 下的�,它包含有各�N有�P集合操作的�o�B方法。
Collection
是�� java.util 下的介面,它是各�N集合�Y��的父介面。
第七,什�N�r候用 assert �嘌允且��包含布林�\算式的�Z句,在�绦羞@���Z句�r假定��\算式�� true 。如果�\算式�算�� false ,那�N系�y���蟾嬉�� AssertionError 。它用於�{�目的:
assert(a > 0); // throws an AssertionError if a <= 0
�嘌钥梢杂�煞N形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1
����是�a生一��布林值。
Expression2
可以是得出一��值的任意�\算式。�@��值用於生成�@示更多�{��Y�的 String 消息。 �嘌栽谀��J情�r下是禁用的。要在��g�r�⒂�嘌裕�需要使用 source 1.4 �擞�:
javac -source 1.4 Test.java
要在�\行�r�⒂�嘌裕�可使用 -enableassertions 或者 -ea �擞�。 要在�\行�r�x�窠�用�嘌裕�可使用 -da 或者 -disableassertions �擞�。 要系�y�中�⒂�嘌裕�可使用 -esa 或者 -dsa �擞�。�可以在包的基�A上�⒂没蛘呓�用�嘌浴� 可 以在�A�正常情�r下不��到�_的任何位置上放置�嘌浴�嘌钥梢杂渺厄��C�鬟f�o私有方法的��怠2贿^,�嘌圆���用於��C�鬟f�o公有方法的��担�因�椴还苁欠� �⒂昧�嘌裕�公有方法都必��z查其��怠2贿^,既可以在公有方法中,也可以在非公有方法中利用�嘌�y�後置�l件。另外,�嘌圆���以任何方式改�程式的�� �B。
第八, GC 是什�N ? �槭颤N要有 GC? ( 基�A )
GC
是垃圾收集器。 Java 程式��不用��心����w管理,因�槔�圾收集器��自�舆M行管理。要�求垃圾收集,可以�{用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
第九, String s = new String("xyz"); ��建了��� String Object? ���物件,一��是 “xyx”, 一��是指向 “xyx” 的引用物件 s
第十, Math.round(11.5) 等於多少 ? Math.round(-11.5) 等於多少 ?
Math.round(11.5)
返回( long 12 Math.round(-11.5) 返回( long -11;
第十一, short s1 = 1; s1 = s1 + 1; 有什�N�e ? short s1 = 1; s1 += 1; 有什�N�e ?
short s1 = 1; s1 = s1 + 1;
有�e, s1 short 型, s1+1 int , 不能�@式�D化�� short 型。可修改�� s1 =(short)(s1 + 1) short s1 = 1; s1 += 1 正�_。
第十二, sleep() wait() 有什�N�^�e ? 搞�程的最��
sleep()
方法是使�程停止一段�r�g的方法。在 sleep �r�g�g隔期�M後,�程不一定立即恢��绦小_@是因�樵谀���r刻,其他�程可能正在�\行而且�]有被�{度�榉���绦校�除非 (a)“ 醒�� 的�程具有更高的��先�序
(b)
正在�\行的�程因�槠渌�原因而阻塞。
wait()
是�程交互�r,如果�程�σ��同步物件 x �l出一�� wait() �{用,��程���和�绦校�被�{物件�M入等待��B,直到被�拘鸦虻却��r�g到。
第十三, Java 有�]有 goto?
Goto-java
中的保留字,�F在�]有在 java 中使用。
第十四,�列有�]有 length() �@��方法 ? String 有�]有 length() �@��方法? �列�]有 length() �@��方法,有 length 的�傩浴�
String
有有 length() �@��方法。
第十五, Overload Override 的�^�e。 Overloaded 的方法是否可以改�返回值的�型 ? 方法的重�� Overriding 和重�d Overloading Java 多�B性的不同表�F。重�� Overriding 是父��c子�之�g多�B性的一�N表�F,重�d Overloading 是一���中多�B性的一�N表�F。如果在子�中定�x某方法�c其父�有相同的名�Q和��担�我���f�方法被重�� (Overriding) 。子�的物件使用�@��方法�r,�⒄{用子�中的定�x,�λ�而言,父�中的定�x如同被 遮罩 了。如果在一���中定�x了多��同名的方法,它��或有不同的�����祷蛴胁煌�的��殿�型,�t�Q�榉椒ǖ闹剌d (Overloading) Overloaded 的方法是可以改�返回值的�型。
第十六, Set �Y的元素是不能重�}的,那�N用什�N方法��^分重�}�c否呢 ? 是用 == �是 equals()? 它��有何�^�e ?
Set
�Y的元素是不能重�}的,那�N用 iterator() 方法��^分重�}�c否。 equals() 是判�x��� Set 是否相等。
equals()
== 方法�Q定引用值是否指向同一物件 equals() 在�中被覆�w,�榈氖钱����分�x的物件的�热莺皖�型相配的�,返回真值。
第十七,�o我一��你最常�到的 runtime exception
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,
ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
第十八, error exception 有什�N�^�e ?
error
表示恢�筒皇遣豢赡艿�很困�y的情�r下的一�N�乐���}。比如�f����w溢出。不可能指望程式能�理�@�拥那�r。
exception
表示一�N�O�或���F���}。也就是�f,它表示如果程式�\行正常,�牟���l生的情�r。
第十九, List, Set, Map 是否�^承自 Collection 介面 ?
List
Set
Map 不是
第二十, abstract class interface 有什�N�^�e ? �明方法的存在而不去���F它的�被叫做抽象�( abstract class ),它用於要��建一���w�F某些基本行�榈念�,�K�樵���明方法,但不能在��中���F��的情�r。不能��建 abstract �的��例。然而可以��建一����担�其�型是一��抽象�,�K�它指向具�w子�的一����例。不能有抽象��造函�祷虺橄箪o�B方法。 Abstract �的子��樗���父�中的所有抽象方法提供���F,否�t它��也是抽象��椤H《�代之,在子�中���F�方法。知道其行�榈钠渌��可以在�中���F�@些方法。 介面( interface )是抽象�的��w。在介面中,所有方法都是抽象的。多�^承性可通�^���F�@�拥慕槊娑��@得。介面中的所有方法都是抽象的,�]有一��有程式�w。介面只可以定�x static final 成 �T��怠=槊娴���F�c子�相似,除了����F�不能�慕槊娑��x中�^承行�椤.�����F特殊介面�r,它定�x(即�⒊淌襟w�o予)所有�@�N介面的方法。然後,它可以 在���F了�介面的�的任何物件上�{用介面的方法。由於有抽象�,它允�S使用介面名作�橐�用��档念�型。通常的��B���⑸�效。引用可以�D�Q到介面�型或�� 介面�型�D�Q, instanceof �\算符可以用��Q定某物件的�是否���F了介面。
第二十一, abstract method 是否可同�r是 static, 是否可同�r是 native ,是否可同�r是 synchronized? 都不能
第二十二,介面是否可�^承介面 ? 抽象�是否可���F (implements) 介面 ? 抽象�是否可�^承���w� (concrete class)? 介面可以�^承介面。抽象�可以���F (implements) 介面,抽象�是否可�^承���w�,但前提是���w�必�有明�_的��造函�怠�
第二十三,��右���程是用 run() �是 start()? ��右���程是�{用 start() 方法,使�程所代表的��M�理�C�於可�\行��B,�@意味著它可以由 JVM �{度�K�绦小_@�K不意味著�程就��立即�\行。 run() 方法可以�a生必�退出的�苏I�硗V挂���程。
第二十四,��造器 Constructor 是否可被 override? ��造器 Constructor 不能被�^承,因此不能重�� Overriding ,但可以被重�d Overloading
第二十五,是否可以�^承 String ?
String
�是 final �故不可以�^承。
第二十六,��一���程�M入一��物件的一�� synchronized 方法後,其他�程是否可�M入此物件的其他方法 ? 不能,一��物件的一�� synchronized 方法只能由一���程�L��。
第二十七, try {} �Y有一�� return �Z句,那�N�o跟在�@�� try 後的 finally {} �Y的 code ��不��被�绦校�什�N�r候被�绦校�在 return 前�是後 ? ���绦校�在 return 前�绦小�
第二十八,�程�} : 用最有效率的方法算出 2 乘以 8 等於�� ? C 背景的程式��特�e喜�g���@�N���}。
2 << 3
第二十九,����ο笾迪嗤� (x.equals(y) == true) ,但�s可有不同的 hash code ,�@句��Σ�� ? 不�Γ�有相同的 hash code
第三十,��一��物件被��作���鬟f到一��方法後,此方法可改��@��物件的�傩裕��K可返回�化後的�Y果,那�N�@�Y到底是值�鬟f�是引用�鬟f ? 是值�鬟f。 Java �程�Z言只由值�鬟f��怠.�一��物件��例作�橐����当�鬟f到方法中�r,��档闹稻褪�υ�物件的引用。物件的�热菘梢栽诒徽{用的方法中改�,但物件的引用是永�h不��改�的。
第三十一, swtich 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String ?
switch
expr1 )中, expr1 是一��整�颠\算式。因此�鬟f�o switch case �Z句的�����是 int short char 或者 byte long,string 都不能作用於 swtich
第三十二,�程�} : ��一�� Singleton 出�怼�
Singleton
模式主要作用是保�C在 Java ��用程式中,一��� Class 只有一����例存在。 一般 Singleton 模式通常有�追N�N形式 : 第一�N形式 : 定�x一���,它的��造函��� private 的,它有一�� static private 的����担�在�初始化�r��例�,通�^一�� public getInstance 方法�@取�λ�的引用 , �^而�{用其中的方法。
public class Singleton {
   private Singleton(){}    // 在自己�炔慷��x自己一����例,是不是很奇怪?    // 注意�@是 private 只供�炔空{用    private static Singleton instance = new Singleton();    // �@�Y提供了一��供外部�L��本 class 的�o�B方法,可以直接�L��      public static Singleton getInstance() {      return instance;       }
}
第二�N形式 :
public class Singleton {
   private static Singleton instance = null;    public static synchronized Singleton getInstance() {    // �@��方法比上面有所改�M,不用每次都�M行生成物件,只是第一次         // 使用�r生成��例,提高了效率!    if (instance==null)      instance new Singleton();
return instance;
   }
}
其他形式 : 定�x一���,它的��造函��� private 的,所有方法�� static 的。 一般�J�榈谝环N形式要更加安全些 第三十三 Hashtable HashMap
Hashtable
�^承自 Dictionary �,而 HashMap Java1.2 引�M的 Map interface 的一�����F
HashMap 允�S�� null 作�橐�� entry key 或者 value ,而 Hashtable 不允�S
�有就是, HashMap Hashtable contains 方法去掉了,改成 containsvalue containsKey 。因�� contains 方法容易�人引起�`解。
最大的不同是, Hashtable 的方法是 Synchronize 的,而 HashMap 不是,在 多���程�L�� Hashtable �r,不需要自己�樗�的方法���F同步,而 HashMap 就必��橹�提供外同步。
Hashtable HashMap �裼玫� hash/rehash 演算法都大概一�樱�所以性能不��有很大的差��。

你可能感兴趣的:(java,HashMap,final,run(),sleep())