《JAVA程序员笔试面试题汇总及答案.pdf》由会员分享,可在线阅读,更多相关《JAVA程序员笔试面试题汇总及答案.pdf(128页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1、面向对象的特征有哪些方面抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。(2)继承:继承是种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。(3)封装:封装是把过程和数据包围
2、起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。(4)多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。2、String是最基本的数据类型吗?基本数据类型包括 byte、int、char、long、float、double boolean 和 shortojava.lang.String类 是 final类型的,因此不可以继承这个类、不能修改这个类。为了提高效
3、率节省空间,我们应该用StringBuffer类3、int和 Integer有什么区别Jav a提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是 java的原始数据类型,Integer是 java为 int提供的封装类。Java为每个原始类型提供了封装类。原始类型封装类booleanBooleancharCharacterbyteByteshortShortintlntegerlongLongfloatFloatdoubleDouble引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数
4、据结构存储,当引用类型和原始类型用作某个类的实例数据时所旨定的缺省值。对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关。4、String 和 StringBuffer 的区别JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这 个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffero典型地,你可以使用StringBuffers来动态构造字符数据。5、运行时异常与一般异常有何异同?(1)基本概
5、念异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。(2)运行时异常与非运行时异常有什么区别参考网址:http:/ 提供了两类主要的异常:runtime exception和checked exception。checked异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理
6、可能的异常。但是另外一种异常:runtime exception,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之 一.)(3)每个类型的异常的特点1、Error 体系Error类体系描述了 Java运行系统中的内部错误以及资源耗尽的情形.应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出).假如出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的.所以,在进行程序设计时,应 该 更 关 注Exception体系.2、Exception 体
7、系Exception 体系包括 RuntimeException 体系和其他非 RuntimeException 的体系2.1 RuntimeException(程序逻辑错误)RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等.处理Runtim eException的原则是:假 如 出 现Runtim eException,那么定是程序员的错误.例如,可以通过检查数组下标和数组边界来避免数组越界访问异常工2.2 其他(lOException 等等)这 类 异 常 般 是 外 部 错 误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中
8、出现的外部错误.(4)异常的使用方法参考 网址:h t t p:w w.z h i w e i n e t.c o t n/j i a o c h e n g/2 0 0 8-0 9/1 4 5 2.h t m1、声明方法抛出异常1.1 语法:throws(略)1.2 为什么要声明方法抛出异常?方法是否抛出异常与方法返回值的类型一样重要.假设方法抛出异常确没有声明该方法将抛出异常,那么客户程序员灯以调用这个方法而且不用编写处理异常的代码.那么,旦出现异常,那么这个异常就没有合适的异常控制器来解决.1.3为什么抛出的异常一定是已检查异常?RuntimeException与E rror可以在任何代
9、码中产生,它们不需要由程序员显示的抛出,一旦出现错误,那么相应的异常会被自动抛出.而已检查异常是由程序员抛出的,这分为两种情况:客户程序员调用会抛出异常的库函数(库函数的异常由库程序员抛出);客户程序员自己使用th ro w语句抛出异常.碰到Error,程序员一般是无能为力的;碰 到Run tim eExcept ion,那么一定是程序存在逻辑错误,要对程序进行修改(相当于调试的一种方法);只有已检查异常才是程序员所关心的,程序应该且仅应该抛出或处理已检查异常.6、说出Servlet的生命周期,并说出Servlet和 CGI的区别。(1)总括:Servlet被服务器实例化后,容器运行其init
10、方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方 法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一 个 实 例 可 以 服 务 于 多 个 请 求,并 且 其 实 例 一 般 不 会 销 毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。服务方法答:1)每当服务接收到对Servlet的请求时,服务器就会产生一个新线程,并调用Service。service方法检杳HTTP 请求类型
11、(GET、POST、PUT、DELETE 等),并相应地调用 doGet、doPost doPut、doDelete 等。2)doGet/doPost 方法接收 HttpServletRequest 和 HttpServletResponse 对象。3)99%的时间里,只需注意GET和/或POST请求;4)没有任何doHead方法。(2)sevlet 学习 摘要 http: 什么是 servlet:1)在web容器中运行的服务器端JAVA程序,-:要用于响应HTTP请求。Servlet 一般用于MVC中的控制器部分。2)模块化的程序,运行在服务器端,增强了请求/响应导向服务;3)应用示例:a.
12、访问远端对象;b.跟踪大量信息;c.多用户协作2.2 JSP构架模型Modell:纯js p维护难,代码可复用性差Model2:jsp+javabean在jsp中使用usebean标签,代码在jsp中本质同ModellMvc:jsp+servlet+javabean2.3 servlet 中如何1)从HTML表单中获得参数request.get Param eter Nam es();enum er;request.get Param eter();String2)如何获得请求头部的信息Enumeration enumer=request.get Header Nam es();While(e
13、numer.HasMoreElements()(String header=enumer.next();String result=request,get Header(header);Out.print(result);3)如何获得客户cookie的信息request.getCookies();array4)如何设置response的头部信息response.setHeader();5)如何设置响应的content typeresponse.setContentType(,text/html charset=utf-8n);6)如何获得I/O流、text流、二进制流7)如何从当前的servl
14、et重定向到其他的URLresponse.sendRedirect(,urr,)RequstDispatcher rd=request.get RequstDispatcherfurr*)Rd.forword(request,response);8)如何向客9端写cookieCookie cookie=new Cookie(uobject,jkIjM);Cookie.setMaxAge(时间);Response.addCookie(cookie);2.4 如何创建Request Dispatcher对象,如何将请求转发给其它的web资源(包含其它的web资源),描述如何利用request来存状
15、态,以及与其它保存状态方法有什么区别RequstDispatcher rd=request.get RequstDispatcher(urr*)Rd.forword(request,response);Request.setAttribute(object”,”内 容)一旦产生响应request的生命周期就结束了2.5 描述servlet的生命周期,谁来控制servlet的生命周期,servlet生命周期在J2EE规范中是如何来定义的服务器实例化 个servlet对象,容器运行其init方法,请求到达时运行其service方法,service方法根据请求的类型调用(doGet,doPost)方
16、法,当服务器决定将实例销毁时调用其destory方法。2.6 如何创建Request Dispatcher对象,如何将请求转发给其它的web资源(包含其它的web资源),描述如何利用request来存状态,以及与其它保存状态方法有什么区别RequstDispatcher rd=request.get RequstDispatcherCurr1)Rd.forword(request,response);Request,set Attribute(object,“内容”);一旦产生响应request的生命周期就结束了2.7 如何在web.xml中配置servlet定义 name package映射
17、 name/patten2.8 获得 ServletConfig 对 象ServletConfig sc=getServletConfigf);2.9 如何获得servletContext对像servletContext sc=getservletContext();18.POST 调用 servlet 时采用了 doPost、doGet doForm、doHref 中的哪个方法doGet方法2.10 doGet:PrintWriter out=res.getWriter();Out.println(*,Hello);If(Ires.isCommitted()判断是否 response 提交了
18、If(reg.getParameter(name)=null)(res.sendError(HttpServletResponse.SC_UNAUTHORIZED);)2.11 说明如下的web的资源应该放在web容器中的什么目录下,静态页面JSP、servlet class、web.xmkTag libraries、JAR File、java class以及需要保护的资源文件tomcat容器web.xml,Tag libraries:webapps工程名WEB-INFservlet javaclass:webappsXWEB-lNRclasses jar:webappsJ名WEB-INFli
19、b2.12 如何打war包将web项目压缩成rar文件然后将后缀名改为war。2.13 如何利用ServletContext对象获得初始化参数servletContext sc=getservletContext();String s=sc.get I nit Parameter(key);2.1 4 如何在配置文件中配置ServletContext初始化参数 name vlaue2.15 写代码来将对象放入ServletContext中以及取出对象servletContext sc=getservletContext();sc.setAttribute(key,value);2.16 描述r
20、equest session web application的区别,创建监听器类来监听每个scope的生命周期生命周期不同。request产生响应时生命周期结束,session在web.xml中设置生命周期时间、手动清除web容器重启生命周期结束。Webapplication容器重启、手动清除2.17 start-26.如何配置listener27.如何来写以及配置filter28.创建一个request或response对象的包装类29.写一段servlet代码,用来将对象存入session以及从session中取出该对象HttpSession session=request.getSess
21、ion();session,set Attribute(key,value);30.描述用来访问session对象的API31.说明session对象的生命周期session在web.xml中设置生命周期时间、手动清除web容器重启生命周期结束32.写一段代码来响应当对象加入session时的事件33.描述web容器使用了什么机制来管理session34.如何使session失效session在web.xml中设置生命周期时间、手动清除web容器重启生命周期结束35.描述将session与客户端Birding的流程及方法36.当client不支持cookie时,如何使用session37.什么
22、是Authentication(识 别(用 户 识 别 用 户 是谁?什么是Authorization(授权)对识别后的用户给予什么样的权限。数据的完整性:提交数据,操作数据,数据库数据。数据的机密性:加密,HTTPS38.JSP中指令标签的形式JSP中声明标签的形式JSP中代码段标签的形式JSP中动作标签的形式JSP中注释标签的形式JSP中的表达式标签的形式39.指令标签有哪些?40.action标签有哪些?41.page的属性42.%!int 成员变量一局部变量43.JSP中的内置对象44.与vjsp:include page=”/不同45.jsp:useBean(id,scope,typ
23、e,type,class)的使用.end.7、说出ArrayList,Vector,LinkedList的存储性能和特性ArrayList和 Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了 synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。8、EJB是基于哪些技术实现
24、的?并说出SessionBean和 EntityBean的区别,StatefulBean 和 StatelessBean 的区别。EJBEJB是sun的服务器端组件模型,最大的用处是部署分布式应用程序当然,还有许多方式可以实现分布式应用,类似微软的.net技术。凭借java跨平台的优势,用 EJB技术部署的分布式系统可以不限广特定的平台。EJB(EnterpriseJavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。在 J2EE里,Enterprise Java Beans(EJB)称为Java企业Bean,
25、是 Java的核心代码,分别是会话(Session Bean),实体 Bean(Entity Bean)和消息驱动 Bean(MessageDriven B e a n)。EJB简介1.Session Bean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个SessionBean来为客户端服务。Session Bean可以直接访问数据库,但更多时候,它会通过EntityBean实现数据访问。2.Entity Bean是域模型对象,用于实现0/R 映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个Entity Bean对象相当于新
26、建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。3.MessageDriven Bean是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态Session Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。EJB实际上是SUN的J2EE中的套规范,并且规定了 系列的API用来实现把EJ
27、B概念转换成EJB产品.EJB是BEANS,BEANS是什么概念,那就是得有一个容纳她,让她可劲造腾的地方,就是得有容器.EJB必须生存 在EJB容器中.这个容器可是功能强大之极!她首先要包装你BEAN,EJB的客户程序实际I二从来就不和你编写的EJB直接打交道,他们之间是通过HOME/REMOTE接口来发生关系的.它负责你的BEAN的所有的吃喝拉撒睡,比如BEAN的持续化,安全性,事务管理一.什 么 是 EJB?一个技术规范:EJB从技术上而言不是一种 产品EJBE JB是种标准描述了构建应用组件要解决的:可 扩 展(Scalab分 布 式(Distributed)事 务 处 理(Trans
28、actional)数 据 存 储(Persistent)安 全 性(Secure)-.S u n对E J B的期望提供个标准的分布的、基 于 皿 的组件架构屏蔽复杂的系统级功能需求Write once,run anywhere与 非Java应用之间的互操作能力兼容CORBA标准三.为 什 么 选 择EJB?E JB服务器完成“繁杂”的工作:应用开发人员关注于业务逻辑的实现而不是底层的实现机制(类似于4 sL语言设计的目标)支持事务处理多个业务操作同时成功,或全部失败可以通过在代码外的描述来定义事务处理级别S Si*(entity beans 和 message-driven beansoSes
29、sion bean描述了与客户端的一个短暂的会话。当客户端的执行完成后,session bean和它的数据都将消失:与之相对应的是一个entity bean描述了存储在数据库表中的一行持久稳固的数据,如果客户端终止或者服务结束,底层的服务会负责entity bean数据的存储。Message-driven bean结合了 session bean和Java信 息 服 务(JM S)信息监听者的功能,它允许个商业组件异步地接受JM S消息。其它EJB 包括 Session Bean、Entity Bean、Message Driven B ean,基于 JNDI、RML JAT等技术实现。Ses
30、sionBean在J2EE应用程序中被用来完成,些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless SessionBean,这两种的Session Bean都可以将系统逻辑放在method之中执行,不同的是
31、Stateful Session Bean可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的 Stateful Session Bean 的实体。Stateless Session Bean虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫Stateless Session Bean 的时候,EJB Container 并不会找寻特定的 StatelessSession Bean的实体来执行这个methodo 换言之,很可能数个使用者在执行某个 Stateless Session Bean 的 methods 时,会是同一个 Bean 的 Instance 在执行
32、。从内存方面来看,Stateful Session Bean 与 Stateless Session Bean 比较,Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful SessionBean的优势却在于他可以维持使用者的状态。9、Collection 和 Collections 的区别。Collection是集合类的上级接口,继承与他的接口主要有S et和 List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。10、&和&的区别。&是位运算符,表示按位与运算,&是
33、逻辑运算符,表示逻辑与(and)o11、HashMap 和 Hashtable 的区别。HashMap是 Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键 值(key),由于非线程安全,效率上可能高于Hashtable。HashM即 允许将null作为一个entry的key或者value,而 Hashtable不允许。HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和containsKeyo因为contains方法容易让人引起误解。Hashtable 继承自 D
34、ictionary 类,而 HashMap 是 Javal.2 弓 1 进的 Map interface的一个实现。最大的不同是,Hashtable的方法是Synchronize(同步)的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。12、final,finally,finalize 的区别。一、概述fin a l用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句
35、结构的一部分,表示总是执行。finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。http: C+析构函数的区别。另外,我们将创建一个简单的A pplet来演示finalize。是如何工作的。最终的界限与 Java不同,C+支持局部对象(基于栈)和全局对象(基于堆)。因为这一双重支持,C+也提供了自动构造和析构,这导致了对构造函数和析构函数的调用,(对于堆对象)就是内存的分配和释放。在 Java中,所有对象都驻留在堆内存,因此局部对象就不存在。结果,Java的设计者觉得不需要析构函数(象 C+中所
36、实现的)。取而代之,Java定义了一个特殊的方法叫做finalize(),它提供了 C+析构函数的一些功能。但是,finalize()并不完全与C+的析构函数一样,并可以假设它会导致一系列的问题。finalize()方法作用的一个关键元素是Java的垃圾回收器。垃圾回收器在C/C+、Pascal和其他几种多种用途的编程语言中,开发者有责任在内存管理上发挥积极的作用。例如,如果你为一个对象或数据结构分配了内存,那么当你不再使用它时必须释放掉该内存。在Java中,当你创建一个对象时,Java虚 拟 机(JVM)为该对象分配内存、调用构造函数并开始跟踪你使用的对象。当你停止使用个对象(就是说,当没有
37、对该对象有效的引 用 时),JVM通 过 垃 圾 回 收 器 将 该 对 象 标 记 为 释 放 状 态。当垃圾回收器将要释放一个对象的内存时,它调用该对象的finalize()方法(如果该对象定义了U匕方法)。垃 圾 回 收 器 以 独 立 的 低 优 先 级 的 方 式 运 行,只 有 当 其 他 线 程 挂 起 等 待 该 内 存 释 放 的 情 况 出 现 时,它才开始运行释放对象的内存.(事实上,你可以调用System.gc()方法强制垃圾回收器来释放这些对象的内存。)在以上的描述中,有一些重要的事情需要注意。首先,只有当垃圾回收器释放该对象的内存时,才会执行finalize。如果在
38、Applet或应用程序退出之前垃圾回收器没有释放内存,垃圾回收器将不会调用finalize。其次,除非垃圾回收器认为你的Applet或应用程序需要额外的内存,否则它不会试图释放不再使用的对象的内存。换句话说,这是完全可能的:一 个Applet给少量的对象分配内存,没有造成严重的内存需求,于是垃圾回收器没有释放这些对象的内存就退出了。显然,如果你为某个对象定义了 finalize。方法,JVM可能不会调用它,因为垃圾回收器不曾释放过那些对象的内存。调用System.gc()也不会起作用,因为它仅仅是给JVM 一个建议而不是命令。fin a liz e()有什么优点呢?如果finalize。不是析
39、构函数,JVM不一定会调用它,你可能会疑惑它是否在任何情况下都有好处。事实上,在Java 1.0中它并没有太多的优点。根 据Java文档,finalize。是一个用于释放非Java资源的方法。但是,JVM有很大的可能不调用对象的finalize。方法,因此很难证明使用该方法释放资源是有效的。Java 1.1通过提供一个System.runFinalizersOnExitO方法部分地解决了这个问题。(不要将这个方法与Java 1.0中的System.runFinalizationsQ方法相混淆。)不 System,gc()方法那样,System.runFinalizersOnExitO方法并不立
40、即试图启动垃圾回收器。而是当应用程序或Applet退出时,它调用每个对象的finalize。方法。正如你可能猜测的那样,通过调用System.runFinalizersOnExit()方法强制垃圾回收器清除所有独立对象的内存,当清除代码执行时可能会引起明显的延迟。现在建立个示例Applet来演示Java垃圾回收器和finalize()方法是如何相互作用的。回收垃圾通过使用Java Applet Wizard创建一个新的Applet开始。当提示这样做时,输入final_things作为Applet名,并选择不要生成源文件注释。接下来,在Java Applet Wizard进行第三步,不要选择多线
41、程选项。在第五步之前,根据需要修改Applet的描述。当你单击Finish后,Applet Wizard将生成一个新的工作空间,并为该项目创建缺省的Java文件。从列表A中选择适当的代码输入(我们已经突出显示了你需要输入的代码)。当你完成代码的输入后,配 置Internet浏览器将System.out的输出信息写到Javalog.txt文件中。(在IE选项对话框的高级页面中选择起用Java Logging。)编译并运行该Applet。然后,等 待Applet运行(你将在状态栏中看到Applet已启动的信 息),退出浏览器,并打开Javalog.txt文件。你将会发现类似于下列行的信息:1 00
42、0 things constructed0 things finalized正如你能够看到的那样,建立了 1,000个对象仍然没有迫使垃圾回收器开始回收空间,即使在Applet退出时也没有对象被使用。现在,删除在stop()方法第一行中的注释符以起用System.gc()方法。再次编译并运行该Applet,等 待Applet完成运行,并退出浏览器。当你再次打开Javalog.txt文件,你将看到下列行:1 000 things constructed963 things finalized这次,垃圾回收器认为大多数对象未被使用,并将它们回收。按顺序,当垃圾回收器开始释放这些对象的内存时,JVM
43、调用它们的finalize()方法。继承 f inalize()?顺便,如果你在类中定义了 finalize。,它将不会自动调用基类中的方法。在我们讨论了 finalize。与C+的析构函数的不同点后,对这个结论不会惊讶,因为为某个类定制的清除代码另一个类不一定会需要。如果你决定要通过派生一个类的finalize。方法来调用基类中的finalize。方法,你可以象其他继承方法一样处理。protected void finalize()super.finalize();/other finalization code.)除了允许你控制是否执行清除操作外,这个技术还使你可以控制当前类的finali
44、ze()方法何时执行。结论然而有益的是,Java的自动垃圾回收器不会失去平衡。作为便利的代价,你不得不放弃对系统资源释放的控制。不 象C+中的析构函数,Java Applet不会自动执行你的类中的finalize。方法。事实上,如果你正在使用Java 1.0,即使你试图强制它调用finalize()方法,也不能确保将调用它。因此,你不应当依靠finalize。来执行你的A pplet和应用程序的资源清除工作。取而代之,你应当明确的清除那些资源或创建一个tryfin a lly块(或类似的机制)来实现。(如reader对象资源的释放)13、sleep()和wait()有什么区别?sleep是线程
45、类(Thread)的方法,导致此线程暂停执行指定时间,把执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调 用sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方 法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。14、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的
46、一种表现,重 载Overloading是个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。15、e r r o r和ex cep tio n有 什 么 区 别?erro r表 示 恢 复 不 是 不 可 能 但 很 困 难 的 情 况 下 的 一 种 严 重 问 题。比如说
47、内存 溢 出。不 可 能 指 望 程 序 能 处 理 这 样 的 情 况。e x c e p tio n表 示 一种 设 计 或 实 现 问 题。也 就 是 说,它表示如果程序运行正常,从 不 会 发 生 的 情 况。16、同 步 和 异 步 有 何 异 同,在 什 么 情 况 下 分 别 使 用 他 们?举 例 说 明。如 果 数 据 将 在 线 程 间 共 享。例如正在写的数据以后可能被另一个线程读至U,或 者 正 在 读 的 数 据 可 能 已 经 被 另 一 个 线 程 写 过 了,那么这些数据就是共享数 据,必 须 进 行 同 步 存 取。当 应 用 程 序 在 对 象 上 调 用
48、了 一 个 需 要 花 费 很 长 时 间 来 执 行 的 方 法,并且不希 望 让 程 序 等 待 方 法 的 返 回 时,就 应 该 使 用 异 步 编 程,在很多情况下采用异步途 径 往 往 更 有 效 率。17、abstract class 和 interface 有 什 么 区 别?声 明 方 法 的 存 在 而 不 去 实 现 它 的 类 被 叫 做 抽 象 类(a b str a c tc la ss),它用于要 创 建 一 个 体 现 某 些 基 本 行 为 的 类,并 为 该 类 声 明 方 法,但不能在该类中实现该 类 的 情 况。不 能 创 建ab stract类 的 实
49、 例。然 而 可 以 创 建 一 个 变 量,其类型是一 个 抽 象 类,并 让 它 指 向 具 体 子 类 的 一 个 实 例。不能有抽象构造函数或抽象静态方法。Abstract类的子类为它们父类中的所有抽象方法提供实现,否 则 它 们 也 是 抽 象 类 为。取而代之,在 子 类 中 实 现 该 方 法。知 道 其 行 为 的 其 它 类 可 以 在 类 中 实 现 这 些 方 法。接 口(in te r fa c e)是 抽 象 类 的 变 体。在 接 口 中,所 有 方 法 都 是 抽 象 的。多继 承 性 可 通 过 实 现 这 样 的 接 口 而 获 得。接 口 中 的 所 有 方
50、 法 都 是 抽 象 的,没有一个 有 程 序 体。接口只可以定义static final成员变量。接 口 的 实 现 与 子 类 相 似,除了该实现 类 不 能 从 接 口 定 义 中 继 承 行 为。当 类 实 现 特 殊 接 口 时,它 定 义(即 将 程 序 体给 予)所 有 这 种 接 口 的 方 法。然 后,它可以在实现了该接口的类的任何对象上调 用 接 口 的 方 法。由 于有抽象类,它 允 许 使 用 接 口 名 作 为 引 用 变 量 的 类 型。通常 的 动 态 联 编 将 生 效。引 用 可 以 转 换 到 接 口 类 型 或 从 接 口 类 型 转 换,instance