版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象的特征有哪些方面
⑴抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意
与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部
分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
(2)继承:
继承是■•种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种
明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为
类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原
始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变
量,并且类可以修改或增加新的方法使之更适合特殊的需要。
(3)封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面
向对象计算始于这个基本概念,即现实世界可以被描绘成系列完全自治、封
装的对象,这些对象通过一个受保护的接口访问其他对象。
(4)多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多
态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,
很好的解决了应用程序函数同名问题。
2、String是最基本的数据类型吗?
基本数据类型包括byte、int、char、long、float、double>boolean和shorto
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个
类。为了提高效率节省空间,我们应该用StringBuffer类
3、int和Integer有什么区别
Java提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java
的原始数据类型,Integer是java为int提供的封装类。
Java为每个原始类型提供了封装类。
原始类型封装类
booleanBoolean
charCharacter
byteByte
shortShort
intlnteger
longLong
floatFloat
doubleDouble
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类
型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型
以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时
所■旨定的缺省值。对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与它们的
类型有关。
4、String和StringBuffer的区别
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字
符串,即包含多个字符的字符数据。这个String类提供了
数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。
当你知道字符数据要改变的时候你就可以使用StringBuffer
o典型地,你可以使用StringBuffers来动态构造字符数据。
5、运行时异常与一般异常有何异同?
(1)基本概念
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机
的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声
明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异
常。
(2)运行时异常与非运行时异常有什么区别
参考网址:/space.php?uid=122120&do=blog&id=12723(Java提供了两类主
要的异常:runtimeexception和checkedexception。checked异常也就是我们经常遇到的IO异常,以及
SQL异常都是这种异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以,面
对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。
但是另外一种异常:runtimeexception,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚
拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最
常见的异常之一.)
(3)每个类型的异常的特点
1、Error体系
Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形.应用程序不应该抛出这种
类型的对象(一般是由虚拟机抛出).假如出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为
力的.所以,在进行程序设计时,应该更关注Exception体系.
2、Exception体系
Exception体系包括RuntimeException体系和其他非RuntimeException的体系
2.1RuntimeException(程序逻辑错误)
RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等.处理
RuntimeException的原则是:假如出现RuntimeException,那么•定是程序员的错误.例如,可以通过
检查数组下标和数组边界来避免数组越界访问异常工
2.2其他(lOException等等)
这类异常•般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应
用环境中出现的外部错误.
(4)异常的使用方法
参考网址:http:〃ww.zhiweinet.cotn/jiaocheng/2008-09/1452.htm
1、声明方法抛出异常
1.1语法:throws(略)
1.2为什么要声明方法抛出异常?
方法是否抛出异常与方法返回值的类型一样重要.假设方法抛出异常确没有声明该方法将抛出异
常,那么客户程序员灯以调用这个方法而且不用编写处理异常的代码.那么,•旦出现异常,那么这个异常
就没有合适的异常控制器来解决.
1.3为什么抛出的异常一定是已检查异常?
RuntimeException与Error可以在任何代码中产生,它们不需要由程序员显示的抛出,一旦出
现错误,那么相应的异常会被自动抛出.而已检查异常是由程序员抛出的,这分为两种情况:客户程序员调
用会抛出异常的库函数(库函数的异常由库程序员抛出);客户程序员自己使用throw语句抛出异常.碰到
Error,程序员一般是无能为力的;碰到RuntimeException,那么一定是程序存在逻辑错误,要对程序
进行修改(相当于调试的一种方法);只有已检查异常才是程序员所关心的,程序应该且仅应该抛出或处理
已检查异常.
6、说出Servlet的生命周期,并说出Servlet和CGI的区别。
(1)总括:
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service
方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)
等,当服务器决定将实例销毁的时候调用其destroy方法。
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其
service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求
都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
服务方法
答:1)每当服务接收到对Servlet的请求时,服务器就会产生一个新线程,并调用Service。service方法检杳
HTTP请求类型(GET、POST、PUT、DELETE等),并相应地调用doGet、doPost>doPut、doDelete等。
2)doGet/doPost方法接收HttpServletRequest和HttpServletResponse对象。
3)99%的时间里,只需注意GET和/或POST请求;
4)没有任何doHead方法。
(2)sevlet学习摘要http:〃/sevlet・Leaminq-Summarv.html
2.1什么是servlet:
1)在web容器中运行的服务器端JAVA程序,]-:要用于响应HTTP请求。Servlet一般用于MVC中的控
制器部分。
2)模块化的程序,运行在服务器端,增强了请求/响应导向服务;
3)应用示例:
a.访问远端对象;
b.跟踪大量信息;
c.多用户协作
2.2JSP构架模型
Modell:纯jsp维护难,代码可复用性差
Model2:jsp+javabean在jsp中使用usebean标签,代码在jsp中本质同Modell
Mvc:jsp+servlet+javabean
2.3servlet中如何
1)从HTML表单中获得参数
request.getParameterNames();enumer;
request.getParameter();String
2)如何获得请求头部的信息
Enumerationenumer=request.getHeaderNames();
While(enumer.HasMoreElements())
(
Stringheader=enumer.next();
Stringresult=request,getHeader(header);
Out.print(result);
}
3)如何获得客户cookie的信息
request.getCookies();array[]
4)如何设置response的头部信息
response.setHeader();
5)如何设置响应的contenttype
response.setContent'Type(<,text/htmlcharset=utf-8n);
6)如何获得I/O流、text流、二进制流
7)如何从当前的servlet重定向到其他的URL
response.sendRedirect(,,urr,)
RequstDispatcherrd=request.getRequstDispatcherf^urr*)
Rd.forword(request,response);
8)如何向客9端写cookie
Cookiecookie=newCookie(uobject","jkIjM);
Cookie.setMaxAge(时间);
Response.addCookie(cookie);
2.4如何创建RequestDispatcher对象,如何将请求转发给其它的web资源(包含其它的web资源),描
述如何利用request来存状态,以及与其它保存状态方法有什么区别
RequstDispatcherrd=request.getRequstDispatcher(^urr*)
Rd.forword(request,response);
Request.setAttribute("object”,”内容)
一旦产生响应request的生命周期就结束了
2.5描述servlet的生命周期,谁来控制servlet的生命周期,servlet生命周期在J2EE规范中是如何来
定义的
服务器实例化个servlet对象,容器运行其init方法,请求到达时运行其service方法,service方法根
据请求的类型调用(doGet,doPost)方法,当服务器决定将实例销毁时调用其destory方法。
2.6如何创建RequestDispatcher对象,如何将请求转发给其它的web资源(包含其它的web资源),描
述如何利用request来存状态,以及与其它保存状态方法有什么区别
RequstDispatcherrd=request.getRequstDispatcherCurr1)
Rd.forword(request,response);
Request,setAttribute("object",“内容”);
一旦产生响应request的生命周期就结束了
2.7如何在web.xml中配置servlet
定义
<servlet>
<servlet-name>name</servlet-name>
<servlet-class>package</servlet-class>
</servlet>
映射
<servlet-mapping>
<servlet-name>name</servlet-name>
<url-patten>/patten</url-patten>
</servlet-mapping>
2.8获得ServletConfig对■象
ServletConfigsc=getServletConfigf);
2.9如何获得servletContext对像
servletContextsc=getservletContext();
18.<html><body>
<ahref=*7servlet/HelloServlet">POST</a>
</body></html>
调用servlet时采用了doPost、doGet>doForm、doHref中的哪个方法
doGet方法
2.10doGet:
PrintWriterout=res.getWriter();
Out.println(*,<html><body>Hello</bodyx/html>");
If(Ires.isCommitted())判断是否response提交了
If(reg.getParameter("name")==null)
(
res.sendError(HttpServletResponse.SC_UNAUTHORIZED);
)
2.11说明如下的web的资源应该放在web容器中的什么目录下,静态页面JSP、servletclass、web.xmk
Taglibraries、JARFile、javaclass以及需要保护的资源文件tomcat容器
web.xml,Taglibraries:\webapps\工程名\WEB-INF
servletjavaclass:\webapps\X^^\WEB-lNRclasses\
jar:\webapps\J^¥名\WEB-INF\lib\
2.12如何打war包
将web项目压缩成rar文件然后将后缀名改为war。
2.13如何利用ServletContext对象获得初始化参数
servletContextsc=getservletContext();
Strings=sc.getInitParameter(key);
2.14如何在配置文件中配置ServletContext初始化参数
<init-param>
<param-name>name</param-name>
<param-value>vlaue</param-value>
</init-param>
2.15写代码来将对象放入ServletContext中以及取出对象
servletContextsc=getservletContext();
sc.setAttribute(key,value);
2.16描述requestsessionwebapplication的区别,创建监听器类来监听每个scope的生命周期
生命周期不同。request产生响应时生命周期结束,session在web.xml中设置生命周期时间、手动清除
web容器重启生命周期结束。Webapplication容器重启、手动清除
2.17start
26.如何配置listener
27.如何来写以及配置filter
28.创建一个request或response对象的包装类
29.写一段servlet代码,用来将对象存入session以及从session中取出该对象
HttpSessionsession=request.getSession();
session,setAttribute(key,value);
30.描述用来访问session对象的API
31.说明session对象的生命周期
session在web.xml中设置生命周期时间、手动清除web容器重启生命周期结束
32.写一段代码来响应当对象加入session时的事件
33.描述web容器使用了什么机制来管理session
34.如何使session失效
session在web.xml中设置生命周期时间、手动清除web容器重启生命周期结束
35.描述将session与客户端Birding的流程及方法
36.当client不支持cookie时,如何使用session
37.什么是Authentication(识别(用户识别用户是谁?什么是Authorization(授权)对识别后的
用户给予什么样的权限。数据的完整性:提交数据,操作数据,数据库数据。数据的机密性:加密,HTTPS
38.JSP中指令标签的形式
JSP中声明标签的形式
JSP中代码段标签的形式
JSP中动作标签的形式
JSP中注释标签的形式
JSP中的表达式标签的形式
39.指令标签有哪些?
40.action标签有哪些?
41.page的属性
42.<%!int成员变量
<%intj;%>一局部变量
<%=i++%x%=j++%>
43.JSP中的内置对象
44.<%@includefile=w"%>与vjsp:includepage="”/>不同
45.jsp:useBean(id,scope,type,type,class)的使用
end
7、说出ArrayList,Vector,LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际
存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入
元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由
于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而
LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,
但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,
StatefulBean和StatelessBean的区别。
EJB
EJB是sun的服务器端组件模型,最大的用处是部署分布式应用程序当然,还有许多方式可以实现分布式应用,类似微
软的.net技术。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限广特定的平台。EJB(Enterprise
JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和
核心开发工具(SDK)。在J2EE里,EnterpriseJavaBeans(EJB)称为Java企业Bean,是Java的核心代码,分别是
会话(SessionBean),实体Bean(EntityBean)和消息驱动Bean(MessageDrivenBean)。
EJB简介
1.SessionBean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就
会选择一个SessionBean来为客户端服务。SessionBean可以直接访问数据库,但更多时候,它会通过Entity
Bean实现数据访问。
2.EntityBean是域模型对象,用于实现0/R映射,负责将数据库中的表记录映射为内存中的Entity对象,
事实上,创建一个EntityBean对象相当于新建一条记录,删除一个EntityBean会同时从数据库中删除对应记
录,修改一个EntityBean时,,容器会自动将EntityBean的状态和数据库同步。
3.MessageDrivenBean是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS
消息然后处理。MDB实际上是一个异步的无状态SessionBean,客户端调用MDB后无需等待,立刻返回,
MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的
等待一个方法调用直到返回结果。
EJB实际上是SUN的J2EE中的•套规范,并且规定了•系列的API用来实现把EJB概念转换成EJB产
品.EJB是BEANS,BEANS是什么概念,那就是得有一个容纳她,让她可劲造腾的地方,就是得有容器.EJB必须生
存在EJB容器中.这个容器可是功能强大之极!她首先要包装你BEAN,EJB的客户程序实际I二从来就不和你编写
的EJB直接打交道,他们之间是通过HOME/REMOTE接口来发生关系的.它负责你的BEAN的所有的吃喝拉撒
睡,比如BEAN的持续化,安全性,事务管理…
一.什么是EJB?
一个技术规范:EJB从技术上而言不是一种"产品"
EJB
EJB是•种标准描述了构建应用组件要解决的:
可扩展(Scalab⑹
分布式(Distributed)
事务处理(Transactional)
数据存储(Persistent)
安全性(Secure)
-.Sun对EJB的期望
提供•个标准的分布的、基于皿的组件架构
屏蔽复杂的系统级功能需求
Writeonce,runanywhere
与非Java应用之间的互操作能力
兼容CORBA标准
三.为什么选择EJB?
EJB服务器完成“繁杂”的工作:应用开发人员关注于业务逻辑的实现而不是底层的实现机制(类似
于4sL语言设计的目标)
支持事务处理
多个业务操作同时成功,或全部失败
可以通过在代码外的描述来定义事务处理级别
SSi■*«(«<«Ftcad*Patiern
EJB
可扩展性
EJB可以根据您应用的增长而扩展
EJB服务器往往还提供了负载均衡和
安全性:由EJB服务器提供资源的访问权限控制
四.EJB架构
为了满足架构的目标,规范中描述了
服务器(Server)
容器(Container)
类(Class)和实例(Instance)
Home和Remote接口
客户端(Client)
五.简化的编程模型
关注于业务逻辑实现:EJB负责生命周期(lifecycle),数据存储(persistence),事务处理语义
(transactionalsemantic),安全(security),...
通用的编程模型:各种服务的高层也
Java是其编程语言
EJB(业务逻辑代码)表示了与特定商业领域(例如银行、零售等行业)相适应的逻辑。它由
运行在业务逻辑层的enterprisebean处理。,个enterprisebean以从客户端接受数据,对
它进行处理,并将其发送到企业信息系统层以作存储;同时它也可以从存储瑞获取数据,
处理后将其发送到客户端应用程序。
有三种类型的enterprisebeans:sessionbeans>entitybeans和message-drivenbeanso
Sessionbean描述了与客户端的一个短暂的会话。当客户端的执行完成后,sessionbean和
它的数据都将消失:与之相对应的是一个entitybean描述了存储在数据库表中的一行持久
稳固的数据,如果客户端终止或者服务结束,底层的服务会负责entitybean数据的存储。
Message-drivenbean结合了sessionbean和Java信息服务(JMS)信息监听者的功能,它允
许•个商业组件异步地接受JMS消息。
其它
EJB包括SessionBean、EntityBean、MessageDrivenBean,基于JNDI、
RMLJAT等技术实现。
SessionBean在J2EE应用程序中被用来完成,•些服务器端的业务操作,例
如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的
数据。
对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上
运行的业务逻辑。
对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存
储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。
SessionBean还可以再细分为StatefulSessionBean与StatelessSession
Bean,这两种的SessionBean都可以将系统逻辑放在method之中执行,不
同的是StatefulSessionBean可以记录呼叫者的状态,因此通常来说,一个使
用者会有一个相对应的StatefulSessionBean的实体。StatelessSessionBean
虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫
StatelessSessionBean的时候,EJBContainer并不会找寻特定的Stateless
SessionBean的实体来执行这个methodo换言之,很可能数个使用者在执行
某个StatelessSessionBean的methods时,会是同一个Bean的Instance在
执行。从内存方面来看,StatefulSessionBean与StatelessSessionBean比较,
StatefulSessionBean会消耗J2EEServer较多的内存,然而StatefulSession
Bean的优势却在于他可以维持使用者的状态。
9、Collection和Collections的区别。
Collection是集合类的上级接口,继承与他的接口主要有Set和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各
种集合的搜索、排序、线程安全化等操作。
10、&和&&的区别。
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)o
11、HashMap和Hashtable的区别。
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了
Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安
全,效率上可能高于Hashtable。
HashM即允许将null作为一个entry的key或者value,而Hashtable不允
许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和
containsKeyo因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Javal.2弓1进的Mapinterface
的一个实现。
最大的不同是,Hashtable的方法是Synchronize(同步)的,而HashMap
不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而
HashMap就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会
有很大的差异。
12、final,finally,finalize的区别。
一、概述
final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,
类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收
对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文
件等。
http:〃/news/show/194.html
二、finalize
C++支持局部对象(基于栈)和全局对象(基于堆)。栈对象由编译器检测释放,堆对
象由程序员来释放。
在许多方面,Java类似于C++。Java的语法非常类似于C++,Java有类、方法和
数据成员;Java的类有构造函数;Java有异常处理。
但是,如果你使用过C++会发现Java也丢掉一些可能是你熟悉的特性。这些特性之
一就是析构函数。取代使用析构函数,Java支持finalize。方法。
在本文中,我们将描述finalize。与C++析构函数的区别。另外,我们将创建一个
简单的Applet来演示finalize。是如何工作的。
最终的界限
与Java不同,C++支持局部对象(基于栈)和全局对象(基于堆)。因为这一双重
支持,C++也提供了自动构造和析构,这导致了对构造函数和析构函数的调用,(对于堆
对象)就是内存的分配和释放。
在Java中,所有对象都驻留在堆内存,因此局部对象就不存在。结果,Java的设计
者觉得不需要析构函数(象C++中所实现的)。
取而代之,Java定义了一个特殊的方法叫做finalize(),它提供了C++析构函数的
一些功能。但是,finalize()并不完全与C++的析构函数一样,并可以假设它会导致一系
列的问题。finalize()方法作用的一个关键元素是Java的垃圾回收器。
垃圾回收器
在C/C++、Pascal和其他几种多种用途的编程语言中,开发者有责任在内存管理上
发挥积极的作用。例如,如果你为一个对象或数据结构分配了内存,那么当你不再使用它时
必须释放掉该内存。
在Java中,当你创建一个对象时,Java虚拟机(JVM)为该对象分配内存、调用构
造函数并开始跟踪你使用的对象。当你停止使用•个对象(就是说,当没有对该对象有效的
引用时),JVM通过垃圾回收器将该对象标记为释放状态。
当垃圾回收器将要释放一个对象的内存时,它调用该对象的finalize()方法(如果该对
象定义了U匕方法)。垃圾回收器以独立的低优先级的方式运行,只有当其他线程挂起等待该内存释放的情况出现时,它
才开始运行释放对象的内存.(事实上,你可以调用System.gc()方法强制垃圾回收器来释放这
些对象的内存。)
在以上的描述中,有一些重要的事情需要注意。首先,只有当垃圾回收器释放该对象的
内存时,才会执行finalize。。如果在Applet或应用程序退出之前垃圾回收器没有释放内
存,垃圾回收器将不会调用finalize。。
其次,除非垃圾回收器认为你的Applet或应用程序需要额外的内存,否则它不会试图
释放不再使用的对象的内存。换句话说,这是完全可能的:一个Applet给少量的对象分配
内存,没有造成严重的内存需求,于是垃圾回收器没有释放这些对象的内存就退出了。
显然,如果你为某个对象定义了finalize。方法,JVM可能不会调用它,因为垃圾回
收器不曾释放过那些对象的内存。调用System.gc()也不会起作用,因为它仅仅是
给JVM一个建议而不是命令。
finalize()有什么优点呢?
如果finalize。不是析构函数,JVM不一定会调用它,你可能会疑惑它是否在任何情
况下都有好处。事实上,在Java1.0中它并没有太多的优点。
根据Java文档,finalize。是一个用于释放非Java资源的方法。但是,JVM有很大
的可能不调用对象的finalize。方法,因此很难证明使用该方法释放资源是有效的。
Java1.1通过提供一个System.runFinalizersOnExitO方法部分地解决了这个问
题。(不要将这个方法与Java1.0中的System.runFinalizationsQ方法相混淆。)不
>System,gc()方法那样,System.runFinalizersOnExitO方法并不立即试图启动垃圾
回收器。而是当应用程序或Applet退出时,它调用每个对象的finalize。方法。
正如你可能猜测的那样,通过调用System.runFinalizersOnExit()方法强制垃圾回
收器清除所有独立对象的内存,当清除代码执行时可能会引起明显的延迟。现在建立•个示
例Applet来演示Java垃圾回收器和finalize()方法是如何相互作用的。
回收垃圾
通过使用JavaAppletWizard创建一个新的Applet开始。当提示这样做时,输
入final_things作为Applet名,并选择不要生成源文件注释。
接下来,在JavaAppletWizard进行第三步,不要选择多线程选项。在第五步之前,
根据需要修改Applet的描述。
当你单击Finish后,AppletWizard将生成一个新的工作空间,并为该项目创建缺省
的Java文件。从列表A中选择适当的代码输入(我们已经突出显示了你需要输入的代码)。
当你完成代码的输入后,配置Internet浏览器将System.out的输出信息写到
Javalog.txt文件中。(在IE选项对话框的高级页面中选择起用JavaLogging。)
编译并运行该Applet。然后,等待Applet运行(你将在状态栏中看到Applet已启动的
信息),退出浏览器,并打开Javalog.txt文件。你将会发现类似于下列行的信息:
1000thingsconstructed
0thingsfinalized
正如你能够看到的那样,建立了1,000个对象仍然没有迫使垃圾回收器开始回收空间,
即使在Applet退出时也没有对象被使用。
现在,删除在stop()方法第一行中的注释符以起用System.gc()方法。再次编译并
运行该Applet,等待Applet完成运行,并退出浏览器。当你再次打开Javalog.txt文件,
你将看到下列行:
1000thingsconstructed
963thingsfinalized
这次,垃圾回收器认为大多数对象未被使用,并将它们回收。按顺序,当垃圾回收器开
始释放这些对象的内存时,JVM调用它们的finalize()方法。
继承finalize()?
顺便,如果你在类中定义了finalize。,它将不会自动调用基类中的方法。在我们讨论
了finalize。与C++的析构函数的不同点后,对这个结论不会惊讶,因为为某个类定制
的清除代码另一个类不一定会需要。
如果你决定要通过派生一个类的finalize。方法来调用基类中的finalize。方法,你
可以象其他继承方法一样处理。
protectedvoidfinalize()
super.finalize();
//otherfinalizationcode...
)
除了允许你控制是否执行清除操作外,这个技术还使你可以控制当前类的finalize()方
法何时执行。
结论
然而有益的是,Java的自动垃圾回收器不会失去平衡。作为便利的代价,你不得不放
弃对系统资源释放的控制。不象C++中的析构函数,JavaApplet不会自动执行你的类
中的finalize。方法。事实上,如果你正在使用Java1.0,即使你试图强制它调用
finalize()方法,也不能确保将调用它。
因此,你不应当依靠finalize。来执行你的Applet和应用程序的资源清除工作。取而代之,你应当明确的清除那些
资源或创建一个try…finally块(或类似的机制)来实现。(如reader对象资源的释放)
13、sleep()和wait()有什么区别?
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,把执行
机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不
会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,
进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)
后本线程才进入对象锁定池准备获得对象锁进入运行状态。
14、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类
型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重
写Overriding是父类与子类之间多态性的一种表现,重载Overloading是•个
类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参
数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用
子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定
义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为
方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
15、error和exception有什么区别?
error表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内
存溢出。不可能指望程序能处理这样的情况。
exception表示一种设计或实现问题。也就是说,它表示如果程序运行正
常,从不会发生的情况。
16、同步和异步有何异同,在什么情况下分别使用他们?举例说明。
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读
至U,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享
数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不
希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步
途径往往更有效率。
17、abstractclass和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstractclass),它用于
要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现
该类的情况。不能创建abstract类的实例。然而可以创建一个变量,其类型是
一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。
Abstract类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代
之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多
继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一
个有程序体。接口只可以定义staticfinal成员变量。接口的实现与子类相似,除了该实
现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体
给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上
调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通
常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof
运算符可以用来决定某对象的类是否实现了接口。
18、heap和Stack有什么区别。/view/93201.htm
栈是--种线形集合,其添加和删除元素的操作应在同一端完成。栈按照后
进先出的方式进行处理。
堆是栈的一个组成元素
命令行参数国环境变他
ifiexecWMffiO
exec从程序文件中谈到
19、forward和redirect的区别
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL
的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务
器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个
地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request
参数都可以获取。
redirect-中文名:重定向
structs进行叶面跳转的方法有两个,forward和redirect(其实不单是structs,几乎所有的web开发都是)
forward他单耒说就是在服务器端完成叶面跳转,服务端从A页forward到B页,对于客户端来说一直都在访间A页,不知
道有个B页存在(所以structs几乎把所有的jsp文件藏起来,客户端地址栏看不到jsp,就是因为structs的大部分jsp页都是
在Action里面通过forwar激转)。
redirec厥容易理解的多了,从A页forward到B页,服务端告诉客户端,你要从阖倒B,由客户端发出指挥,所以客户端
地址栏看到从A页变成B页了.
forward^]redirect各有用途和限制.
forward跳转的叶面中,reques咋用域的变量都能生效,因为无论forwar咯少次,部是同一4*requesL
redirec僦不行了,由于是客户端指挥的,所以redirect!以后就已经不是同一次request了.
当元素有redirect="false"属性或redirec璃性不存在的时候,RequesQispatcner.forward(…)被执行;当
redirect="true"是,将调用sendRedirect(.)方法.
20、EJB与JAVABEAN的区别?
JavaBean是可复用的组件,对JavaBean并没有严格的规范,理论上讲,
任何一个Java类都可以是一个Bean。但通常情况下,由于JavaBean是被容器
所创建(如Tomcat)的,所以JavaBean应具有一个无参的构造器,另外,通
常JavaBean还要实现Serializable接口用于实现Bean的持久性。JavaBean实
际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。
EnterpriseJavaBean相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)
技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署
在诸如Webspere.WebLogic这样的容器中,EJB客户从不直接访问真正的EJB
组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器
所创建和管理。客户通过容器来访问真正的EJB组件。
21、StaticNestedClass和InnerClass的不同。
StaticNestedClass是被声明为静态(static)的内部类,它可以不依赖于外
部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
定义InnerClass
内部类是定义在其他类内部的类。
它儿乎可以处「类内部任何位置,可以与实例变量处于同一级,或处于•方法之内,甚至是一个表达式的一部分!
内部类是JAVA语言的主要附加部分。
优点InnerClass
i.内部类对象可以访问创建它的对象的实现,包括私有数据;
2.内部类不为同一包的其他类所见,具有很好的封装性;
3.使用内部类可以很方便的编写事件驱动程序;
4.匿名内部类可以方便的定义运行时回调;
区别/navyzh/archive/2009/02/26/3938447.aspx
NestedClass(一般是C++的说法),InnerClass(一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就
在于是否有指向外部的引用上©Nested
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026国网山西高校毕业生提前批招聘(约450人)笔试模拟试题浓缩500题及答案详解参考
- 2022年人教版二年级上册数学期末综合复习题(含答案)
- 2026国家管网集团北方管道公司秋季高校毕业生招聘考试参考试题(浓缩500题)含答案详解(模拟题)
- 2026年驻马店市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解
- 2026国家管网集团广西公司秋季高校毕业生招聘笔试参考题库(浓缩500题)带答案详解(综合题)
- 2026秋季国家管网集团华中公司高校毕业生招聘考试参考题库(浓缩500题)含答案详解(培优b卷)
- 2025国网四川省电力校园招聘(提前批)笔试模拟试题浓缩500题及一套参考答案详解
- 2025国网广西高校毕业生提前批招聘(约450人)笔试模拟试题浓缩500题及参考答案详解
- 2026年鸡西市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(综合卷)
- 2026国家管网集团校园招聘(河北招17人)考试参考试题(浓缩500题)及答案详解(夺冠系列)
- 《铁路轨道维护》课件-钢轨锯轨作业
- 给应届生面试技巧培训
- 黑龙江省齐齐哈尔市2023-2024学年八年级上学期语文期中试卷(含答案)
- 建筑工程临时用电管理台账表格
- 光影中国学习通超星期末考试答案章节答案2024年
- 期中复习卷-2024-2025学年统编版道德与法治九年级上册
- 外出进修后回院汇报
- 燃气设备维护保养手册
- 2024至2030年中国全氟醚橡胶(FFKM)行业深度分析及发展趋势研究预测报告
- 生活垃圾清运及保洁服务项目投标书
- 医院护理培训课件:《PICC导管的维护及指导》
评论
0/150
提交评论