




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、面向?qū)ο蟮奶卣饔心男┓矫?1)抽象:抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問題,而只是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面,一是過程抽象,二是數(shù)據(jù)抽象。(2)繼承:繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法。對象的一個(gè)新類可以從現(xiàn)有的類中派生,這個(gè)過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。(3)封裝:封裝是把過程和數(shù)據(jù)包圍起來,對數(shù)據(jù)的訪問只能通過已定義的界面。面向?qū)ο笥?jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個(gè)受保護(hù)的接口訪問其他對象。(4)多態(tài)性:多態(tài)性是指允許不同類的對象對同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢,很好的解決了應(yīng)用程序函數(shù)同名問題。2、String是最基本的數(shù)據(jù)類型嗎?基本數(shù)據(jù)類型包括byte、int、char、long、float、double、boolean和short。java.lang.String類是final類型的,因此不可以繼承這個(gè)類、不能修改這個(gè)類。為了提高效率節(jié)省空間,我們應(yīng)該用StringBuffer類3、int和Integer有什么區(qū)別Java提供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型)。Int是java的原始數(shù)據(jù)類型,Integer是java為int提供的封裝類。
Java為每個(gè)原始類型提供了封裝類。原始類型封裝類booleanBooleancharCharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDouble引用類型和原始類型的行為完全不同,并且它們具有不同的語義。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲,當(dāng)引用類型和原始類型用作某個(gè)類的實(shí)例數(shù)據(jù)時(shí)所指定的缺省值。對象引用實(shí)例變量的缺省值為null,而原始類型實(shí)例變量的缺省值與它們的類型有關(guān)。4、String和StringBuffer的區(qū)別JAVA平臺提供了兩個(gè)類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個(gè)字符的字符數(shù)據(jù)。這個(gè)String類提供了
數(shù)值不可改變的字符串。而這個(gè)StringBuffer類提供的字符串進(jìn)行修改。當(dāng)你知道字符數(shù)據(jù)要改變的時(shí)候你就可以使用StringBuffer
。典型地,你可以使用StringBuffers來動(dòng)態(tài)構(gòu)造字符數(shù)據(jù)。5、運(yùn)行時(shí)異常與一般異常有何異同?(1)基本概念異常表示程序運(yùn)行過程中可能出現(xiàn)的非正常狀態(tài),運(yùn)行時(shí)異常表示虛擬機(jī)的通常操作中可能遇到的異常,是一種常見運(yùn)行錯(cuò)誤。java編譯器要求方法必須聲明拋出可能發(fā)生的非運(yùn)行時(shí)異常,但是并不要求必須聲明拋出未被捕獲的運(yùn)行時(shí)異常。(2)運(yùn)行時(shí)異常與非運(yùn)行時(shí)異常有什么區(qū)別參考網(wǎng)址:/space.php?uid=122120&do=blog&id=12723(Java提供了兩類主要的異常:runtimeexception和checkedexception
。checked異常也就是我們經(jīng)常遇到的IO異常,以及SQL異常都是這種異常。對于這種異常,JAVA編譯器強(qiáng)制要求我們必需對出現(xiàn)的這些異常進(jìn)行catch。所以,面對這種異常不管我們是否愿意,只能自己去寫一大堆catch塊去處理可能的異常。但是另外一種異常:runtimeexception,也稱運(yùn)行時(shí)異常,我們可以不處理。當(dāng)出現(xiàn)這樣的異常時(shí),總是由虛擬機(jī)接管。比如:我們從來沒有人去處理過NullPointerException異常,它就是運(yùn)行時(shí)異常,并且這種異常還是最常見的異常之一。)(3)每個(gè)類型的異常的特點(diǎn)
1、Error體系
Error類體系描述了Java運(yùn)行系統(tǒng)中的內(nèi)部錯(cuò)誤以及資源耗盡的情形.應(yīng)用程序不應(yīng)該拋出這種類型的對象(一般是由虛擬機(jī)拋出).假如出現(xiàn)這種錯(cuò)誤,除了盡力使程序安全退出外,在其他方面是無能為力的.所以,在進(jìn)行程序設(shè)計(jì)時(shí),應(yīng)該更關(guān)注Exception體系.
2、Exception體系
Exception體系包括RuntimeException體系和其他非RuntimeException的體系
2.1RuntimeException(程序邏輯錯(cuò)誤)
RuntimeException體系包括錯(cuò)誤的類型轉(zhuǎn)換、數(shù)組越界訪問和試圖訪問空指針等等.處理RuntimeException的原則是:假如出現(xiàn)RuntimeException,那么一定是程序員的錯(cuò)誤.例如,可以通過檢查數(shù)組下標(biāo)和數(shù)組邊界來避免數(shù)組越界訪問異常.
2.2其他(IOException等等)
這類異常一般是外部錯(cuò)誤,例如試圖從文件尾后讀取數(shù)據(jù)等,這并不是程序本身的錯(cuò)誤,而是在應(yīng)用環(huán)境中出現(xiàn)的外部錯(cuò)誤.(4)異常的使用方法
參考網(wǎng)址:
/jiaocheng/2008-09/1452.htm1、聲明方法拋出異常
1.1語法:throws(略)
1.2為什么要聲明方法拋出異常?
方法是否拋出異常與方法返回值的類型一樣重要.假設(shè)方法拋出異常確沒有聲明該方法將拋出異常,那么客戶程序員可以調(diào)用這個(gè)方法而且不用編寫處理異常的代碼.那么,一旦出現(xiàn)異常,那么這個(gè)異常就沒有合適的異??刂破鱽斫鉀Q.
1.3為什么拋出的異常一定是已檢查異常?
RuntimeException與Error可以在任何代碼中產(chǎn)生,它們不需要由程序員顯示的拋出,一旦出現(xiàn)錯(cuò)誤,那么相應(yīng)的異常會(huì)被自動(dòng)拋出.而已檢查異常是由程序員拋出的,這分為兩種情況:客戶程序員調(diào)用會(huì)拋出異常的庫函數(shù)(庫函數(shù)的異常由庫程序員拋出);客戶程序員自己使用throw語句拋出異常.碰到Error,程序員一般是無能為力的;碰到RuntimeException,那么一定是程序存在邏輯錯(cuò)誤,要對程序進(jìn)行修改(相當(dāng)于調(diào)試的一種方法);只有已檢查異常才是程序員所關(guān)心的,程序應(yīng)該且僅應(yīng)該拋出或處理已檢查異常.6、說出Servlet的生命周期,并說出Servlet和CGI的區(qū)別。(1)總括:Servlet被服務(wù)器實(shí)例化后,容器運(yùn)行其init方法,請求到達(dá)時(shí)運(yùn)行其service方法,service方法自動(dòng)派遣運(yùn)行與請求對應(yīng)的doXXX方法(doGet,doPost)等,當(dāng)服務(wù)器決定將實(shí)例銷毀的時(shí)候調(diào)用其destroy方法。與cgi的區(qū)別在于servlet處于服務(wù)器進(jìn)程中,它通過多線程方式運(yùn)行其service方法,一個(gè)實(shí)例可以服務(wù)于多個(gè)請求,并且其實(shí)例一般不會(huì)銷毀,而CGI對每個(gè)請求都產(chǎn)生新的進(jìn)程,服務(wù)完成后就銷毀,所以效率上低于servlet。
服務(wù)方法
答:1)每當(dāng)服務(wù)接收到對Servlet的請求時(shí),服務(wù)器就會(huì)產(chǎn)生一個(gè)新線程,并調(diào)用Service。service方法檢查HTTP請求類型(GET、POST、PUT、DELETE等),并相應(yīng)地調(diào)用doGet、doPost、doPut、doDelete等。
2)doGet/doPost方法接收HttpServletRequest和HttpServletResponse對象。
3)99%的時(shí)間里,只需注意GET和/或POST請求;
4)沒有任何doHead方法。(2)sevlet學(xué)習(xí)摘要/sevlet-Learning-Summary.html
2.1什么是servlet:1)在web容器中運(yùn)行的服務(wù)器端JAVA程序,主要用于響應(yīng)HTTP請求。Servlet一般用于MVC中的控制器部分。2)模塊化的程序,運(yùn)行在服務(wù)器端,增強(qiáng)了請求/響應(yīng)導(dǎo)向服務(wù);
3)應(yīng)用示例:
a.訪問遠(yuǎn)端對象;
b.跟蹤大量信息;
c.多用戶協(xié)作
2.2JSP構(gòu)架模型
Model1:純jsp維護(hù)難,代碼可復(fù)用性差
Model2:jsp+javabean在jsp中使用usebean標(biāo)簽,代碼在jsp中本質(zhì)同Model1
Mvc:jsp+servlet+javabean
2.3
servlet中如何
1)
從HTML表單中獲得參數(shù)
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)
如何設(shè)置response的頭部信息
response.setHeader();
5)
如何設(shè)置響應(yīng)的contenttype
response.setContentType(“text/htmlcharset=utf-8”);
6)
如何獲得I/O流、text流、二進(jìn)制流
7)
如何從當(dāng)前的servlet重定向到其他的URL
response.sendRedirect(“url”)
RequstDispatcherrd=request.getRequstDispatcher(“url”)
Rd.forword(request,response);
8)
如何向客戶端寫cookie
Cookiecookie=newCookie(“object”,”jklj”);
Cookie.setMaxAge(時(shí)間);
Response.addCookie(cookie);
2.4
如何創(chuàng)建RequestDispatcher對象,如何將請求轉(zhuǎn)發(fā)給其它的web資源(包含其它的web資源),描述如何利用request來存狀態(tài),以及與其它保存狀態(tài)方法有什么區(qū)別
RequstDispatcherrd=request.getRequstDispatcher(“url”)
Rd.forword(request,response);
Request.setAttribute(“object”,”內(nèi)容”);
一旦產(chǎn)生響應(yīng)request的生命周期就結(jié)束了
2.5
描述servlet的生命周期,誰來控制servlet的生命周期,servlet生命周期在J2EE規(guī)范中是如何來定義的
服務(wù)器實(shí)例化一個(gè)servlet對象,容器運(yùn)行其init方法,請求到達(dá)時(shí)運(yùn)行其service方法,service方法根據(jù)請求的類型調(diào)用(doGet,doPost)方法,當(dāng)服務(wù)器決定將實(shí)例銷毀時(shí)調(diào)用其destory方法。
2.6
如何創(chuàng)建RequestDispatcher對象,如何將請求轉(zhuǎn)發(fā)給其它的web資源(包含其它的web資源),描述如何利用request來存狀態(tài),以及與其它保存狀態(tài)方法有什么區(qū)別
RequstDispatcherrd=request.getRequstDispatcher(“url”)
Rd.forword(request,response);
Request.setAttribute(“object”,”內(nèi)容”);
一旦產(chǎn)生響應(yīng)request的生命周期就結(jié)束了
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=getServletConfig();
2.9
如何獲得servletContext對象
servletContextsc=getservletContext();
18.
<html><body>
<ahref=”/servlet/HelloServlet”>POST</a>
</body></html>
調(diào)用servlet時(shí)采用了doPost、doGet、doForm、doHref中的哪個(gè)方法
doGet方法
2.10
doGet:
PrintWriterout=res.getWriter();
Out.println(“<html><body>Hello</body></html>”);
If(!res.isCommitted())判斷是否response提交了
If(reg.getParameter(”name”)==null)
{
res.sendError(HttpServletResponse.SC_UNAUTHORIZED);
}
2.11
說明如下的web的資源應(yīng)該放在web容器中的什么目錄下,靜態(tài)頁面JSP、servletclass、web.xml、Taglibraries、JARFile、javaclass以及需要保護(hù)的資源文件tomcat容器
web.xml,Taglibraries:\webapps\工程名\WEB-INF
servlet,javaclass:\webapps\工程名\WEB-INF\classes\
jar:\webapps\工程名\WEB-INF\lib\
2.12
如何打war包
將web項(xiàng)目壓縮成rar文件然后將后綴名改為war。
2.13
如何利用ServletContext對象獲得初始化參數(shù)
servletContextsc=getservletContext();
Strings=sc.getInitParameter(key);
2.14
如何在配置文件中配置ServletContext初始化參數(shù)
<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的區(qū)別,創(chuàng)建監(jiān)聽器類來監(jiān)聽每個(gè)scope的生命周期
生命周期不同。request產(chǎn)生響應(yīng)時(shí)生命周期結(jié)束,session在web.xml中設(shè)置生命周期時(shí)間、手動(dòng)清除web容器重啟生命周期結(jié)束。Webapplication容器重啟、手動(dòng)清除2.17start
26.
如何配置listener
27.
如何來寫以及配置filter
28.
創(chuàng)建一個(gè)request或response對象的包裝類
29.
寫一段servlet代碼,用來將對象存入session以及從session中取出該對象
HttpSessionsession=request.getSession();
session.setAttribute(key,value);
30.
描述用來訪問session對象的API
31.
說明session對象的生命周期
session在web.xml中設(shè)置生命周期時(shí)間、手動(dòng)清除web容器重啟生命周期結(jié)束
32.
寫一段代碼來響應(yīng)當(dāng)對象加入session時(shí)的事件
33.
描述web容器使用了什么機(jī)制來管理session
34.
如何使session失效
session在web.xml中設(shè)置生命周期時(shí)間、手動(dòng)清除web容器重啟生命周期結(jié)束
35.
描述將session與客戶端Birding的流程及方法
36.
當(dāng)client不支持cookie時(shí),如何使用session
37.
什么是Authentication(識別(用戶)):識別用戶是誰?什么是Authorization(授權(quán))對識別后的用戶給予什么樣的權(quán)限。數(shù)據(jù)的完整性:提交數(shù)據(jù),操作數(shù)據(jù),數(shù)據(jù)庫數(shù)據(jù)。數(shù)據(jù)的機(jī)密性:加密,HTTPS
38.
JSP中指令標(biāo)簽的形式
JSP中聲明標(biāo)簽的形式
JSP中代碼段標(biāo)簽的形式
JSP中動(dòng)作標(biāo)簽的形式
JSP中注釋標(biāo)簽的形式
JSP中的表達(dá)式標(biāo)簽的形式
39.
指令標(biāo)簽有哪些?
40.
action標(biāo)簽有哪些?
41.
page的屬性
42.
<%!inti;%>→成員變量
<%intj;%>→局部變量
<%=i++%><%=j++%>
43.
JSP中的內(nèi)置對象
44.
<%@includefile=””%>與<jsp:includepage=””/>不同
45.
jsp:useBean(id,scope,type,type,class)的使用end7、說出ArrayList,Vector,LinkedList的存儲性能和特性ArrayList和Vector都是使用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數(shù)組元素移動(dòng)等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實(shí)現(xiàn)存儲,按序號索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。8、EJB是基于哪些技術(shù)實(shí)現(xiàn)的?并說出SessionBean和EntityBean的區(qū)別,StatefulBean和StatelessBean的區(qū)別。EJBEJB是sun的服務(wù)器端組件模型,最大的用處是部署分布式應(yīng)用程序當(dāng)然,還有許多方式可以實(shí)現(xiàn)分布式應(yīng)用,類似微軟的.net技術(shù)。憑借java跨平臺的優(yōu)勢,用EJB技術(shù)部署的分布式系統(tǒng)可以不限于特定的平臺。EJB(EnterpriseJavaBean)是J2EE的一部分,定義了一個(gè)用于開發(fā)基于組件的企業(yè)多重應(yīng)用程序的標(biāo)準(zhǔn)。其特點(diǎn)包括網(wǎng)絡(luò)服務(wù)支持和核心開發(fā)工具(SDK)。在J2EE里,EnterpriseJavaBeans(EJB)稱為Java企業(yè)Bean,是Java的核心代碼,分別是會(huì)話Bean(SessionBean),實(shí)體Bean(EntityBean)和消息驅(qū)動(dòng)Bean(MessageDrivenBean)。EJB簡介1.SessionBean用于實(shí)現(xiàn)業(yè)務(wù)邏輯,它可以是有狀態(tài)的,也可以是無狀態(tài)的。每當(dāng)客戶端請求時(shí),容器就會(huì)選擇一個(gè)SessionBean來為客戶端服務(wù)。SessionBean可以直接訪問數(shù)據(jù)庫,但更多時(shí)候,它會(huì)通過EntityBean實(shí)現(xiàn)數(shù)據(jù)訪問。2.EntityBean是域模型對象,用于實(shí)現(xiàn)O/R映射,負(fù)責(zé)將數(shù)據(jù)庫中的表記錄映射為內(nèi)存中的Entity對象,事實(shí)上,創(chuàng)建一個(gè)EntityBean對象相當(dāng)于新建一條記錄,刪除一個(gè)EntityBean會(huì)同時(shí)從數(shù)據(jù)庫中刪除對應(yīng)記錄,修改一個(gè)EntityBean時(shí),容器會(huì)自動(dòng)將EntityBean的狀態(tài)和數(shù)據(jù)庫同步。3.MessageDrivenBean是EJB2.0中引入的新的企業(yè)Bean,它基于JMS消息,只能接收客戶端發(fā)送的JMS消息然后處理。MDB實(shí)際上是一個(gè)異步的無狀態(tài)SessionBean,客戶端調(diào)用MDB后無需等待,立刻返回,MDB將異步處理客戶請求。這適合于需要異步處理請求的場合,比如訂單處理,這樣就能避免客戶端長時(shí)間的等待一個(gè)方法調(diào)用直到返回結(jié)果。EJB實(shí)際上是SUN的J2EE中的一套規(guī)范,并且規(guī)定了一系列的API用來實(shí)現(xiàn)把EJB概念轉(zhuǎn)換成EJB產(chǎn)品.EJB是BEANS,BEANS是什么概念,那就是得有一個(gè)容納她,讓她可勁造騰的地方,就是得有容器.EJB必須生存在EJB容器中.這個(gè)容器可是功能強(qiáng)大之極!她首先要包裝你BEAN,EJB的客戶程序?qū)嶋H上從來就不和你編寫的EJB直接打交道,他們之間是通過HOME/REMOTE接口來發(fā)生關(guān)系的.它負(fù)責(zé)你的BEAN的所有的吃喝拉撒睡,比如BEAN的持續(xù)化,安全性,事務(wù)管理...一.什么是EJB?一個(gè)技術(shù)規(guī)范:EJB從技術(shù)上而言不是一種"產(chǎn)品"EJBEJB是一種標(biāo)準(zhǔn)描述了構(gòu)建應(yīng)用組件要解決的:可擴(kuò)展(Scalable)分布式(Distributed)事務(wù)處理(Transactional)數(shù)據(jù)存儲(Persistent)安全性(Secure)二.Sun對EJB的期望提供一個(gè)標(biāo)準(zhǔn)的分布的、基于
OO
的組件架構(gòu)屏蔽復(fù)雜的系統(tǒng)級功能需求Writeonce,runanywhere與非Java應(yīng)用之間的互操作能力兼容CORBA
標(biāo)準(zhǔn)三.為什么選擇EJB?EJB服務(wù)器完成"繁雜"的工作:應(yīng)用開發(fā)人員關(guān)注于業(yè)務(wù)邏輯的實(shí)現(xiàn)而不是底層的實(shí)現(xiàn)機(jī)制(類似于
4GL
語言設(shè)計(jì)的目標(biāo))支持事務(wù)處理多個(gè)業(yè)務(wù)操作同時(shí)成功,或全部失敗可以通過在代碼外的描述來定義事務(wù)處理級別EJB可擴(kuò)展性EJB可以根據(jù)您應(yīng)用的增長而擴(kuò)展EJB服務(wù)器往往還提供了負(fù)載均衡和安全性:由EJB服務(wù)器提供資源的訪問權(quán)限控制四.EJB架構(gòu)為了滿足架構(gòu)的目標(biāo),規(guī)范中描述了服務(wù)器(Server)容器(Container)類(Class)和實(shí)例(Instance)Home和Remote接口客戶端(Client)五.簡化的編程模型關(guān)注于業(yè)務(wù)邏輯實(shí)現(xiàn):EJB負(fù)責(zé)生命周期(lifecycle),數(shù)據(jù)存儲(persistence),事務(wù)處理語義(transactionalsemantic),安全(security),...通用的編程模型:各種服務(wù)的高層
APIJava是其編程語言EJB(業(yè)務(wù)邏輯代碼)表示了與特定商業(yè)領(lǐng)域(例如銀行、零售等行業(yè))相適應(yīng)的邏輯。它由運(yùn)行在業(yè)務(wù)邏輯層的enterprisebean處理。一個(gè)enterprisebean可以從客戶端接受數(shù)據(jù),對它進(jìn)行處理,并將其發(fā)送到企業(yè)信息系統(tǒng)層以作存儲;同時(shí)它也可以從存儲器獲取數(shù)據(jù),處理后將其發(fā)送到客戶端應(yīng)用程序。有三種類型的enterprisebeans:sessionbeans、entitybeans和message-drivenbeans。Sessionbean描述了與客戶端的一個(gè)短暫的會(huì)話。當(dāng)客戶端的執(zhí)行完成后,sessionbean和它的數(shù)據(jù)都將消失;與之相對應(yīng)的是一個(gè)entitybean描述了存儲在數(shù)據(jù)庫表中的一行持久穩(wěn)固的數(shù)據(jù),如果客戶端終止或者服務(wù)結(jié)束,底層的服務(wù)會(huì)負(fù)責(zé)entitybean數(shù)據(jù)的存儲。Message-drivenbean結(jié)合了sessionbean和Java信息服務(wù)(JMS)信息監(jiān)聽者的功能,它允許一個(gè)商業(yè)組件異步地接受JMS消息。其它EJB包括SessionBean、EntityBean、MessageDrivenBean,基于JNDI、RMI、JAT等技術(shù)實(shí)現(xiàn)。SessionBean在J2EE應(yīng)用程序中被用來完成一些服務(wù)器端的業(yè)務(wù)操作,例如訪問數(shù)據(jù)庫、調(diào)用其他EJB組件。EntityBean被用來代表應(yīng)用系統(tǒng)中用到的數(shù)據(jù)。對于客戶機(jī),SessionBean是一種非持久性對象,它實(shí)現(xiàn)某些在服務(wù)器上運(yùn)行的業(yè)務(wù)邏輯。對于客戶機(jī),EntityBean是一種持久性對象,它代表一個(gè)存儲在持久性存儲器中的實(shí)體的對象視圖,或是一個(gè)由現(xiàn)有企業(yè)應(yīng)用程序?qū)崿F(xiàn)的實(shí)體。SessionBean還可以再細(xì)分為StatefulSessionBean與StatelessSessionBean,這兩種的SessionBean都可以將系統(tǒng)邏輯放在method之中執(zhí)行,不同的是StatefulSessionBean可以記錄呼叫者的狀態(tài),因此通常來說,一個(gè)使用者會(huì)有一個(gè)相對應(yīng)的StatefulSessionBean的實(shí)體。StatelessSessionBean雖然也是邏輯組件,但是他卻不負(fù)責(zé)記錄使用者狀態(tài),也就是說當(dāng)使用者呼叫StatelessSessionBean的時(shí)候,EJBContainer并不會(huì)找尋特定的StatelessSessionBean的實(shí)體來執(zhí)行這個(gè)method。換言之,很可能數(shù)個(gè)使用者在執(zhí)行某個(gè)StatelessSessionBean的methods時(shí),會(huì)是同一個(gè)Bean的Instance在執(zhí)行。從內(nèi)存方面來看,StatefulSessionBean與StatelessSessionBean比較,StatefulSessionBean會(huì)消耗J2EEServer較多的內(nèi)存,然而StatefulSessionBean的優(yōu)勢卻在于他可以維持使用者的狀態(tài)。9、Collection和Collections的區(qū)別。Collection是集合類的上級接口,繼承與他的接口主要有Set和List.Collections是針對集合類的一個(gè)幫助類,他提供一系列靜態(tài)方法實(shí)現(xiàn)對各種集合的搜索、排序、線程安全化等操作。10、&和&&的區(qū)別。&是位運(yùn)算符,表示按位與運(yùn)算,&&是邏輯運(yùn)算符,表示邏輯與(and)。11、HashMap和Hashtable的區(qū)別。HashMap是Hashtable的輕量級實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable。HashMap允許將null作為一個(gè)entry的key或者value,而Hashtable不允許。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因?yàn)閏ontains方法容易讓人引起誤解。Hashtable繼承自Dictionary類,而HashMap是Java1.2引進(jìn)的Mapinterface的一個(gè)實(shí)現(xiàn)。最大的不同是,Hashtable的方法是Synchronize(同步)的,而HashMap不是,在多個(gè)線程訪問Hashtable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap就必須為之提供外同步。Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會(huì)有很大的差異。12、final,finally,finalize的區(qū)別。一、概述final用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。finalize是Object類的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會(huì)調(diào)用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時(shí)的其他資源回收,例如關(guān)閉文件等。/news/show/194.html二、finalize
C++
支持局部對象(基于棧)和全局對象(基于堆)。棧對象由編譯器檢測釋放,堆對象由程序員來釋放。在許多方面,Java
類似于
C++。Java
的語法非常類似于
C++,Java
有類、方法和數(shù)據(jù)成員;Java
的類有構(gòu)造函數(shù);
Java
有異常處理。
但是,如果你使用過
C++
會(huì)發(fā)現(xiàn)
Java
也丟掉一些可能是你熟悉的特性。這些特性之一就是析構(gòu)函數(shù)。取代使用析構(gòu)函數(shù),Java
支持finalize()
方法。
在本文中,我們將描述
finalize()
與
C++
析構(gòu)函數(shù)的區(qū)別。另外,我們將創(chuàng)建一個(gè)簡單的
Applet
來演示
finalize()
是如何工作的。
最終的界限
與
Java
不同,C++
支持局部對象(基于棧)和全局對象(基于堆)。因?yàn)檫@一雙重支持,C++
也提供了自動(dòng)構(gòu)造和析構(gòu),這導(dǎo)致了對構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用,(對于堆對象)就是內(nèi)存的分配和釋放。
在
Java
中,所有對象都駐留在堆內(nèi)存,因此局部對象就不存在。結(jié)果,Java
的設(shè)計(jì)者覺得不需要析構(gòu)函數(shù)(象
C++
中所實(shí)現(xiàn)的)。
取而代之,Java
定義了一個(gè)特殊的方法叫做finalize()
,它提供了
C++
析構(gòu)函數(shù)的一些功能。但是,finalize()
并不完全與
C++
的析構(gòu)函數(shù)一樣,并可以假設(shè)它會(huì)導(dǎo)致一系列的問題。finalize()
方法作用的一個(gè)關(guān)鍵元素是
Java
的垃圾回收器。
垃圾回收器
在
C/C++、Pascal和其他幾種多種用途的編程語言中,開發(fā)者有責(zé)任在內(nèi)存管理上發(fā)揮積極的作用。例如,如果你為一個(gè)對象或數(shù)據(jù)結(jié)構(gòu)分配了內(nèi)存,那么當(dāng)你不再使用它時(shí)必須釋放掉該內(nèi)存。
在
Java
中,當(dāng)你創(chuàng)建一個(gè)對象時(shí),Java
虛擬機(jī)(JVM)為該對象分配內(nèi)存、調(diào)用構(gòu)造函數(shù)并開始跟蹤你使用的對象。當(dāng)你停止使用一個(gè)對象(就是說,當(dāng)沒有對該對象有效的引用時(shí)),JVM
通過垃圾回收器將該對象標(biāo)記為釋放狀態(tài)。
當(dāng)垃圾回收器將要釋放一個(gè)對象的內(nèi)存時(shí),它調(diào)用該對象的finalize()
方法(如果該對象定義了此方法)。垃圾回收器以獨(dú)立的低優(yōu)先級的方式運(yùn)行,只有當(dāng)其他線程掛起等待該內(nèi)存釋放的情況出現(xiàn)時(shí),它才開始運(yùn)行釋放對象的內(nèi)存。(事實(shí)上,你可以調(diào)用System.gc()
方法強(qiáng)制垃圾回收器來釋放這些對象的內(nèi)存。)
在以上的描述中,有一些重要的事情需要注意。首先,只有當(dāng)垃圾回收器釋放該對象的內(nèi)存時(shí),才會(huì)執(zhí)行finalize()。如果在
Applet
或應(yīng)用程序退出之前垃圾回收器沒有釋放內(nèi)存,垃圾回收器將不會(huì)調(diào)用finalize()。
其次,除非垃圾回收器認(rèn)為你的
Applet
或應(yīng)用程序需要額外的內(nèi)存,否則它不會(huì)試圖釋放不再使用的對象的內(nèi)存。換句話說,這是完全可能的:一個(gè)
Applet
給少量的對象分配內(nèi)存,沒有造成嚴(yán)重的內(nèi)存需求,于是垃圾回收器沒有釋放這些對象的內(nèi)存就退出了。
顯然,如果你為某個(gè)對象定義了finalize()
方法,JVM
可能不會(huì)調(diào)用它,因?yàn)槔厥掌鞑辉尫胚^那些對象的內(nèi)存。調(diào)用System.gc()
也不會(huì)起作用,因?yàn)樗鼉H僅是給
JVM
一個(gè)建議而不是命令。
finalize()
有什么優(yōu)點(diǎn)呢?
如果finalize()
不是析構(gòu)函數(shù),JVM
不一定會(huì)調(diào)用它,你可能會(huì)疑惑它是否在任何情況下都有好處。事實(shí)上,在
Java1.0
中它并沒有太多的優(yōu)點(diǎn)。
根據(jù)
Java
文檔,finalize()
是一個(gè)用于釋放非
Java
資源的方法。但是,JVM
有很大的可能不調(diào)用對象的finalize()
方法,因此很難證明使用該方法釋放資源是有效的。
Java1.1
通過提供一個(gè)System.runFinalizersOnExit()
方法部分地解決了這個(gè)問題。(不要將這個(gè)方法與
Java1.0
中的System.runFinalizations()
方法相混淆。)不象System.gc()
方法那樣,System.runFinalizersOnExit()
方法并不立即試圖啟動(dòng)垃圾回收器。而是當(dāng)應(yīng)用程序或
Applet
退出時(shí),它調(diào)用每個(gè)對象的finalize()
方法。
正如你可能猜測的那樣,通過調(diào)用System.runFinalizersOnExit()
方法強(qiáng)制垃圾回收器清除所有獨(dú)立對象的內(nèi)存,當(dāng)清除代碼執(zhí)行時(shí)可能會(huì)引起明顯的延遲。現(xiàn)在建立一個(gè)示例
Applet
來演示
Java
垃圾回收器和finalize()
方法是如何相互作用的。
回收垃圾
通過使用JavaAppletWizard
創(chuàng)建一個(gè)新的
Applet
開始。當(dāng)提示這樣做時(shí),輸入
final_things
作為
Applet
名,并選擇不要生成源文件注釋。
接下來,在JavaAppletWizard
進(jìn)行第三步,不要選擇多線程選項(xiàng)。在第五步之前,根據(jù)需要修改
Applet
的描述。
當(dāng)你單擊Finish
后,AppletWizard
將生成一個(gè)新的工作空間,并為該項(xiàng)目創(chuàng)建缺省的
Java
文件。從列表
A
中選擇適當(dāng)?shù)拇a輸入(我們已經(jīng)突出顯示了你需要輸入的代碼)。
當(dāng)你完成代碼的輸入后,配置Internet
瀏覽器將System.out
的輸出信息寫到Javalog.txt
文件中。(在IE
選項(xiàng)對話框的高級頁面中選擇起用
JavaLogging。)編譯并運(yùn)行該
Applet。然后,等待
Applet
運(yùn)行(你將在狀態(tài)欄中看到
Applet
已啟動(dòng)的信息),退出瀏覽器,并打開Javalog.txt
文件。你將會(huì)發(fā)現(xiàn)類似于下列行的信息:
1000thingsconstructed
0thingsfinalized
正如你能夠看到的那樣,建立了1,000個(gè)對象仍然沒有迫使垃圾回收器開始回收空間,即使在
Applet
退出時(shí)也沒有對象被使用。
現(xiàn)在,刪除在stop()
方法第一行中的注釋符以起用System.gc()
方法。再次編譯并運(yùn)行該
Applet
,等待
Applet
完成運(yùn)行,并退出瀏覽器。當(dāng)你再次打開Javalog.txt文件,你將看到下列行:
1000thingsconstructed
963thingsfinalized
這次,垃圾回收器認(rèn)為大多數(shù)對象未被使用,并將它們回收。按順序,當(dāng)垃圾回收器開始釋放這些對象的內(nèi)存時(shí),JVM
調(diào)用它們的finalize()
方法。
繼承finalize()?
順便,如果你在類中定義了finalize()
,它將不會(huì)自動(dòng)調(diào)用基類中的方法。在我們討論了finalize()
與
C++
的析構(gòu)函數(shù)的不同點(diǎn)后,對這個(gè)結(jié)論不會(huì)驚訝,因?yàn)闉槟硞€(gè)類定制的清除代碼另一個(gè)類不一定會(huì)需要。
如果你決定要通過派生一個(gè)類的finalize()
方法來調(diào)用基類中的finalize()
方法,你可以象其他繼承方法一樣處理。
protectedvoidfinalize()
{
super.finalize();
//otherfinalizationcode...
}
除了允許你控制是否執(zhí)行清除操作外,這個(gè)技術(shù)還使你可以控制當(dāng)前類的finalize()方法何時(shí)執(zhí)行。
結(jié)論
然而有益的是,Java
的自動(dòng)垃圾回收器不會(huì)失去平衡。作為便利的代價(jià),你不得不放棄對系統(tǒng)資源釋放的控制。不象
C++
中的析構(gòu)函數(shù),JavaApplet
不會(huì)自動(dòng)執(zhí)行你的類中的finalize()
方法。事實(shí)上,如果你正在使用
Java1.0,即使你試圖強(qiáng)制它調(diào)用finalize()
方法,也不能確保將調(diào)用它。
因此,你不應(yīng)當(dāng)依靠finalize()
來執(zhí)行你的
Applet
和應(yīng)用程序的資源清除工作。取而代之,你應(yīng)當(dāng)明確的清除那些資源或創(chuàng)建一個(gè)try...finally
塊(或類似的機(jī)制)來實(shí)現(xiàn)。(如reader對象資源的釋放)13、sleep()和wait()有什么區(qū)別?sleep是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時(shí)間,把執(zhí)行機(jī)會(huì)給其他線程,但是監(jiān)控狀態(tài)依然保持,到時(shí)后會(huì)自動(dòng)恢復(fù)。調(diào)用sleep不會(huì)釋放對象鎖。wait是Object類的方法,對此對象調(diào)用wait方法導(dǎo)致本線程放棄對象鎖,進(jìn)入等待此對象的等待鎖定池,只有針對此對象發(fā)出notify方法(或notifyAll)后本線程才進(jìn)入對象鎖定池準(zhǔn)備獲得對象鎖進(jìn)入運(yùn)行狀態(tài)。14、Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫(Overriding)。子類的對象使用這個(gè)方法時(shí),將調(diào)用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個(gè)類中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。15、error和exception有什么區(qū)別?error表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問題。比如說內(nèi)存溢出。不可能指望程序能處理這樣的情況。exception表示一種設(shè)計(jì)或?qū)崿F(xiàn)問題。也就是說,它表示如果程序運(yùn)行正常,從不會(huì)發(fā)生的情況。16、同步和異步有何異同,在什么情況下分別使用他們?舉例說明。如果數(shù)據(jù)將在線程間共享。例如正在寫的數(shù)據(jù)以后可能被另一個(gè)線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個(gè)線程寫過了,那么這些數(shù)據(jù)就是共享數(shù)據(jù),必須進(jìn)行同步存取。當(dāng)應(yīng)用程序在對象上調(diào)用了一個(gè)需要花費(fèi)很長時(shí)間來執(zhí)行的方法,并且不希望讓程序等待方法的返回時(shí),就應(yīng)該使用異步編程,在很多情況下采用異步途徑往往更有效率。17、abstractclass和interface有什么區(qū)別?聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽象類(abstractclass),它用于要?jiǎng)?chuàng)建一個(gè)體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實(shí)現(xiàn)該類的情況。不能創(chuàng)建abstract類的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類型是一個(gè)抽象類,并讓它指向具體子類的一個(gè)實(shí)例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract類的子類為它們父類中的所有抽象方法提供實(shí)現(xiàn),否則它們也是抽象類為。取而代之,在子類中實(shí)現(xiàn)該方法。知道其行為的其它類可以在類中實(shí)現(xiàn)這些方法。接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個(gè)有程序體。接口只可以定義staticfinal成員變量。接口的實(shí)現(xiàn)與子類相似,除了該實(shí)現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實(shí)現(xiàn)了該接口的類的任何對象上調(diào)用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instanceof運(yùn)算符可以用來決定某對象的類是否實(shí)現(xiàn)了接口。18、heap和stack有什么區(qū)別。/view/93201.htm棧是一種線形集合,其添加和刪除元素的操作應(yīng)在同一端完成。棧按照后進(jìn)先出的方式進(jìn)行處理。堆是棧的一個(gè)組成元素19、forward和redirect的區(qū)別forward是服務(wù)器請求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容是從哪兒來的,所以它的地址欄中還是原來的地址。redirect就是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請求那個(gè)地址,一般來說瀏覽器會(huì)用剛才請求的所有參數(shù)重新請求,所以session,request參數(shù)都可以獲取。20、EJB與JAVABEAN的區(qū)別?JavaBean是可復(fù)用的組件,對JavaBean并沒有嚴(yán)格的規(guī)范,理論上講,任何一個(gè)Java類都可以是一個(gè)Bean。但通常情況下,由于JavaBean是被容器所創(chuàng)建(如Tomcat)的,所以JavaBean應(yīng)具有一個(gè)無參的構(gòu)造器,另外,通常JavaBean還要實(shí)現(xiàn)Serializable接口用于實(shí)現(xiàn)Bean的持久性。JavaBean實(shí)際上相當(dāng)于微軟COM模型中的本地進(jìn)程內(nèi)COM組件,它是不能被跨進(jìn)程訪問的。EnterpriseJavaBean相當(dāng)于DCOM,即分布式組件。它是基于Java的遠(yuǎn)程方法調(diào)用(RMI)技術(shù)的,所以EJB可以被遠(yuǎn)程訪問(跨進(jìn)程、跨計(jì)算機(jī))。但EJB必須被布署在諸如Webspere、WebLogic這樣的容器中,EJB客戶從不直接訪問真正的EJB組件,而是通過其容器訪問。EJB容器是EJB組件的代理,EJB組件由容器所創(chuàng)建和管理??蛻敉ㄟ^容器來訪問真正的EJB組件。21、StaticNestedClass和InnerClass的不同。StaticNestedClass是被聲明為靜態(tài)(static)的內(nèi)部類,它可以不依賴于外部類實(shí)例被實(shí)例化。而通常的內(nèi)部類需要在外部類實(shí)例化后才能實(shí)例化。定義——InnerClass內(nèi)部類是定義在其他類內(nèi)部的類。它幾乎可以處于類內(nèi)部任何位置,可以與實(shí)例變量處于同一級,或處于方法之內(nèi),甚至是一個(gè)表達(dá)式的一部分!內(nèi)部類是JAVA語言的主要附加部分。優(yōu)點(diǎn)——InnerClass⒈內(nèi)部類對象可以訪問創(chuàng)建它的對象的實(shí)現(xiàn),包括私有數(shù)據(jù);⒉內(nèi)部類不為同一包的其他類所見,具有很好的封裝性;⒊使用內(nèi)部類可以很方便的編寫事件驅(qū)動(dòng)程序;⒋匿名內(nèi)部類可以方便的定義運(yùn)行時(shí)回調(diào);區(qū)別/navyzh/archive/2009/02/26/3938447.aspxNestedClass(一般是C++的說法),InnerClass(一般是JAVA的說法)。Java內(nèi)部類與C++嵌套類最大的不同就在于是否有指向外部的引用上。Nestedclass!=innerclass,innerclass是一種特殊的Nestedclass。對內(nèi)部類的限制:不能聲明static初始化操作22、JSP中動(dòng)態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別?動(dòng)態(tài)INCLUDE用jsp:include動(dòng)作實(shí)現(xiàn)<!--includefile="included.htm"-->23、什么時(shí)候用assert。assertion(斷言)在軟件開發(fā)中是一種常用的調(diào)試方式,很多開發(fā)語言中都支持這種機(jī)制。在實(shí)現(xiàn)中,assertion就是在程序中的一條語句,它對一個(gè)boolean表達(dá)式進(jìn)行檢查,一個(gè)正確程序必須保證這個(gè)boolean表達(dá)式的值為true;如果該值為false,說明程序已經(jīng)處于不正確的狀態(tài)下,系統(tǒng)將給出警告或退出。一般來說,assertion用于保證程序最基本、關(guān)鍵的正確性。assertion檢查通常在開發(fā)和測試時(shí)開啟。為了提高性能,在軟件發(fā)布后,assertion檢查通常是關(guān)閉的。J2SE1.4在語言上提供了一個(gè)新特性,就是assertion(斷言)功能,它是該版本在Java語言方面最大的革新。在軟件開發(fā)中,assertion是一種經(jīng)典的調(diào)試、測試方式。/developerworks/cn/java/l-javaassertion/24、GC是什么?為什么要有GC?GC是垃圾收集的意思(GabageCollection),內(nèi)存處理是編程人員容易出現(xiàn)問題的地方,忘記或者錯(cuò)誤的內(nèi)存回收會(huì)導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java提供的GC功能可以自動(dòng)監(jiān)測對象是否超過作用域從而達(dá)到自動(dòng)回收內(nèi)存的目的,Java語言沒有提供釋放已分配內(nèi)存的顯示操作方法。25、shorts1=1;s1=s1+1;有什么錯(cuò)?shorts1=1;s1+=1;有什么錯(cuò)?shorts1=1;s1=s1+1;(s1+1運(yùn)算結(jié)果是int型,需要強(qiáng)制轉(zhuǎn)換類型)shorts1=1;s1+=1;(可以正確編譯)26、Math.round(11.5)等於多少?Math.round(-11.5)等於多少?Math.round(11.5)==12Math.round(-11.5)==-11round方法返回與參數(shù)最接近的長整數(shù),參數(shù)加1/2后求其floor.27、Strings=newString("xyz");創(chuàng)建了幾個(gè)StringObject?一、概括兩個(gè)(一個(gè)是“xyx”,一個(gè)是指向“xyx”的引用對象s)二、Java棧與堆
(詳解string實(shí)例的創(chuàng)建)
/u/20081123/12/f70f1632-24be-4caa-bc20-29cf8267afab.html測試用例1:存在棧中的數(shù)據(jù)可以共享Stringstr1="abc";
//開辟一個(gè)存放字面值為"abc"的地址,接著創(chuàng)建一個(gè)新的String類的對象o,并將o的字符串值指向這個(gè)地址,而且在棧中這個(gè)地址旁邊記下這個(gè)引用的對象o.創(chuàng)建一個(gè)引用str1指向?qū)ο髈的地址Stringstr2="abc";
//創(chuàng)建另一個(gè)引用str2指向?qū)ο髈的地址
str1="bcd";
//當(dāng)str1改完其值后,創(chuàng)建新的對象指向"bcd"的地址,并將引用str1指向新對象的地址
Stringstr3=str1;
//未創(chuàng)建新對象,str3指向str1相同的地址
System.out.println(str3);//bcd
Stringstr4="bcd";
//當(dāng)str1改完其值后,再創(chuàng)建一個(gè)String的引用str4,并指向因str1修改值而創(chuàng)建的新的對象。
System.out.println(str1==str4);//true
測試用例2:堆中創(chuàng)建string實(shí)例只要是用new()來新建對象的,都會(huì)在堆中創(chuàng)建,而且其字符串是單獨(dú)存值的Strings1=newString("abc");Strings2=newString("abc");System.out.println(s1+","+s2);//abc,abcSystem.out.println(s1.equals(s2));//trueSystem.out.println(s1==s2);//falseStrings3=s1;//將引用s1的值賦給s3,指向同一個(gè)對象地址System.out.println(s1==s3);//trues1="cde";Strings4="cde";System.out.println(s1==s4);//true28、設(shè)計(jì)4個(gè)線程,其中兩個(gè)線程每次對j增加1,另外兩個(gè)線程對j每次減少1。寫出程序。以下程序使用內(nèi)部類實(shí)現(xiàn)線程,對j增減的時(shí)候沒有考慮順序問題。publicclassThreadTest1{privateintj;publicstaticvoidmain(Stringargs[]){ThreadTest1tt=newThreadTest1();Incinc=tt.newInc();Decdec=tt.newDec();for(inti=0;i<2;i++){Threadt=newThread(inc);t.start();t=newThread(dec);t.start();}}privatesynchronizedvoidinc(){j++;System.out.println(Thread.currentThread().getName()+"-inc:"+j);}privatesynchronizedvoiddec(){j--;System.out.println(Thread.currentThread().getName()+"-dec:"+j);}classIncimplementsRunnable{publicvoidrun(){for(inti=0;i<100;i++){inc();}}}classDecimplementsRunnable{publicvoidrun(){for(inti=0;i<100;i++){dec();}}}}29、Java有沒有g(shù)oto?java中的保留字,現(xiàn)在沒有在java中使用。Java不提供goto語句,它雖然指定goto作為關(guān)鍵字,但不支持它的使用,使程序簡潔易讀。在Java中g(shù)oto語句被完全拋棄了,與此同時(shí),Java又?jǐn)U大了break語句和continue語句的功能,通過使用break和continue,程序流程被允許在多層循環(huán)中跳轉(zhuǎn)。30、啟動(dòng)一個(gè)線程是用run()還是start()?啟動(dòng)一個(gè)線程是調(diào)用start()方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。這并不意味著線程就會(huì)立即運(yùn)行。run()方法可以產(chǎn)生必須退出的標(biāo)志來停止一個(gè)線程。通過start調(diào)用run方法啟用一個(gè)線程31、EJB包括(SessionBean,EntityBean)說出他們的生命周期,及如何管理事務(wù)的?SessionBean:StatelessSessionBean的生命周期是由容器決定的,當(dāng)客戶機(jī)發(fā)出請求要建立一個(gè)Bean的實(shí)例時(shí),EJB容器不一定要?jiǎng)?chuàng)建一個(gè)新的Bean的實(shí)例供客戶機(jī)調(diào)用,而是隨便找一個(gè)現(xiàn)有的實(shí)例提供給客戶機(jī)。當(dāng)客戶機(jī)第一次調(diào)用一個(gè)StatefulSessionBean時(shí),容器必須立即在服務(wù)器中創(chuàng)建一個(gè)新的Bean實(shí)例,并關(guān)聯(lián)到客戶機(jī)上,以后此客戶機(jī)調(diào)用StatefulSessionBean的方法時(shí)容器會(huì)把調(diào)用分派到與此客戶機(jī)相關(guān)聯(lián)的Bean實(shí)例。EntityBean:EntityBeans能存活相對較長的時(shí)間,并且狀態(tài)是持續(xù)的。只要數(shù)據(jù)庫中的數(shù)據(jù)存在,Entitybeans就一直存活。而不是按照應(yīng)用程序或者服務(wù)進(jìn)程來說的。即使EJB容器崩潰了,Entitybeans也是存活的。EntityBeans生命周期能夠被容器或者Beans自己管理。EJB通過以下技術(shù)管理實(shí)務(wù):對象管理組織(OMG)的對象實(shí)務(wù)服務(wù)(OTS),SunMicrosystems的TransactionService(JTS)、JavaTransactionAPI(JTA),開發(fā)組(X/Open)的XA接口。32、應(yīng)用服務(wù)器有那些?BEAWebLogicServer,IBMWebSphereApplicationServer,Oracle9iApplicationServer,jBoss,Tomcat33、給我一個(gè)你最常見到的runtimeexception。ArithmeticException,ArrayStoreException,BufferOverflowException,BufferUnderflowException,CannotRedoException,CannotUndoException,ClassCastException,CMMException,ConcurrentModificationException,DOMException,EmptyStackException,IllegalArgumentException,IllegalMonitorStateException,IllegalPathStateException,IllegalStateException,ImagingOpException,IndexOutOfBoundsException,MissingResourceException,NegativeArraySizeException,NoSuchElementException,NullPointerException,ProfileDataException,ProviderException,RasterFormatException,SecurityException,SystemException,UndeclaredThrowableException,UnmodifiableSetException,UnsupportedOperationException34、接口是否可繼承接口?抽象類是否可實(shí)現(xiàn)(implements)接口?抽象類是否可繼承實(shí)體類(concreteclass)?接口可以繼承接口。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類是否可繼承實(shí)體類,但前提是實(shí)體類必須有明確的構(gòu)造函數(shù)。只要有抽象方法就是抽象類,所以抽象類可以實(shí)現(xiàn)接口的方法而有其他抽象方法35、List,Set,Map是否繼承自Collection接口?List,Set是,Map不是Collection是任何對象組,元素各自獨(dú)立,通常擁有相同的套用規(guī)則。SetList由它派生。/art/200909/149543.htm介紹集合類(collections)一、Collection和Collections的區(qū)別。Collections是個(gè)java.util下的類,它包含有各種有關(guān)java集合操作的靜態(tài)方法。
Collection是個(gè)java.util下的接口,它是各種java集合結(jié)構(gòu)的父接口二、set無重復(fù)、無序HashSet-基于散列表的集,加進(jìn)散列表的元素要實(shí)現(xiàn)hashCode()方法以判斷是否為同一個(gè)對象,無順序、無重復(fù)。三、List有重復(fù)、有序ArrayList(數(shù)組表)-有重復(fù)、有順序。類似于Vector,都用于縮放數(shù)組維護(hù)集合。四、Map用于關(guān)鍵字/數(shù)值對,較高的存取性能。不允許重復(fù)的key,但允許重復(fù)的Value。36、說出數(shù)據(jù)連接池的工作機(jī)制是什么?J2EE服務(wù)器啟動(dòng)時(shí)會(huì)建立一定數(shù)量的池連接,并一直維持不少于此數(shù)目的池連接??蛻舳顺绦蛐枰B接時(shí),池驅(qū)動(dòng)程序會(huì)返回一個(gè)未使用的池連接并將其表記為忙。如果當(dāng)前沒有空閑連接,池驅(qū)動(dòng)程序就新建一定數(shù)量的連接,新建連接的數(shù)量由配置參數(shù)決定。當(dāng)使用的池連接調(diào)用完成后,池驅(qū)動(dòng)程序?qū)⒋诉B接表記為空閑,其他調(diào)用就可以使用這個(gè)連接。數(shù)據(jù)連接池源理與實(shí)現(xiàn)/blog/616100在Java語言中,JDBC(JavaDataBaseConnection)是應(yīng)用程序與數(shù)據(jù)庫溝通的橋梁,
一般來說,Java應(yīng)用程序訪問數(shù)據(jù)庫的過程是:
①裝載數(shù)據(jù)庫驅(qū)動(dòng)程序;
②通過JDBC建立數(shù)據(jù)庫連接;
③訪問數(shù)據(jù)庫,執(zhí)行SQL語句;
④斷開數(shù)據(jù)庫連接。
37、abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized?都不能abstract需要重載,static為類方法,沒有重載一說
abstract為沒有實(shí)現(xiàn)的方法,native為本機(jī)實(shí)現(xiàn)的方法,自相矛盾
(native是方法修飾符。Native方法是由另外一種語言(如c/c++,F(xiàn)ORTRAN,匯編)實(shí)現(xiàn)的本地方法。因?yàn)樵谕獠繉?shí)現(xiàn)了方法,所以在java代碼中,就不需要聲明了,有點(diǎn)類似于借口方法。Native可以和其他一些修飾符連用,但是abstract方法和Interface方法不能用native來修飾。)
abstract方法沒有實(shí)現(xiàn),也不可能實(shí)際調(diào)用抽象方法,沒有必要synchronized修飾,當(dāng)然子類可以根據(jù)需要同步該方法.Java本地接口(JavaNativeInterface(JNI))允許運(yùn)行在Java虛擬機(jī)(JavaVirtualMachine(JVM))上的代碼調(diào)用本地程序和類庫,或者被它們調(diào)用,這些程序和類庫可以是其它語言編寫的,比如C、C++或者匯編語言。當(dāng)一個(gè)程序無法完全使用Java編寫時(shí),開發(fā)者可以通過JNI來編寫本地方法,比如標(biāo)準(zhǔn)Java類庫并不支持的依賴于平臺的特色或者程序庫。JNI還可以用于修改現(xiàn)有的使用其它語言編寫的程序,使它們可以通過Java編寫的程序來訪問。38、數(shù)組有沒有l(wèi)ength()這個(gè)方法?String有沒有l(wèi)ength()這個(gè)方法?數(shù)組沒有l(wèi)ength()這個(gè)方法,有l(wèi)ength的屬性。String有有l(wèi)ength()這個(gè)方法。39、Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢?是用==還是equals()?它們有何區(qū)別?Set里的元素是不能重復(fù)的,那么用iterator()方法來區(qū)分重復(fù)與否。equals()是判讀兩個(gè)Set是否相等。equals()和==方法決定引用值是否指向同一對象。equals()在類中被覆蓋,為的是當(dāng)兩個(gè)分離的對象的內(nèi)容和類型相配的話,返回真值。40、構(gòu)造器Constructor是否可被override?構(gòu)造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。41、是否可以繼承String類?String類是final類故不可以繼承。關(guān)于FINAL
1,被定義成FINAL的類不能派生子類
2,被定義成FINAL的方法不能夠被重寫//注意!是重寫,不是重載
3,被聲明為FINAL的成員變量一經(jīng)賦值就不能改變.42、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?switch(expr1)中,expr1是一個(gè)整數(shù)表達(dá)式。因此傳遞給switch和case語句的參數(shù)應(yīng)該是int、short、char或者byte。
long,string都不能作用于swtich。43、try{}里有一個(gè)return語句,那么緊跟在這個(gè)try后的finally{}里的code會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后?會(huì)執(zhí)行,在return前執(zhí)行。44、編程題:用最有效率的方法算出2乘以8等於幾?2<<3(有C背景的程序員特別喜歡問這種問題)之所以問這樣問題的人,他們只是基于這樣一個(gè)事實(shí),整數(shù)乘法或整數(shù)除法所需要的時(shí)鐘周期遠(yuǎn)遠(yuǎn)大于移位操作所需的時(shí)鐘周期,下面列出這個(gè)指令的基本執(zhí)行時(shí)間:移位指令
寄存器移1位
時(shí)鐘周期數(shù)為2
整數(shù)乘法IMUL
16位寄存器乘
時(shí)鐘周期為128~154
整數(shù)除法IDIV
16位寄存器
時(shí)鐘周期為165~184
而即使Java編譯器在編譯intj=i*8;時(shí)用的是
imul,但真正執(zhí)行這這段代碼,由虛擬機(jī)JVM轉(zhuǎn)換成本地代碼是時(shí)候會(huì)不會(huì)進(jìn)一步優(yōu)化成用移位操作的匯編指也未得而知,必要時(shí)當(dāng)然可追蹤一下java.exe的執(zhí)行過程,即使執(zhí)行時(shí)會(huì)作此優(yōu)化,在java中把intj=i*8寫成intj=i<<3,可獲取一點(diǎn)點(diǎn)的效率,微不足道。/kypfos/archive/2006/06/18/810151.aspx45、兩個(gè)對象值相同(x.equals(y)==true),但卻可有不同的hashcode,這句話對不對?不對,有相同的hashcode。這要求我們覆寫equals同時(shí)必須overridden
hashCode方法;hashCode的默認(rèn)約定中有一條:
如果兩個(gè)對象根據(jù)equals(o)是相等的,則調(diào)用這個(gè)兩個(gè)對象中人一個(gè)對象的hashCode方法必產(chǎn)生同樣的整數(shù)結(jié)果
。因此一般推薦對象擴(kuò)展equals時(shí)都要擴(kuò)展hashCode在
Hashtable
中是這樣使用
equals()
和
hashCode()
的:get
和
put
時(shí),首先使用
hashCode()
進(jìn)行在
keys
中定位和查找,這樣會(huì)提高查找效率。如果現(xiàn)有多個(gè)
key
的
hashCode
相同,再用
equals
在具有相同
hashCode
的這幾個(gè)
key
中進(jìn)行依次查找。
也就是說,java
中的設(shè)計(jì)思想是:允許不同對象有相同的
hashCode(),但是
equal
的對象的
hashCode
肯定是相同的。equals()
在
java
中被認(rèn)為:對象之間
"一模一樣"。46、當(dāng)一個(gè)對象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞?是值傳遞。Java編程語言只有值傳遞參數(shù)。當(dāng)一個(gè)對象實(shí)例作為一個(gè)參數(shù)被傳遞到方法中時(shí),參數(shù)的值就是對該對象的引用。對象的內(nèi)容可以在被調(diào)用的方法中改變,但對象的引用是永遠(yuǎn)不會(huì)改變的。/view/3904121614791711cc791713.html“在java中參數(shù)傳遞都是按值傳遞的”這句話的意思是:按值傳遞是傳遞的值的拷貝,按引用傳遞其實(shí)傳遞的是引用的地址值,所以統(tǒng)稱為按值傳遞。在java中只有基本類型和按照下面這種定義方式的String是按值傳遞,其他的都是按引用傳遞。就是直接使用雙引號字符串方式:Stringstr=”Java私塾”;那么能不能讓按照引用傳遞的值相互間不影響?辦法是在方法里面新new一個(gè)實(shí)例就可以了。47、當(dāng)一個(gè)線程進(jìn)入一個(gè)對象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對象的其它方法?不能,一個(gè)對象的一個(gè)synchronized方法只能由一個(gè)線程訪問。/view/1207212.htmsynchronized
關(guān)鍵字,代表這個(gè)方法加鎖,相當(dāng)于不管哪一個(gè)線程A每次運(yùn)行到這個(gè)方法時(shí),都要檢查有沒有其它正在用這個(gè)方法的線程B(或者CD等),有的話要等正在使用這個(gè)方法的線程B(或者CD)運(yùn)行完這個(gè)方法后再運(yùn)行此線程A,沒有的話,直接運(yùn)行它包括兩種用法:synchronized方法和synchronized塊。48、編程題:寫一個(gè)Singleton出來。Singleton模式主要作用是保證在Java應(yīng)用程序中,一個(gè)類Class只有一個(gè)實(shí)例存在。/blog/static/62223494201081310439564/
Singleton模式的實(shí)現(xiàn)基于兩個(gè)要點(diǎn):
1)不直接用類的構(gòu)造函數(shù),而另外提供一個(gè)Public的靜態(tài)方法來構(gòu)造類的實(shí)例。通常這個(gè)方法取名為Instance。Public保證了它的全局可見性,靜
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國足球用品行業(yè)市場深度分析及投資策略研究報(bào)告
- 機(jī)械制造工藝測試題+參考答案
- 包裝設(shè)計(jì)師模擬習(xí)題+答案
- 第六單元課外古詩詞誦讀《卜算子·黃州定慧院寓居作》教學(xué)設(shè)計(jì)-2023-2024學(xué)年統(tǒng)編版語文八年級下冊
- 2025年新型復(fù)合型菌劑合作協(xié)議書
- 2025年阻燃塑料電表箱行業(yè)深度研究分析報(bào)告
- 人教版初中歷史與社會(huì)七年級上冊 1.2 .1鄉(xiāng)村聚落 教學(xué)設(shè)計(jì)
- 中國自控技術(shù)項(xiàng)目投資可行性研究報(bào)告
- 推拿治療學(xué)習(xí)題庫與答案
- 機(jī)械制造技術(shù)練習(xí)題庫與答案
- 2023年部編人教版六年級道德與法治下冊全冊課件【全套】
- 肌肉注射的常見并發(fā)癥及預(yù)防處理措施
- 景觀模型設(shè)計(jì)與制作:第7章 建筑模型制作基本技法
- 關(guān)愛婦女防治兩癌講座課件
- DL∕T 584-2017 3kV~110kV電網(wǎng)繼電保護(hù)裝置運(yùn)行整定規(guī)程
- 2024-2030年傷口護(hù)理管理行業(yè)市場現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評估規(guī)劃分析研究分析報(bào)告
- (正式版)FZ∕T 80018-2024 服裝 防靜電性能要求及試驗(yàn)方法
- 北師大版八年級下冊生物教案全冊
- 混凝土攪拌站安全生產(chǎn)風(fēng)險(xiǎn)分級管控體系方案全套資料2021-2022完整實(shí)施方案模板
- 新生兒紅臀的預(yù)防和護(hù)理
- DL-T5704-2014火力發(fā)電廠熱力設(shè)備及管道保溫防腐施工質(zhì)量驗(yàn)收規(guī)程
評論
0/150
提交評論