《Java常见面试题集及答案6304.doc》由会员分享,可在线阅读,更多相关《Java常见面试题集及答案6304.doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Evaluation Warning: The document was created with Spire.Doc for .NET.Java常见面试题集及答案找工作要面试,有面试就有对付面试的办法。以下一些题目来自业内朋友痛苦的面试经历,提这些问题的公司包括IBM, E*Trade, Siebel, Motorola, SUN,以及其它大小公司。面试是是没什么么道理可可讲的,它它的题目目有的不不合情理理、脱离离实际。有有在纸上上写的,有有当面考考你的,也也有在电电话里问问的,给给你IDE的估计计很少(否则你你赶快去去买彩票票,说不不定中)。所以以如果你你看完此此文后,请请不要抱抱怨说这这
2、些问题题都能用用IDE来解决决。你必必须在任任何情况况下准确确回答这这些问题题,在面面试中如如果出现现一两题题回答不不准确很很有可能能你就被被拒之门门外了。当然这这些都是是Javva的基本本题,那那些面试试的人大大多数不不会问你你Hibbernnatee有多先先进,Ecllipsse的三个个组成部部分,或或commmannd ddesiign pattterrn,他们们都是老老一辈了了,最喜喜欢问的的就是基基础知识识。别小小看了这这些基础础,我朋朋友水平平一流,结结果就栽栽在一到到基础知知识的问问题下,和和高薪无无缘。好了废废话少说说,开始始正题。问:第一,谈谈谈finnal, fiinall
3、ly, fiinallizee的区别别。最常被被问到。第二,Anoonymmouss Innnerr Cllasss (匿名内内部类)是否可可以exttendds(继承)其它类类,是否否可以impplemmentts(实现)innterrfacce(接口)?第三,Staaticc Neesteed CClasss和Innner Claass的不同同,说得得越多越越好(面试题题有的很很笼统)。第四,&和&的区别别。这个问问得很少少。第五,HasshMaap和Hasshtaablee的区别别。常问。第六,Colllecctioon和Colllecctioons的区别别。你千万万别说一一个是单单数一
4、个个是复数数。第七,什什么时候候用asssertt。APII级的技技术人员员有可能能会问这这个。第八,GC是什么?为什么么要有GC? 基础。 第第九,Strringg s = nnew Strringg(xxyz);创建了了几个Strringg Obbjecct? 第第十,Matth.rrounnd(111.55)等於多多少? MMathh.rooundd(-111.55)等於多多少? 第第十一,shoort s1 = 11; ss1 = s11 + 1;有什么么错? sshorrt ss1 = 1; s11 += 1;有什么么错?面试题题都是很很变态的的,要做做好受虐虐的准备备。第十二二,s
5、leeep()和waiit()有什么么区别?搞线程程的最爱爱。第十三三,Javva有没有gotto?很十三三的问题题,如果果哪个面面试的问问到这个个问题,我我劝你还还是别进进这家公公司。第十四四,数组组有没有有lenngthh()这个方方法? SStriing有没有lenngthh()这个方方法? 第十五五,Oveerlooad和Oveerriide的区别别。Oveerlooadeed的方法法是否可可以改变变返回值值的类型型?常问。第十六六,Set里的元元素是不不能重复复的,那那么用什什么方法法来区分分重复与与否呢?是用=还是equualss()?它们有有何区别别? 第十七七,给我我一个你你最
6、常见见到的runntimme eexceeptiion。如果你你这个答答不出来来,面试试的人会会认为你你没有实实际编程程经验。第十八八,errror和exccepttionn有什么么区别? 第十九九,Lisst, Sett, MMap是否继继承自Colllecctioon接口? 第二十十,absstraact claass和intterffacee有什么么区别?常问。第二十十一,absstraact的metthodd是否可可同时是是staaticc,是否可可同时是是nattivee,是否否可同时时是synnchrroniizedd? 第二十十二,接接口是否否可继承承接口?抽象类类是否可可实现(
7、immpleemennts)接口?抽象类类是否可可继承实实体类(conncreete claass)? 第二十十三,启启动一个个线程是是用runn()还是staart()?第二十十四,构构造器Connstrructtor是否可可被oveerriide? 第二十十五,是是否可以以继承Strringg类? 第二十十六,当当一个线线程进入入一个对对象的一一个synnchrroniizedd方法后后,其它它线程是是否可进进入此对对象的其其它方法法? 第二十十七,tryy 里有一一个retturnn语句,那那么紧跟跟在这个个try后的finnallly 里的codde会不会会被执行行,什么么时候被被执行
8、,在return前还是后? 第二十十八,编编程题:用最有有效率的的方法算算出2乘以8等於几?有C背景的的程序员员特别喜喜欢问这这种问题题。第二十十九,两两个对象象值相同同(x.equualss(y) = trrue),但却却可有不不同的hassh ccodee,这句句话对不不对? 第三十十,当一一个对象象被当作作参数传传递到一一个方法法后,此此方法可可改变这这个对象象的属性性,并可可返回变变化后的的结果,那那么这里里到底是是值传递递还是引引用传递递? 第三十十一,swttichh是否能能作用在在bytte上,是是否能作作用在lonng上,是是否能作作用在Strringg上? 第三十十二,编编程
9、题:写一个Sinngleetonn出来。 好先先说这么么一些。答:第第一,谈谈谈finnal, fiinallly, fiinallizee的区别别。finnal修饰符符(关键键字)如如果一个个类被声声明为finnal,意味味着它不不能再派派生出新新的子类类,不能能作为父父类被继继承。因因此一个个类不能能既被声声明为absstraact的,又又被声明明为finnal的。将将变量或或方法声声明为finnal,可以以保证它它们在使使用中不不被改变变。被声声明为finnal的变量量必须在在声明时时给定初初值,而而在以后后的引用用中只能能读取,不不可修改改。被声声明为finnal的方法法也同样样只能使
10、使用,不不能重载载。finallly再异常常处理时时提供finnallly块来执执行任何何清除操操作。如如果抛出出一个异异常,那那么相匹匹配的cattch子句就就会执行行,然后后控制就就会进入入finnallly块(如如果有的的话)。finnaliize方法名名。Javva技术允允许使用用finnaliize()方法在在垃圾收收集器将将对象从从内存中中清除出出去之前前做必要要的清理理工作。这这个方法法是由垃垃圾收集集器在确确定这个个对象没没有被引引用时对对这个对对象调用用的。它它是在Objjectt类中定定义的,因因此所有有的类都都继承了了它。子子类覆盖盖finnaliize()方法以以整理系
11、系统资源源或者执执行其他他清理工工作。finnaliize()方法是是在垃圾圾收集器器删除对对象之前前对这个个对象调调用的。第二,Anoonymmouss Innnerr Cllasss (匿名内内部类)是否可可以exttendds(继承)其它类类,是否否可以impplemmentts(实现)innterrfacce(接口)? 匿名的的内部类类是没有有名字的的内部类类。不能能exttendds(继承)其它类类,但一一个内部部类可以以作为一一个接口口,由另另一个内内部类实实现。第三,Staaticc Neesteed CClasss和Innner Claass的不同同,说得得越多越越好(面试题题
12、有的很很笼统)。Nesstedd Cllasss(一般般是C+的说法法),Innner Claass (一般是JAVVA的说法)。Javva内部类类与C+嵌套类类最大的的不同就就在于是是否有指指向外部部的引用用上。具具体可见见htttp: /xxfroontffreee.neet/aartiiclees/sservvicees/vvieww.assp?iid=7704&pagge=11 注:静静态内部部类(Innner Claass)意味味着1创建一一个staaticc内部类类的对象象,不需需要一个个外部类类对象,2不能从从一个staaticc内部类类的一个个对象访访问一个个外部类类对象第第四
13、,&和&的区别别。&是位位运算符符。&是布尔尔逻辑运运算符。第五,HasshMaap和Hasshtaablee的区别别。都属于于Map接口的的类,实实现了将将惟一键键映射到到特定的的值上。HasshMaap类没有有分类或或者排序序。它允允许一个个nulll键和多多个nulll值。Hasshtaablee类似于HasshMaap,但是是不允许许nulll键和nulll值。它它也比HasshMaap慢,因因为它是是同步的的。第六,Colllecctioon和Colllecctioons的区别别。Colllecctioons是个javva.uutill下的类类,它包包含有各各种有关关集合操操作的静静
14、态方法法。Colllecctioon是个javva.uutill下的接接口,它它是各种种集合结结构的父父接口。第七,什什么时候候用asssertt。断言是一个个包含布布尔表达达式的语语句,在在执行这这个语句句时假定定该表达达式为truue。如果果表达式式计算为为fallse,那么么系统会会报告一一个Assserttionnerrror。它用用于调试试目的:asssertt(a 00); / thrrowss ann Assserrtioonerrrorr iff a = 0 断言可可以有两两种形式式:asssertt Exxpreessiion11 ; asssertt Exxpreessii
15、on11 : Exppresssioon2 ; Exppresssioon1应该总总是产生生一个布布尔值。Exppresssioon2可以是是得出一一个值的的任意表表达式。这这个值用用于生成成显示更更多调试试信息的的Strringg消息。断言在在默认情情况下是是禁用的的。要在在编译时时启用断断言,需需要使用用souurcee 1.4标记:javvac -soourcce 11.4 Tesst.jjavaa 要在运运行时启启用断言言,可使使用-ennablleassserrtioons或者-ea标记。要在运运行时选选择禁用用断言,可可使用-da或者-diisabbleaasseertiionss
16、标记。要系统统类中启启用断言言,可使使用-essa或者-dssa标记。还还可以在在包的基基础上启启用或者者禁用断断言。可以在在预计正正常情况况下不会会到达的的任何位位置上放放置断言言。断言言可以用用于验证证传递给给私有方方法的参参数。不不过,断断言不应应该用于于验证传传递给公公有方法法的参数数,因为为不管是是否启用用了断言言,公有有方法都都必须检检查其参参数。不不过,既既可以在在公有方方法中,也也可以在在非公有有方法中中利用断断言测试试后置条条件。另另外,断断言不应应该以任任何方式式改变程程序的状状态。第八,GC是什么?为什么么要有GC? (基础)。GC是是垃圾收收集器。Javva程序员员不用
17、担担心内存存管理,因因为垃圾圾收集器器会自动动进行管管理。要要请求垃垃圾收集集,可以以调用下下面的方方法之一一:Sysstemm.gcc() Runntimme.ggetRRunttimee().gc() 第九,Strringg s = nnew Strringg(xxyz);创建了了几个Strringg Obbjecct? 两个对对象,一一个是xyyx,一个是是指向xyyx的引用用对象s。 第十,Maath.rouund(11.5)等於多多少? MMathh.rooundd(-111.55)等於多多少? Matth.rrounnd(111.55)返回(lonng)12,Matth.rroun
18、nd(-11.5)返回(lonng)-111; 第十一,sshorrt ss1 = 1; s11 = s1 + 11;有什么么错? sshorrt ss1 = 1; s11 += 1;有什么么错? shortt s11 = 1; s1 = ss1 + 1;有错,s1是shoort型,s1+1是int型,不能显显式转化化为shoort型。可可修改为为s1 =(sshorrt)(s1 + 11) 。shoort s1 = 11; ss1 += 11正确。 第十二,ssleeep() 和 waait() 有什么么区别? 搞线程程的最爱爱sleeep()方法是是使线程程停止一一段时间间的方法法。在sl
19、eeep 时间间间隔期满满后,线线程不一一定立即即恢复执执行。这这是因为为在那个个时刻,其其它线程程可能正正在运行行而且没没有被调调度为放放弃执行行,除非非(a)醒来的线程程具有更更高的优优先级 (bb)正在运运行的线线程因为为其它原原因而阻阻塞。waiit()是线程程交互时时,如果果线程对对一个同同步对象象x 发出一一个waiit()调用,该该线程会会暂停执执行,被被调对象象进入等等待状态态,直到到被唤醒醒或等待待时间到到。 第十三,JJavaa有没有gotto? Gottojavva中的保保留字,现现在没有有在javva中使用用。 第十四,数数组有没没有lenngthh()这个方方法? S
20、Striing有没有lenngthh()这个方方法?数组没没有lenngthh()这个方方法,有有lenngthh的属性性。Strringg有有lenngthh()这个方方法。 第十五,OOverrloaad和Oveerriide的区别别。Oveerlooadeed的方法法是否可可以改变变返回值值的类型型? 方法的的重写Oveerriidinng和重载Oveerlooadiing是Javva多态性性的不同同表现。重重写Oveerriidinng是父类类与子类类之间多多态性的的一种表表现,重重载Oveerlooadiing是一个个类中多多态性的的一种表表现。如如果在子子类中定定义某方方法与其其父
21、类有有相同的的名称和和参数,我我们说该该方法被被重写 (OOverrriddingg)。子类类的对象象使用这这个方法法时,将将调用子子类中的的定义,对对它而言言,父类类中的定定义如同同被屏蔽了。如如果在一一个类中中定义了了多个同同名的方方法,它它们或有有不同的的参数个个数或有有不同的的参数类类型,则则称为方方法的重重载(Ovverlloaddingg)。Oveerlooadeed的方法法是可以以改变返返回值的的类型。 第十六,SSet里的元元素是不不能重复复的,那那么用什什么方法法来区分分重复与与否呢? 是用=还是equualss()? 它们有有何区别别? Sett里的元元素是不不能重复复的,
22、那那么用iteerattor()方法来来区分重重复与否否。equualss()是判读读两个Set是否相相等。equualss()和=方法决决定引用用值是否否指向同同一对象象equualss()在类中中被覆盖盖,为的的是当两两个分离离的对象象的内容容和类型型相配的的话,返返回真值值。 第十七,给给我一个个你最常常见到的的runntimme eexceeptiion。 CODE: Coppy tto cclippboaard _ArithhmetticEExceeptiion, ArrrayyStooreEExceeptiion, BuuffeerOvverfflowwExccepttionn,
23、BBuffferUUndeerfllowEExceeptiion, CaannootReedoEExceeptiion, CaannootUnndoEExceeptiion, CllasssCasstExxcepptioon, CMMMExccepttionn, CConccurrrenttModdifiicattionnExccepttionn, DDOMEExceeptiion, EmmptyyStaackEExceeptiion, IllleggalAArguumenntExxcepptioon, IlllegaalMoonittorSStatteExxcepptioon, Illleg
24、aalPaathSStatteExxcepptioon, IlllegaalSttateeExccepttionn, ImagiingOOpExxcepptioon, InddexOOutOOfBoounddsExxcepptioon, MisssinngReesouurceeExccepttionn, NNegaativveArrrayySizzeExxcepptioon, NoSSuchhEleemenntExxcepptioon, NulllPoointterEExceeptiion, PrrofiileDDataaExccepttionn, PProvvideerExxcepptioo
25、n, RassterrFORRMattExccepttionn, SSecuurittyExxcepptioon, SysstemmExccepttionn, UUndeeclaareddThrrowaableeExccepttionn, UUnmoodiffiabbleSSetEExceeptiion, UnnsuppporrteddOpeerattionnExccepttionn 第十八,eerroor和exccepttionn有什么么区别? errror 表示恢恢复不是是不可能能但很困困难的情情况下的的一种严严重问题题。比如如说内存存溢出。不不可能指指望程序序能处理理这样的的情况。exc
26、cepttionn 表示一一种设计计或实现现问题。也也就是说说,它表表示如果果程序运运行正常常,从不不会发生生的情况况。 第十九,LListt, SSet, Maap是否继继承自Colllecctioon接口? List,Set是 Map不是是 第二十,aabsttracct cclasss和intterffacee有什么么区别? 声明方方法的存存在而不不去实现现它的类类被叫做做抽象类类(absstraact claass),它它用于要要创建一一个体现现某些基基本行为为的类,并并为该类类声明方方法,但但不能在在该类中中实现该该类的情情况。不不能创建建absstraact 类的实实例。然然而可以
27、以创建一一个变量量,其类类型是一一个抽象象类,并并让它指指向具体体子类的的一个实实例。不不能有抽抽象构造造函数或或抽象静静态方法法。Absstraact 类的子子类为它它们父类类中的所所有抽象象方法提提供实现现,否则则它们也也是抽象象类为。取取而代之之,在子子类中实实现该方方法。知知道其行行为的其其它类可可以在类类中实现现这些方方法。接口(intterffacee)是抽抽象类的的变体。在在接口中中,所有有方法都都是抽象象的。多多继承性性可通过过实现这这样的接接口而获获得。接接口中的的所有方方法都是是抽象的的,没有有一个有有程序体体。接口口只可以以定义staaticc fiinall成员变变量。
28、接接口的实实现与子子类相似似,除了了该实现现类不能能从接口口定义中中继承行行为。当当类实现现特殊接接口时,它它定义(即即将程序序体给予予)所有有这种接接口的方方法。然然后,它它可以在在实现了了该接口口的类的的任何对对象上调调用接口口的方法法。由于于有抽象象类,它它允许使使用接口口名作为为引用变变量的类类型。通通常的动动态联编编将生效效。引用用可以转转换到接接口类型型或从接接口类型型转换,insstannceoof 运算符符可以用用来决定定某对象象的类是是否实现现了接口口。 第二十十一,absstraact的metthodd是否可可同时是是staaticc,是否可可同时是是nattivee,是否
29、否可同时时是synnchrroniizedd? 都不能 第二十二,接接口是否否可继承承接口? 抽象类类是否可可实现(immpleemennts)接口? 抽象类类是否可可继承实实体类(conncreete claass)? 接口可可以继承承接口。抽抽象类可可以实现现(immpleemennts)接口,抽抽象类是是否可继继承实体体类,但但前提是是实体类类必须有有明确的的构造函函数。 第二十三,启启动一个个线程是是用runn()还是staart()? 启动一一个线程程是调用用staart()方法,使使线程所所代表的的虚拟处处理机处处于可运运行状态态,这意意味着它它可以由由JVM调度并并执行。这这并不
30、意意味着线线程就会会立即运运行。runn()方法可可以产生生必须退退出的标标志来停停止一个个线程。 第二十四,构构造器Connstrructtor是否可可被oveerriide? 构造器器Connstrructtor不能被被继承,因因此不能能重写Oveerriidinng,但可可以被重重载Oveerlooadiing。 第二十五,是是否可以以继承Strringg类? Strringg类是finnal类故不不可以继继承。 第二十六,当当一个线线程进入入一个对对象的一一个synnchrroniizedd方法后后,其它它线程是是否可进进入此对对象的其其它方法法? 不能,一一个对象象的一个个synnc
31、hrroniizedd方法只只能由一一个线程程访问。 第二十七,tryy 里有一一个retturnn语句,那那么紧跟跟在这个个try后的finnallly 里的codde会不会会被执行行,什么么时候被被执行,在return前还是后? 会执行行,在retturnn前执行行。 第二十八,编编程题: 用最有有效率的的方法算算出2乘以8等於几? 有C背背景的程程序员特特别喜欢欢问这种种问题。 2 33 第二十九,两两个对象象值相同同(x.equualss(y) = trrue),但却却可有不不同的hassh ccodee,这句句话对不不对? 不对,有有相同的的hassh ccodee。 第三十,当当一
32、个对对象被当当作参数数传递到到一个方方法后,此此方法可可改变这这个对象象的属性性,并可可返回变变化后的的结果,那那么这里里到底是是值传递递还是引引用传递递? 是值传递。Javva 编程语语言只由由值传递递参数。当当一个对对象实例例作为一一个参数数被传递递到方法法中时,参参数的值值就是对对该对象象的引用用。对象象的内容容可以在在被调用用的方法法中改变变,但对对象的引引用是永永远不会会改变的的。 第三十一,swttichh是否能能作用在在bytte上,是是否能作作用在lonng上,是是否能作作用在Strringg上?swiitchh(exppr1)中,exppr1是一个个整数表表达式。因因此传递递
33、给 swwitcch 和 caase 语句的的参数应应该是 innt、 shhortt、 chhar 或者 byyte。lonng,sstriing 都不能能作用于于swttichh。 第三十二,编编程题: 写一个Sinngleetonn出来。Sinngleetonn模式主主要作用用是保证证在Javva应用程程序中,一一个类Claass只有一一个实例例存在。一般SSinggletton模式通通常有几几种种形形式:第一种种形式:定义一一个类,它它的构造造函数为为priivatte的,它它有一个个staaticc的priivatte的该类类变量,在在类初始始化时实实例话,通通过一个个pubblic
34、c的gettInsstannce方法获获取对它它的引用用,继而调调用其中中的方法法。 CODE: Coppy tto cclippboaard _publiic cclasss SSinggletton priivatte SSinggletton() /在在自己内内部定义义自己一一个实例例,是不不是很奇奇怪? /注注意这是是priivatte 只供内内部调用用 priivatte sstattic Sinngleetonn innstaancee = neww Siinglletoon(); /这这里提供供了一个个供外部部访问本本claass的静态态方法,可可以直接接访问 pubblicc
35、sttatiic SSinggletton gettInsstannce() rretuurn insstannce; 第二种种形式: CODE: Coppy tto cclippboaard _publiic cclasss SSinggletton priivatte sstattic Sinngleetonn innstaancee = nulll; pubblicc sttatiic ssyncchroonizzed Sinngleetonn geetInnstaancee() /这这个方法法比上面面有所改改进,不不用每次次都进行行生成对对象,只只是第一一次 /使使用时生生成实例例,提
36、高高了效率率! if (innstaancee=nnulll) iinsttancceneww Siinglletoon(); returrn iinsttancce; 其他形式:定义一个类类,它的的构造函函数为priivatte的,所所有方法法为staaticc的。一般认认为第一一种形式式要更加加安全些些 Hasshtaablee和HasshMaap Hasshtaablee继承自Dicctioonarry类,而HasshMaap是Javva1.2引进的Mapp innterrfacce的一个个实现 HasshMaap允许将nulll作为一一个enttry的key或者vallue,而Hasshtaablee不允许 还有就就是,HasshMaap把Hasshtaablee的conntaiins方法去去掉了,改改成conntaiinsvvaluue和conntaiinsKKey。因为conntaiins方法容容易让人人引起误误解。 最大的的不同是是,Hasshtaablee的方法法是Synnchrroniize的,而HasshMaap不是,在在 多个线程访访问Hasshtaablee时,不不需要自自己为它它的方法法实现同同步,而而HasshMaap 就必须为之之提供外外同步。dddddddddddddddddddddddddddddddddddddd