封裝是保證軟件部件具有優(yōu)良的模塊性的基礎(chǔ),封裝的目標(biāo)就是要實(shí)現(xiàn)軟件部件的“高內(nèi)聚、低耦合”,防止程序相互依賴性而帶來(lái)的變動(dòng)影響。在面向?qū)ο蟮木幊陶Z(yǔ)言中,對(duì)象是封裝的最基本單位,面向?qū)ο蟮姆庋b比傳統(tǒng)語(yǔ)言的封裝更為清晰、更為有力。面向?qū)ο蟮姆庋b就是把描述一個(gè)對(duì)象的屬性和行為的代碼封裝在一個(gè)“模塊”中,也就是一個(gè)類中,屬性用變量定義,行為用方法進(jìn)行定義,方法可以直接訪問(wèn)同一個(gè)對(duì)象中的屬性。通常情況下,只要記住讓變量和訪問(wèn)這個(gè)變量的方法放在一起,將一個(gè)類中的成員變量全部定義成私有的,只有這個(gè)類自己的方法才可以訪問(wèn)到這些成員變量,這就基本上實(shí)現(xiàn)對(duì)象的封裝,就很容易找出要分配到這個(gè)類上的方法了,就基本上算是會(huì)面向?qū)ο蟮木幊塘恕0盐找粋€(gè)原則:把對(duì)同一事物進(jìn)行操作的方法和相關(guān)的方法放在同一個(gè)類中,把方法和它操作的數(shù)據(jù)放在同一個(gè)類中。
抽象就是找出一些事物的相似和共性之處,然后將這些事物歸為一個(gè)類,這個(gè)類只考慮這些事物的相似和共性之處,并且會(huì)忽略與當(dāng)前主題和目標(biāo)無(wú)關(guān)的那些方面,將注意力集中在與當(dāng)前目標(biāo)有關(guān)的方面。例如,看到一只螞蟻和大象,你能夠想象出它們的相同之處,那就是抽象。
在定義和實(shí)現(xiàn)一個(gè)類的時(shí)候,可以在一個(gè)已經(jīng)存在的類的基礎(chǔ)之上來(lái)進(jìn)行,把這個(gè)已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并可以加入若干新的內(nèi)容,或修改原來(lái)的方法使之更適合特殊的需要,這就是繼承。繼承是子類自動(dòng)共享父類數(shù)據(jù)和方法的機(jī)制,這是類之間的一種關(guān)系,提高了軟件的可重用性和可擴(kuò)展性。
多態(tài)是指程序中定義的引用變量所指向的具體類型和通過(guò)該引用變量發(fā)出的方法調(diào)用在編程時(shí)并不確定,而是在程序運(yùn)行期間才確定,即一個(gè)引用變量倒底會(huì)指向哪個(gè)類的實(shí)例對(duì)象,該引用變量發(fā)出的方法調(diào)用到底是哪個(gè)類中實(shí)現(xiàn)的方法,必須在由程序運(yùn)行期間才能決定。因?yàn)樵诔绦蜻\(yùn)行時(shí)才確定具體的類,這樣,不用修改源程序代碼,就可以讓引用變量綁定到各種不同的類實(shí)現(xiàn)上,從而導(dǎo)致該引用調(diào)用的具體方法隨之改變,即不修改程序代碼就可以改變程序運(yùn)行時(shí)所綁定的具體代碼,讓程序可以選擇多個(gè)運(yùn)行狀態(tài),這就是多態(tài)性。
java實(shí)現(xiàn)多態(tài)的機(jī)制:靠的是父類或接口定義的引用變量可以指向子類或具體實(shí)現(xiàn)類的實(shí)例對(duì)象,而程序調(diào)用的方法在運(yùn)行期才動(dòng)態(tài)綁定,就是引用變量所指向的具體實(shí)例對(duì)象的方法,也就是內(nèi)存里正在運(yùn)行的那個(gè)對(duì)象的方法,而不是引用變量的類型中定義的方法。
另: javaEE中的session的理解--
session機(jī)制是一種服務(wù)器端的機(jī)制,服務(wù)器使用一種類似于散列表的結(jié)構(gòu)(也可能就是使用散列表)來(lái)保存信息。在服務(wù)器上,通過(guò)Session來(lái)區(qū)分每一個(gè)上網(wǎng)用戶用戶只要一連接到服務(wù)器,則立刻分配一個(gè)Session給用戶
Session主要方法:
Session ID是由服務(wù)器統(tǒng)一管理的,人為不能控制
方法:session.getID();
長(zhǎng)度:32
2 判斷是否是新的Session
public boolean isNew();
判斷當(dāng)前的Session是否是新建立的Session
3 Session的屬性設(shè)置
設(shè)置屬性:public void setAttribute(String name,Object value)
取得屬性:public Object getAttribute(String name)
刪除屬性:pbulic void removeAttribute(String name)
4 登陸驗(yàn)證
通過(guò)Session能夠?qū)τ脩羰欠竦顷懽龀鲵?yàn)證
public void putValue(String name,Object)-->setAttribute
public Object getValue(String name)-->getAttribute
public removeValue(String name)-->removeAttribute
此三個(gè)方法已經(jīng)過(guò)時(shí),不建議再使用
注銷用戶:讓用戶的Session失效
如果Session失效,則在Session所保留的全部操作也會(huì)消失
public void invalidate()使Session失效(手工)
如果Session長(zhǎng)時(shí)間不被使用,則也會(huì)自動(dòng)失效
5 得到Session的創(chuàng)建時(shí)間
public long getCreationTime()
此方法返回long類型,通過(guò)new Date()可以取得一個(gè)完成時(shí)間
取得用戶最后操作的時(shí)間:public long getLastAccessedTime();
6 總結(jié)
Session將信息保存在服務(wù)器上,而Cookie保存在客戶端上
Session比Cookie更安全,Session比Cookie更占資源
開(kāi)發(fā)原則:Session要盡量少用--盡量少向Session中保存信息
session使用了Cookie的機(jī)制,如果Cookie被禁用,則Session也無(wú)法使用,因?yàn)榭蛻舳说膕ession ID以cookie形式,保存在了客戶端的內(nèi)存當(dāng)中,這個(gè)時(shí)候我們可以通過(guò)url重寫,來(lái)保證session的有效性.
重寫url的方法如下
resp.encodeURL(request.getRequestURL().toString()); http://phl.iteye.com/blog/699574
轉(zhuǎn)載:
感覺(jué)網(wǎng)站最好不要依賴session
session 在做 多服務(wù)器負(fù)載的時(shí)候
會(huì)有點(diǎn)麻煩
直接用 cookie + 第三方緩存 比較的好...
自己在兩個(gè)公司呆過(guò)后得出的結(jié)論,純屬個(gè)人體會(huì) ...