115个Java面试题和答案终极列表下.docx
《115个Java面试题和答案终极列表下.docx》由会员分享,可在线阅读,更多相关《115个Java面试题和答案终极列表下.docx(12页珍藏版)》请在冰豆网上搜索。
![115个Java面试题和答案终极列表下.docx](https://file1.bdocx.com/fileroot1/2022-10/26/ca277c8e-01da-4006-b800-b2259aaa55a1/ca277c8e-01da-4006-b800-b2259aaa55a11.gif)
115个Java面试题和答案终极列表下
115个Java面试题和答案——终极列表(下)
本文由 ImportNew - miracle1919 翻译自 javacodegeeks。
欢迎加入Java小组。
转载请参见文章末尾的要求。
第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servlet和JSP。
异常处理
Java小应用程序(Applet)
Swing
JDBC
远程方法调用(RMI)
Servlet
JSP
异常处理
43.Java中的两种异常类型是什么?
他们有什么区别?
Java中有两种异常:
受检查的(checked)异常和不受检查的(unchecked)异常。
不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。
相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。
这里有Java异常处理的一些小建议。
44.Java中Exception和Error有什么区别?
Exception和Error都是Throwable的子类。
Exception用于用户程序可以捕获的异常情况。
Error定义了不期望被用户程序捕获的异常。
45.throw和throws有什么区别?
throw关键字用来在程序中明确的抛出异常,相反,throws语句用来表明方法不能处理的异常。
每一个方法都必须要指定哪些异常不能处理,所以方法的调用者才能够确保处理可能发生的异常,多个异常是用逗号分隔的。
45.异常处理的时候,finally代码块的重要性是什么?
(译者注:
作者标题的序号弄错了)
无论是否抛出异常,finally代码块总是会被执行。
就算是没有catch语句同时又抛出异常的情况下,finally代码块仍然会被执行。
最后要说的是,finally代码块主要用来释放资源,比如:
I/O缓冲区,数据库连接。
46.异常处理完成以后,Exception对象会发生什么变化?
Exception对象会在下一个垃圾回收过程中被回收掉。
47.finally代码块和finalize()方法有什么区别?
无论是否抛出异常,finally代码块都会执行,它主要是用来释放应用占用的资源。
finalize()方法是Object类的一个protected方法,它是在对象被垃圾回收之前由Java虚拟机来调用的。
Java小应用程序(Applet)
48.什么是Applet?
javaapplet是能够被包含在HTML页面中并且能被启用了java的客户端浏览器执行的程序。
Applet主要用来创建动态交互的web应用程序。
49.解释一下Applet的生命周期
applet可以经历下面的状态:
Init:
每次被载入的时候都会被初始化。
Start:
开始执行applet。
Stop:
结束执行applet。
Destroy:
卸载applet之前,做最后的清理工作。
50.当applet被载入的时候会发生什么?
首先,创建applet控制类的实例,然后初始化applet,最后开始运行。
51.Applet和普通的Java应用程序有什么区别?
applet是运行在启用了java的浏览器中,Java应用程序是可以在浏览器之外运行的独立的Java程序。
但是,它们都需要有Java虚拟机。
进一步来说,Java应用程序需要一个有特定方法签名的main函数来开始执行。
Javaapplet不需要这样的函数来开始执行。
最后,Javaapplet一般会使用很严格的安全策略,Java应用一般使用比较宽松的安全策略。
52.Javaapplet有哪些限制条件?
主要是由于安全的原因,给applet施加了以下的限制:
applet不能够载入类库或者定义本地方法。
applet不能在宿主机上读写文件。
applet不能读取特定的系统属性。
applet不能发起网络连接,除非是跟宿主机。
applet不能够开启宿主机上其他任何的程序。
53.什么是不受信任的applet?
不受信任的applet是不能访问或是执行本地系统文件的Javaapplet,默认情况下,所有下载的applet都是不受信任的。
54.从网络上加载的applet和从本地文件系统加载的applet有什么区别?
当applet是从网络上加载的时候,applet是由applet类加载器载入的,它受applet安全管理器的限制。
当applet是从客户端的本地磁盘载入的时候,applet是由文件系统加载器载入的。
从文件系统载入的applet允许在客户端读文件,写文件,加载类库,并且也允许执行其他程序,但是,却通不过字节码校验。
55.applet类加载器是什么?
它会做哪些工作?
当applet是从网络上加载的时候,它是由applet类加载器载入的。
类加载器有自己的java名称空间等级结构。
类加载器会保证来自文件系统的类有唯一的名称空间,来自网络资源的类有唯一的名称空间。
当浏览器通过网络载入applet的时候,applet的类被放置于和applet的源相关联的私有的名称空间中。
然后,那些被类加载器载入进来的类都是通过了验证器验证的。
验证器会检查类文件格式是否遵守Java语言规范,确保不会出现堆栈溢出(stackoverflow)或者下溢(underflow),传递给字节码指令的参数是正确的。
56.applet安全管理器是什么?
它会做哪些工作?
applet安全管理器是给applet施加限制条件的一种机制。
浏览器可以只有一个安全管理器。
安全管理器在启动的时候被创建,之后不能被替换覆盖或者是扩展。
Swing
57.弹出式选择菜单(Choice)和列表(List)有什么区别
Choice是以一种紧凑的形式展示的,需要下拉才能看到所有的选项。
Choice中一次只能选中一个选项。
List同时可以有多个元素可见,支持选中一个或者多个元素。
58.什么是布局管理器?
布局管理器用来在容器中组织组件。
59.滚动条(Scrollbar)和滚动面板(JScrollPane)有什么区别?
Scrollbar是一个组件,不是容器。
而ScrollPane是容器。
ScrollPane自己处理滚动事件。
60.哪些Swing的方法是线程安全的?
只有3个线程安全的方法:
repaint(),revalidate(),andinvalidate()。
61.说出三种支持重绘(painting)的组件。
Canvas,Frame,Panel,和Applet支持重绘。
62.什么是裁剪(clipping)?
限制在一个给定的区域或者形状的绘图操作就做裁剪。
63.MenuItem和CheckboxMenuItem的区别是什么?
CheckboxMenuItem类继承自MenuItem类,支持菜单选项可以选中或者不选中。
64.边缘布局(BorderLayout)里面的元素是如何布局的?
BorderLayout里面的元素是按照容器的东西南北中进行布局的。
65.网格包布局(GridBagLayout)里面的元素是如何布局的?
GridBagLayout里面的元素是按照网格进行布局的。
不同大小的元素可能会占据网格的多于1行或一列。
因此,行数和列数可以有不同的大小。
66.Window和Frame有什么区别?
Frame类继承了Window类,它定义了一个可以有菜单栏的主应用窗口。
67.裁剪(clipping)和重绘(repainting)有什么联系?
当窗口被AWT重绘线程进行重绘的时候,它会把裁剪区域设置成需要重绘的窗口的区域。
68.事件监听器接口(event-listenerinterface)和事件适配器(event-adapter)有什么关系?
事件监听器接口定义了对特定的事件,事件处理器必须要实现的方法。
事件适配器给事件监听器接口提供了默认的实现。
69.GUI组件如何来处理它自己的事件?
GUI组件可以处理它自己的事件,只要它实现相对应的事件监听器接口,并且把自己作为事件监听器。
70.Java的布局管理器比传统的窗口系统有哪些优势?
Java使用布局管理器以一种一致的方式在所有的窗口平台上摆放组件。
因为布局管理器不会和组件的绝对大小和位置相绑定,所以他们能够适应跨窗口系统的特定平台的不同。
71.Java的Swing组件使用了哪种设计模式?
Java中的Swing组件使用了MVC(视图-模型-控制器)设计模式。
JDBC
72.什么是JDBC?
JDBC是允许用户在不同数据库之间做选择的一个抽象层。
JDBC允许开发者用JAVA写数据库应用程序,而不需要关心底层特定数据库的细节。
73.解释下驱动(Driver)在JDBC中的角色。
JDBC驱动提供了特定厂商对JDBCAPI接口类的实现,驱动必须要提供java.sql包下面这些类的实现:
Connection, Statement, PreparedStatement,CallableStatement, ResultSet和Driver。
74.Class.forName()方法有什么作用?
这个方法用来载入跟数据库建立连接的驱动。
75.PreparedStatement比Statement有什么优势?
PreparedStatements是预编译的,因此,性能会更好。
同时,不同的查询参数值,PreparedStatement可以重用。
76.什么时候使用CallableStatement?
用来准备CallableStatement的方法是什么?
CallableStatement用来执行存储过程。
存储过程是由数据库存储和提供的。
存储过程可以接受输入参数,也可以有返回结果。
非常鼓励使用存储过程,因为它提供了安全性和模块化。
准备一个CallableStatement的方法是:
1
CallableStament.prepareCall();
77.数据库连接池是什么意思?
像打开关闭数据库连接这种和数据库的交互可能是很费时的,尤其是当客户端数量增加的时候,会消耗大量的资源,成本是非常高的。
可以在应用服务器启动的时候建立很多个数据库连接并维护在一个池中。
连接请求由池中的连接提供。
在连接使用完毕以后,把连接归还到池中,以用于满足将来更多的请求。
远程方法调用(RMI)
78.什么是RMI?
Java远程方法调用(JavaRMI)是JavaAPI对远程过程调用(RPC)提供的面向对象的等价形式,支持直接传输序列化的Java对象和分布式垃圾回收。
远程方法调用可以看做是激活远程正在运行的对象上的方法的步骤。
RMI对调用者是位置透明的,因为调用者感觉方法是执行在本地运行的对象上的。
看下RMI的一些注意事项。
79.RMI体系结构的基本原则是什么?
RMI体系结构是基于一个非常重要的行为定义和行为实现相分离的原则。
RMI允许定义行为的代码和实现行为的代码相分离,并且运行在不同的JVM上。
80.RMI体系结构分哪几层?
RMI体系结构分以下几层:
存根和骨架层(StubandSkeletonlayer):
这一层对程序员是透明的,它主要负责拦截客户端发出的方法调用请求,然后把请求重定向给远程的RMI服务。
远程引用层(RemoteReferenceLayer):
RMI体系结构的第二层用来解析客户端对服务端远程对象的引用。
这一层解析并管理客户端对服务端远程对象的引用。
连接是点到点的。
传输层(Transportlayer):
这一层负责连接参与服务的两个JVM。
这一层是建立在网络上机器间的TCP/