115个Java面试题和答案-终极列表.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《115个Java面试题和答案-终极列表.docx》由会员分享,可在线阅读,更多相关《115个Java面试题和答案-终极列表.docx(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、目录面向对象象编程(OOOP)常见的JJavaa问题Javaa线程Javaa集合类类垃圾收集集器异常处理理Javaa小应用用程序(Appplett)SwinngJDBCC远程方法法调用(RRMI)ServvlettJSP面向对象象编程(OOOP)Javaa是一个个支持并并发、基基于类和和面向对对象的计计算机编编程语言言。下面面列出了了面向对对象软件件开发的的优点: 代码开发发模块化化,更易易维护和和修改。 代码复用用。 增强代码码的可靠靠性和灵灵活性。 增加代码码的可理理解性。面向对象象编程有有很多重重要的特特性,比比如:封封装,继继承,多多态和抽抽象。下下面的章章节我们们会逐个个分析这这些特
2、性性。封装封装给对对象提供供了隐藏藏内部特特性和行行为的能能力。对对象提供供一些能能被其他他对象访访问的方方法来改改变它内内部的数数据。在在Javva当中中,有33种修饰饰符:ppubllic,pprivvatee和prroteecteed。每每一种修修饰符给给其他的的位于同同一个包包或者不不同包下下面对象象赋予了了不同的的访问权权限。下面列出出了使用用封装的的一些好好处: 通过隐藏藏对象的的属性来来保护对对象内部部的状态态。 提高了代代码的可可用性和和可维护护性,因因为对象象的行为为可以被被单独的的改变或或者是扩扩展。 禁止对象象之间的的不良交交互提高高模块化化。参考这个个文档获获取更多多关
3、于封封装的细细节和示示例。多态多态是编编程语言言给不同同的底层层数据类类型做相相同的接接口展示示的一种种能力。一个多多态类型型上的操操作可以以应用到到其他类类型的值值上面。继承继承给对对象提供供了从基基类获取取字段和和方法的的能力。继承提提供了代代码的重重用行,也也可以在在不修改改类的情情况下给给现存的的类添加加新特性性。抽象抽象是把把想法从从具体的的实例中中分离出出来的步步骤,因因此,要要根据他他们的功功能而不不是实现现细节来来创建类类。Jaava支支持创建建只暴漏漏接口而而不包含含方法实实现的抽抽象的类类。这种种抽象技技术的主主要目的的是把类类的行为为和实现现细节分分离开。抽象和封封装的不
4、不同点抽象和封封装是互互补的概概念。一一方面,抽抽象关注注对象的的行为。另一方方面,封封装关注注对象行行为的细细节。一一般是通通过隐藏藏对象内内部状态态信息做做到封装装,因此此,封装装可以看看成是用用来提供供抽象的的一种策策略。常见的JJavaa问题1.什么么是Jaava虚虚拟机?为什么么Javva被称称作是“平平台无关关的编程程语言”?Javaa虚拟机机是一个个可以执执行Jaava字字节码的的虚拟机机进程。Javva源文文件被编编译成能能被Jaava虚虚拟机执执行的字字节码文文件。Javaa被设计计成允许许应用程程序可以以运行在在任意的的平台,而而不需要要程序员员为每一一个平台台单独重重写或
5、者者是重新新编译。Javva虚拟拟机让这这个变为为可能,因因为它知知道底层层硬件平平台的指指令长度度和其他他特性。2.JDDK和JJRE的的区别是是什么?Javaa运行时时环境(JREE)是将将要执行行Javva程序序的Jaava虚虚拟机。它同时时也包含含了执行行appplett需要的的浏览器器插件。Javva开发发工具包包(JDDK)是是完整的的Javva软件件开发包包,包含含了JRRE,编编译器和和其他的的工具(比如:JavvaDooc,JJavaa调试器器),可可以让开开发者开开发、编编译、执执行Jaava应应用程序序。3.”sstattic”关关键字是是什么意意思?JJavaa中是否否
6、可以覆覆盖(ooverrridde)一一个prrivaate或或者是sstattic的的方法?“staaticc”关键键字表明明一个成成员变量量或者是是成员方方法可以以在没有有所属的的类的实实例变量量的情况况下被访访问。JJavaa中sttatiic方法法不能被被覆盖,因因为方法法覆盖是是基于运运行时动动态绑定定的,而而staaticc方法是是编译时时静态绑绑定的。staaticc方法跟跟类的任任何实例例都不相相关,所所以概念念上不适适用。4.是否否可以在在staaticc环境中中访问非非staaticc变量?stattic变变量在JJavaa中是属属于类的的,它在在所有的的实例中中的值是是一
7、样的的。当类类被Jaava虚虚拟机载载入的时时候,会会对sttatiic变量量进行初初始化。如果你你的代码码尝试不不用实例例来访问问非sttatiic的变变量,编编译器会会报错,因因为这些些变量还还没有被被创建出出来,还还没有跟跟任何实实例关联联上。5.Jaava支支持的数数据类型型有哪些些?什么么是自动动拆装箱箱?Javaa语言支支持的88中基本本数据类类型是: bytee shorrt int longg floaat doubble boolleann charr自动装箱箱是Jaava编编译器在在基本数数据类型型和对应应的对象象包装类类型之间间做的一一个转化化。比如如:把iint转转化成
8、IInteegerr,dooublle转化化成dooublle,等等等。反反之就是是自动拆拆箱。6.Jaava中中的方法法覆盖(Oveerriidinng)和和方法重重载(OOverrloaadinng)是是什么意意思?Javaa中的方方法重载载发生在在同一个个类里面面两个或或者是多多个方法法的方法法名相同同但是参参数不同同的情况况。与此此相对,方方法覆盖盖是说子子类重新新定义了了父类的的方法。方法覆覆盖必须须有相同同的方法法名,参参数列表表和返回回类型。覆盖者者可能不不会限制制它所覆覆盖的方方法的访访问。7.Jaava中中,什么么是构造造函数?什么是是构造函函数重载载?什么么是复制制构造函函
9、数?当新对象象被创建建的时候候,构造造函数会会被调用用。每一一个类都都有构造造函数。在程序序员没有有给类提提供构造造函数的的情况下下,Jaava编编译器会会为这个个类创建建一个默默认的构构造函数数。Javaa中构造造函数重重载和方方法重载载很相似似。可以以为一个个类创建建多个构构造函数数。每一一个构造造函数必必须有它它自己唯唯一的参参数列表表。Javaa不支持持像C+中那那样的复复制构造造函数,这这个不同同点是因因为如果果你不自自己写构构造函数数的情况况下,JJavaa不会创创建默认认的复制制构造函函数。8.Jaava支支持多继继承么?不支持,JJavaa不支持持多继承承。每个个类都只只能继承
10、承一个类类,但是是可以实实现多个个接口。9.接口口和抽象象类的区区别是什什么?Javaa提供和和支持创创建抽象象类和接接口。它它们的实实现有共共同点,不不同点在在于: 接口中所所有的方方法隐含含的都是是抽象的的。而抽抽象类则则可以同同时包含含抽象和和非抽象象的方法法。 类可以实实现很多多个接口口,但是是只能继继承一个个抽象类类 类如果要要实现一一个接口口,它必必须要实实现接口口声明的的所有方方法。但但是,类类可以不不实现抽抽象类声声明的所所有方法法,当然然,在这这种情况况下,类类也必须须得声明明成是抽抽象的。 抽象类可可以在不不提供接接口方法法实现的的情况下下实现接接口。 Javaa接口中中声
11、明的的变量默默认都是是finnal的的。抽象象类可以以包含非非finnal的的变量。 Javaa接口中中的成员员函数默默认是ppubllic的的。抽象象类的成成员函数数可以是是priivatte,pprottectted或或者是ppubllic。 接口是绝绝对抽象象的,不不可以被被实例化化。抽象象类也不不可以被被实例化化,但是是,如果果它包含含maiin方法法的话是是可以被被调用的的。也可以参参考JDDK8中中抽象类类和接口口的区别别10.什什么是值值传递和和引用传传递?对象被值值传递,意意味着传传递了对对象的一一个副本本。因此此,就算算是改变变了对象象副本,也也不会影影响源对对象的值值。对象
12、被引引用传递递,意味味着传递递的并不不是实际际的对象象,而是是对象的的引用。因此,外外部对引引用对象象所做的的改变会会反映到到所有的的对象上上。Javaa线程11.进进程和线线程的区区别是什什么?进程是执执行着的的应用程程序,而而线程是是进程内内部的一一个执行行序列。一个进进程可以以有多个个线程。线程又又叫做轻轻量级进进程。12.创创建线程程有几种种不同的的方式?你喜欢欢哪一种种?为什什么?有三种方方式可以以用来创创建线程程: 继承Thhreaad类 实现Ruunnaablee接口 应用程序序可以使使用Exxecuutorr框架来来创建线线程池实现Ruunnaablee接口这这种方式式更受欢欢
13、迎,因因为这不不需要继继承Thhreaad类。在应用用设计中中已经继继承了别别的对象象的情况况下,这这需要多多继承(而而Javva不支支持多继继承),只只能实现现接口。同时,线线程池也也是非常常高效的的,很容容易实现现和使用用。13.概概括的解解释下线线程的几几种可用用状态。线程在执执行过程程中,可可以处于于下面几几种状态态: 就绪(RRunnnablle):线程准准备运行行,不一一定立马马就能开开始执行行。 运行中(Runnninng):进程正正在执行行线程的的代码。 等待中(Waiitinng):线程处处于阻塞塞的状态态,等待待外部的的处理结结束。 睡眠中(Sleeepiing):线程程被
14、强制制睡眠。 I/O阻阻塞(BBlocckedd onn I/O):等待II/O操操作完成成。 同步阻塞塞(Bllockked on Synnchrroniizattionn):等等待获取取锁。 死亡(DDeadd):线线程完成成了执行行。14.同同步方法法和同步步代码块块的区别别是什么么?在Javva语言言中,每每一个对对象有一一把锁。线程可可以使用用synnchrroniizedd关键字字来获取取对象上上的锁。synnchrroniizedd关键字字可应用用在方法法级别(粗粒度度锁)或或者是代代码块级级别(细细粒度锁锁)。15.在在监视器器(Moonittor)内部,是是如何做做线程同同步
15、的?程序应应该做哪哪种级别别的同步步?监视器和和锁在JJavaa虚拟机机中是一一块使用用的。监监视器监监视一块块同步代代码块,确确保一次次只有一一个线程程执行同同步代码码块。每每一个监监视器都都和一个个对象引引用相关关联。线线程在获获取锁之之前不允允许执行行同步代代码。16.什什么是死死锁(ddeaddlocck)?两个进程程都在等等待对方方执行完完毕才能能继续往往下执行行的时候候就发生生了死锁锁。结果果就是两两个进程程都陷入入了无限限的等待待中。17.如如何确保保N个线线程可以以访问NN个资源源同时又又不导致致死锁?使用多线线程的时时候,一一种非常常简单的的避免死死锁的方方式就是是:指定定获
16、取锁锁的顺序序,并强强制线程程按照指指定的顺顺序获取取锁。因因此,如如果所有有的线程程都是以以同样的的顺序加加锁和释释放锁,就就不会出出现死锁锁了。Javaa集合类类18.JJavaa集合类类框架的的基本接接口有哪哪些?Javaa集合类类提供了了一套设设计良好好的支持持对一组组对象进进行操作作的接口口和类。Javva集合合类里面面最基本本的接口口有: Colllecttionn:代表表一组对对象,每每一个对对象都是是它的子子元素。 Set:不包含含重复元元素的CColllecttionn。 Listt:有顺顺序的ccolllecttionn,并且且可以包包含重复复元素。 Map:可以把把键(k
17、key)映射到到值(vvaluue)的的对象,键键不能重重复。19.为为什么集集合类没没有实现现Clooneaablee和Seeriaalizzablle接口口?集合类接接口指定定了一组组叫做元元素的对对象。集集合类接接口的每每一种具具体的实实现类都都可以选选择以它它自己的的方式对对元素进进行保存存和排序序。有的的集合类类允许重重复的键键,有些些不允许许。20.什什么是迭迭代器(Iteerattor)?Iterratoor接口口提供了了很多对对集合元元素进行行迭代的的方法。每一个个集合类类都包含含了可以以返回迭迭代器实实例的迭迭代方法法。迭代代器可以以在迭代代的过程程中删除除底层集集合的元元素
18、。克隆(cclonningg)或者者是序列列化(sseriialiizattionn)的语语义和含含义是跟跟具体的的实现相相关的。因此,应应该由集集合类的的具体实实现来决决定如何何被克隆隆或者是是序列化化。21.IIterratoor和LListtIteerattor的的区别是是什么?下面列出出了他们们的区别别: Iterratoor可用用来遍历历Sett和Liist集集合,但但是LiistIIterratoor只能能用来遍遍历Liist。 Iterratoor对集集合只能能是前向向遍历,LListtIteerattor既既可以前前向也可可以后向向。 ListtIteerattor实实现了II
19、terratoor接口口,并包包含其他他的功能能,比如如:增加加元素,替替换元素素,获取取前一个个和后一一个元素素的索引引,等等等。22.快快速失败败(faail-fasst)和和安全失失败(ffaill-saafe)的区别别是什么么?Iterratoor的安安全失败败是基于于对底层层集合做做拷贝,因因此,它它不受源源集合上上修改的的影响。javva.uutill包下面面的所有有的集合合类都是是快速失失败的,而而javva.uutill.cooncuurreent包包下面的的所有的的类都是是安全失失败的。快速失失败的迭迭代器会会抛出CConccurrrenttModdifiicattionnE
20、xccepttionn异常,而而安全失失败的迭迭代器永永远不会会抛出这这样的异异常。23.JJavaa中的HHashhMapp的工作作原理是是什么?Javaa中的HHashhMapp是以键键值对(keyy-vaaluee)的形形式存储储元素的的。HaashMMap需需要一个个hassh函数数,它使使用haashCCodee()和和equualss()方方法来向向集合/从集合合添加和和检索元元素。当当调用pput()方法法的时候候,HaashMMap会会计算kkey的的hassh值,然然后把键键值对存存储在集集合中合合适的索索引上。如果kkey已已经存在在了,vvaluue会被被更新成成新值。H
21、asshMaap的一一些重要要的特性性是它的的容量(cappaciity),负载载因子(loaad ffacttor)和扩容容极限(thrreshholdd reesizzingg)。24.hhashhCodde()和eqqualls()方法的的重要性性体现在在什么地地方?Javaa中的HHashhMapp使用hhashhCodde()和eqqualls()方法来来确定键键值对的的索引,当当根据键键获取值值的时候候也会用用到这两两个方法法。如果果没有正正确的实实现这两两个方法法,两个个不同的的键可能能会有相相同的hhashh值,因因此,可可能会被被集合认认为是相相等的。而且,这这两个方方法也用
22、用来发现现重复元元素。所所以这两两个方法法的实现现对HaashMMap的的精确性性和正确确性是至至关重要要的。25.HHashhMapp和Haashttablle有什什么区别别? HashhMapp和Haashttablle都实实现了MMap接接口,因因此很多多特性非非常相似似。但是是,他们们有以下下不同点点: HashhMapp允许键键和值是是nulll,而而Hasshtaablee不允许许键或者者值是nnulll。 Hashhtabble是是同步的的,而HHashhMapp不是。因此,HHashhMapp更适合合于单线线程环境境,而HHashhtabble适适合于多多线程环环境。 Hash
23、hMapp提供了了可供应应用迭代代的键的的集合,因因此,HHashhMapp是快速速失败的的。另一一方面,HHashhtabble提提供了对对键的列列举(EEnummeraatioon)。o 一般认为为Hasshtaablee是一个个遗留的的类。26.数数组(AArraay)和和列表(ArrrayLListt)有什什么区别别?什么么时候应应该使用用Arrray而而不是AArraayLiist?下面列出出了Arrrayy和ArrrayyLisst的不不同点: Arraay可以以包含基基本类型型和对象象类型,AArraayLiist只只能包含含对象类类型。 Arraay大小小是固定定的,AArra
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 115 Java 试题 答案 终极 列表
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内