jdk1.8以前java
接口:
1.多實現
2.變量類型默認且只能爲爲public static final
3.函數類型默認且只能爲public,只能有public類型的靜態成員函數
4.非靜態成員函數沒有方法體,靜態成員函數有方法體
5.子類必須實現全部接口函數
6.能夠有main方法;能夠new一個接口,須要在方法體中實現全部接口函數
7.沒有構造器
抽象類:
1.單繼承
2.變量類型不限(靜態變量+非靜態變量)
3.函數類型不限(靜態函數+非靜態函數)
4.非靜態函數包含沒有方法體的抽象函數. 有方法體的普通函數
5.子類能夠不覆寫父類的抽象方法,但子類也要申明爲抽象類;子類能夠選擇覆寫父類的非抽象方法
6.能夠有main方法;不能夠new一個抽象類
7.能夠有構造器
Jdk1.8之後編程
接口中能夠有default類型的方法,實現類能夠選擇實現該方法
意義:默認方法的主要優點是提供一種拓展接口的方法,而不破壞現有代碼。另外一個優點爲該方法是可選的,子類能夠根據不一樣的需求Override或默認實現。
1.request對象segmentfault
客戶端的請求信息被封裝在request對象中,經過它才能瞭解到客戶的需求,而後作出響應。它是HttpServletRequest類的實例。
2.response對象設計模式
response對象包含了響應客戶請求的有關信息,但在JSP中不多直接用到它。它是HttpServletResponse類的實例。
3.session對象數組
session對象指的是客戶端與服務器的一次會話,從客戶連到服務器的一個WebApplication開始,直到客戶端與服務器斷開鏈接爲止。它是HttpSession類的實例.
4.out對象服務器
out對象是JspWriter類的實例,是向客戶端輸出內容經常使用的對象
5.page對象session
page對象就是指向當前JSP頁面自己,有點象類中的this指針,它是java.lang.Object類的實例
6.application對象架構
application對象實現了用戶間數據的共享,可存放全局變量。它開始於服務器的啓動,直到服務器的關閉,在此期間,此對象將一直存在;這樣在用戶的先後鏈接或不一樣用戶之間的鏈接中,能夠對此對象的同一屬性進行操做;在任何地方對此對象屬性的操做,都將影響到其餘用戶對此的訪問。服務器的啓動和關閉決定了application對象的生命。它是ServletContext類的實例。
7.exception對象app
exception對象是一個例外對象,當一個頁面在運行過程當中發生了例外,就產生這個對象。若是一個JSP頁面要應用此對象,就必須把isErrorPage設爲true,不然沒法編譯。他其實是java.lang.Throwable的對象
8.pageContext對象
pageContext對象提供了對JSP頁面內全部的對象及名字空間的訪問,也就是說他能夠訪問到本頁所在的SESSION,也能夠取本頁面所在的application的某一屬性值,他至關於頁面中全部功能的集大成者,它的本 類名也叫pageContext。
9.config對象
config對象是在一個Servlet初始化時,JSP引擎向它傳遞信息用的,此信息包括Servlet初始化時所要用到的參數(經過屬性名和屬性值構成)以及服務器的有關信息(經過傳遞一個ServletContext對象)ide
若是return出如今try中,在return執行以前會執行finally裏的代碼。若是finally有return語句的話,finally的return會覆蓋try裏的return,也就是try的return得不到執行。當程序執行try塊,catch塊時遇到return語句或者throw語句,這兩個語句都會致使該方法當即結束,因此係統並不會當即執行這兩個語句,而是 去尋找該異常處理流程中的finally塊,若是沒有finally塊,程序當即執行return語句或者throw語句,方法終止。若是有 finally塊,系統當即開始執行finally塊,只有當finally塊執行完成後,系統纔會再次跳回來執行try塊、catch塊裏的 return或throw語句,若是finally塊裏也使用了return或throw等致使方法終止的語句,則finally塊已經終止了方法,不用 再跳回去執行try塊、catch塊裏的任何代碼了。
jar 將許多文件組合成一個jar文件
javac 編譯
javadoc 它從程序源代碼中抽取類、方法、成員等註釋造成一個和源代碼配套的API幫助文檔。
javah 把java代碼聲明的JNI方法轉化成CC++頭文件。
表達式值等於某個case語句後的值開始,它下方的全部語句都會一直運行,直到遇到一個break爲止。假如任何一個case語句的值都不等於表達式的值,則執行default,並執行default語句以後的case語句,直到break或結束.
代碼可編譯運行,輸出「AB.B」
public class foo { public static void main(String sgf[]) { StringBuffer a=new StringBuffer(「A」); StringBuffer b=new StringBuffer(「B」); operate(a,b); System.out.println(a+」.」+b); } static void operate(StringBuffer x,StringBuffer y) { x.append(y); y=x; } }
引用a指向對象A
引用b指向對象B
引用x指向對象A
引用y指向對象B
StringBuffer不是基本類型,因此傳遞是引用傳遞,因此經過調用operate方法中,引用x指向的對象A被鏈接了B,對象A也就被改變爲AB
而後又把引用y指向了x所指向的對象地址,也就是此時引用a,x,y指向同一個對象AB
而引用b沒有發生任何變化,依舊指向對象B。
threadlocal 使用開放地址法 - 線性探測法:當前哈希槽有其餘對象佔了,順着數組索引尋找下一個,直到找到爲止hashset 中調用 hashmap 來存儲數據的,hashmap 採用的鏈地址法:當哈希槽中有其餘對象了,使用鏈表的方式鏈接到那個對象上
HashMap採用了鏈地址法,ThreadLocalMap則是開放地址法。
開放定址法:當衝突發生時,使用某種探查(亦稱探測)技術在散列表中造成一個探查(測)序列。沿此序列逐個單元地查找,直到找到給定 的關鍵字,或者碰到一個開放的地址(即該地址單元爲空)爲止(若要插入,在探查到開放的地址,則可將待插入的新結點存人該地址單元)。查找時探查到開放的 地址則代表表中無待查的關鍵字,即查找失敗。鏈地址法:將全部關鍵字爲同義詞的結點連接在同一個單鏈表中。若選定的散列表長度爲m,則可將散列表定義爲一個由m個頭指針組成的指針數 組T[0..m-1]。凡是散列地址爲i的結點,均插入到以T[i]爲頭指針的單鏈表中。T中各份量的初值均應爲空指針。
一、開閉原則(Open Close Principle)
開閉原則的意思是:對擴展開放,對修改關閉。在程序須要進行拓展的時候,不能去修改原有的代碼,實現一個熱插拔的效果。簡言之,是爲了使程序的擴展性好,易於維護和升級。
二、里氏代換原則(Liskov Substitution Principle)
里氏代換原則是面向對象設計的基本原則之一。 里氏代換原則中說,任何基類能夠出現的地方,子類必定能夠出現。LSP 是繼承複用的基石,只有當派生類能夠替換掉基類,且軟件單位的功能不受到影響時,基類才能真正被複用,而派生類也可以在基類的基礎上增長新的行爲。里氏代換原則是對開閉原則的補充。實現開閉原則的關鍵步驟就是抽象化,而基類與子類的繼承關係就是抽象化的具體實現,因此里氏代換原則是對實現抽象化的具體步驟的規範。
三、依賴倒轉原則(Dependence Inversion Principle)
這個原則是開閉原則的基礎,具體內容:針對接口編程,依賴於抽象而不依賴於具體。
四、接口隔離原則(Interface Segregation Principle)
這個原則的意思是:使用多個隔離的接口,比使用單個接口要好。它還有另一個意思是:下降類之間的耦合度。因而可知,其實設計模式就是從大型軟件架構出發、便於升級和維護的軟件設計思想,它強調下降依賴,下降耦合。
五、迪米特法則,又稱最少知道原則(Demeter Principle)
最少知道原則是指:一個實體應當儘可能少地與其餘實體之間發生相互做用,使得系統功能模塊相對獨立。
六、合成複用原則(Composite Reuse Principle)
合成複用原則是指:儘可能使用合成/聚合的方式,而不是使用繼承