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