1. 程式人生 > >Java基礎知識積累1

Java基礎知識積累1

介面中的變數預設是public static final 的,方法預設是public abstract 的

抽象類
特點:
1.抽象類中可以構造方法
2.抽象類中可以存在普通屬性,方法,靜態屬性和方法。
3.抽象類中可以存在抽象方法。
4.如果一個類中有一個抽象方法,那麼當前類一定是抽象類;抽象類中不一定有抽象方法。
5.抽象類中的抽象方法,需要有子類實現,如果子類不實現,則子類也需要定義為抽象的。
介面
1.在介面中只有方法的宣告,沒有方法體。
2.在介面中只有常量,因為定義的變數,在編譯的時候都會預設加上
public static final
3.在介面中的方法,永遠都被public來修飾。
4.介面中沒有構造方法,也不能例項化介面的物件。
5.介面可以實現多繼承
6.介面中定義的方法都需要有實現類來實現,如果實現類不能實現介面中的所有方法
7.則實現類定義為抽象類。
8、java8中介面可以有default方法,所以B是錯的,感謝 @__PureFrog的幫助 。

StringBuffer是執行緒安全的,相當於一個執行緒安全的StringBuilder

Properties實現了Map介面,是執行緒安全的

forward和redirect
1.從位址列顯示來說
forward是伺服器請求資源,伺服器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.
瀏覽器根本不知道伺服器傳送的內容從哪裡來的,所以它的位址列還是原來的地址.
redirect是服務端根據邏輯,傳送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以位址列顯示的是新的URL.

2.從資料共享來說
forward:轉發頁面和轉發到的頁面可以共享request裡面的資料.
redirect:不能共享資料.

3.從運用地方來說
forward:一般用於使用者登陸的時候,根據角色轉發到相應的模組.
redirect:一般用於使用者登出登陸時返回主頁面和跳轉到其它的網站等.

4.從效率來說
forward:高.
redirect:低

Servlet的生命週期可以分為初始化階段,執行階段和銷燬階段三個階段,以下過程屬於初始化階段是
1. 載入Servlet類及.class對應的資料
2. 建立ServletConfig物件
3. 建立Servlet物件
每一次請求來到容器時,會產生HttpServletRequest與HttpServlceResponse物件,並在呼叫service()方法時當做引數傳入。
在WEB容器啟動後,會讀取Servlet設定資訊,將Servlet類載入並例項化,併為每個Servlet設定資訊產生一個ServletConfig物件,
而後呼叫Servlet介面的init()方法,並將產生的ServletConfig物件當作引數傳入。

java的初始化順序,先初始化父類的成員變數,再初始化父類的建構函式,因為父類裡面的建構函式裡面的方法在子類中已經進行了重寫所以會呼叫子類的這個方法,
但是子類成員變數還沒初始化,所以其為null

Math.floor(x) 返回小於等於x的最接近整數,型別為double

演算法包括0個或多個輸入,1個或多個輸出,中間有窮個處理過程。
儲存結構不屬於演算法結構

定義在類中的變數是類的成員變數,可以不進行初始化,Java會自動進行初始化,如果是引用型別預設初始化為null,如果是基本型別例如int則會預設初始化為0
區域性變數是定義在方法中的變數,必須要進行初始化,否則不同通過編譯
被static關鍵字修飾的變數是靜態的,靜態變數隨著類的載入而載入,所以也被稱為類變數
被final修飾發變數是常量

方法過載(overload):
1.必須是同一個類
2方法名(也可以叫函式)一樣
3引數型別不一樣或引數數量不一樣

方法的重寫(override)兩同兩小一大原則:
方法名相同,引數型別相同
子類返回型別小於等於父類方法返回型別,
子類丟擲異常小於等於父類方法丟擲異常,
子類訪問許可權大於等於父類方法訪問許可權。

run()方法用來執行執行緒體中具體的內容
start()方法用來啟動執行緒物件,使其進入就緒狀態
sleep()方法用來使執行緒進入睡眠狀態
suspend()方法用來使執行緒掛起,要通過resume()方法使其重新啟動

解決雜湊衝突常用的兩種方法是:開放定址法和鏈地址法

1、自旋鎖 ,自旋,jvm預設是10次吧,有jvm自己控制。for去爭取鎖

2、阻塞鎖 被阻塞的執行緒,不會爭奪鎖。

3、可重入鎖 多次進入改鎖的域

4、讀寫鎖

5、互斥鎖 鎖本身就是互斥的

6、悲觀鎖 不相信,這裡會是安全的,必須全部上鎖

7、樂觀鎖 相信,這裡是安全的。

8、公平鎖 有優先順序的鎖

9、非公平鎖 無優先順序的鎖

10、偏向鎖 無競爭不鎖,有競爭掛起,轉為輕量鎖

11、物件鎖 鎖住物件

12、執行緒鎖

13、鎖粗化 多鎖變成一個,自己處理

14、輕量級鎖 CAS 實現

15、鎖消除 偏向鎖就是鎖消除的一種

16、鎖膨脹 jvm實現,鎖粗化

17、訊號量 使用阻塞鎖 實現的一種策略

18、排它鎖:X鎖,若事務T對資料物件A加上X鎖,則只允許T讀取和修改A,其他任何事務都不能再對A加任何型別的鎖,直到T釋放A上的鎖。這就保證了其他事務在T釋放A上的鎖之前不能再讀取和修改A。

問:什麼是Object類?
答:Object類儲存在java.lang包中,是所有java類(Object類除外)的終極父類。當然,陣列也繼承了Object類。然而,介面是不繼承Object類的,原因在這裡指出:Section 9.6.3.4 of the Java Language Specification:“Object類不作為介面的父類”。
Object類中聲明瞭以下函式,我會在下文中作詳細說明。
protected Object clone()
boolean equals(Object obj)
protected void finalize()
Class< > getClass()
int hashCode()
void notify()
void notifyAll()
String toString()
void wait()
void wait(long timeout)
void wait(long timeout, int nanos)

Java中有5種建立物件的方式,下面給出它們的例子還有它們的位元組碼
使用new關鍵字 } → 呼叫了建構函式
使用Class類的newInstance方法 } → 呼叫了建構函式
使用Constructor類的newInstance方法 } → 呼叫了建構函式
使用clone方法 } → 沒有呼叫建構函式
使用反序列化 } → 沒有呼叫建構函式
如果你運行了末尾的的程式,你會發現方法1,2,3用建構函式建立物件,方法4,5沒有呼叫建構函式。