重踏學習Java路上_Day27(反射,模式設計,jdk新特性)

來源:互聯網
上載者:User

標籤:

1:反射(理解)
(1)類的載入及類載入器
(2)反射:
通過位元組碼檔案對象,去使用成員變數,構造方法,成員方法
(3)反射的使用
A:通過反射擷取構造方法並使用
B:通過反射擷取成員變數並使用
C:通過反射擷取成員方法並使用
(4)反射案例
A:通過反射回合組態檔案的內容
B:通過反射越過泛型檢查
C:通過反射給任意的一個對象的任意的屬性賦值為指定的值
(5)動態代理

2:設計模式
(1)裝飾設計模式
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

Scanner sc = new Scanner(System.in);
(2)模版設計模式

3:JDK新特性
(1)JDK5(掌握)
裝箱和拆箱
泛型
增強for
靜態匯入
可變參數
枚舉
(2)JDK6(瞭解)
(3)JDK7(理解)
二進位的表現形式
用_分隔資料
switch語句可是用字串
泛型推斷(菱形泛型)
多catch的使用
自動釋放資源的用法
(4)JDK8(瞭解)
可以去網上瞭解資料

 

----------------------------------------------------------------------------------------------------------------------------------------------

類的載入
當程式要使用某個類時,如果該類還未被載入到記憶體中,則系統會通過載入,串連,初始化三步來實現對這個類進行初始化。
載入
就是指將class檔案讀入記憶體,並為之建立一個Class對象。
任何類被使用時系統都會建立一個Class對象。
串連
驗證 是否有正確的內部結構,並和其他類協調一致
準備 負責為類的靜態成員分配記憶體,並設定預設初始化值
解析 將類的位元據中的符號引用替換為直接引用
初始化 就是我們以前講過的初始化步驟


類初始化時機
建立類的執行個體
訪問類的靜態變數,或者為靜態變數賦值
調用類的靜態方法
使用反射方式來強制建立某個類或介面對應的java.lang.Class對象
初始化某個類的子類
直接使用java.exe命令來運行某個主類


類載入器
負責將.class檔案載入到內在中,並為之產生對應的Class對象。
雖然我們不需要關心類載入機制,但是瞭解這個機制我們就能更好的理解程式的運行。
類載入器的組成
Bootstrap ClassLoader 根類載入器
Extension ClassLoader 擴充類載入器
Sysetm ClassLoader 系統類別載入器

反射
JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態擷取的資訊以及動態調用對象的方法的功能稱為java語言的反射機制。
要想解剖一個類,必須先要擷取到該類的位元組碼檔案對象。而解剖使用的就是Class類中的方法.所以先要擷取到每一個位元組碼檔案對應的Class類型的對象.

通過反射擷取構造方法並使用
擷取構造方法
getConstructors
getDeclaredConstructors
建立對象
newInstance()
con.newInstance(“zhangsan", 20);

通過反射擷取成員變數並使用
擷取所有成員
getFields,getDeclaredFields
擷取單個成員
getField,getDeclaredField
修改成員的值
set(Object obj,Object value)   將指定物件變數上此 Field 對象表示的欄位設定為指定的新值。

通過反射擷取成員方法並使用
擷取所有方法
getMethods
getDeclaredMethods
擷取單個方法
getMethod
getDeclaredMethod
暴力訪問
method.setAccessible(true);

動態代理
動態代理
代理:本來應該自己做的事情,卻請了別人來做,被請的人就是代理對象。
舉例:春季回家買票讓人代買
動態代理:在程式運行過程中產生的這個對象
而程式運行過程中產生對象其實就是我們剛才反射講解的內容,所以,動態代理其實就是通過反射來產生一個代理

在Java中java.lang.reflect包下提供了一個Proxy類和一個InvocationHandler介面,通過使用這個類和介面就可以產生動態代理對象。JDK提供的代理只能針對介面做代理。我們有更強大的代理cglib
Proxy類中的方法建立動態代理類對象
public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)
最終會調用InvocationHandler的方法
InvocationHandler
Object invoke(Object proxy,Method method,Object[] args)

Proxy類中建立動態代理對象的方法的三個參數;
ClassLoader對象,定義了由哪個ClassLoader對象來對產生的代理對象進行載入
Interface對象的數組,表示的是我將要給我需要代理的對象提供一組什麼介面,如果我提供了一組介面給它,那麼這個代理對象就宣稱實現了該介面(多態),這樣我就能調用這組介面中的方法了
InvocationHandler對象,表示的是當我這個動態代理對象在調用方法的時候,會關聯到哪一個InvocationHandler對象上

每一個動態代理類都必須要實現InvocationHandler這個介面,並且每個代理類的執行個體都關聯到了一個handler,當我們通過代理對象調用一個方法的時候,這個方法的調用就會被轉寄為由InvocationHandler這個介面的invoke 方法來進行調用。

InvocationHandler介面中invoke方法的三個參數:
proxy:代表動態代理對象
method:代表正在執行的方法
args:代表調用目標方法時傳入的實參

Proxy.newProxyInstance
建立的代理對象是在jvm運行時動態產生的一個對象,它並不是我們的InvocationHandler類型,
也不是我們定義的那組介面的類型,而是在運行是動態產生的一個對象,並且命名方式都是這樣的形式,
以$開頭,proxy為中,最後一個數字表示對象的標號。
System.out.println(u.getClass().getName());


枚舉
枚舉概述
是指將變數的值一一列出來,變數的值只限於列舉出來的值的範圍內。舉例:一周只有7天,一年只有12個月等。
回想單例設計模式:單例類是一個類只有一個執行個體
那麼多例類就是一個類有多個執行個體,但不是無限個數的執行個體,而是有限個數的執行個體。這才能是枚舉類。

格式是:只有枚舉項的枚舉類
public enum 枚舉類名 {
枚舉項1,枚舉項2,枚舉項3…;
}

注意事項
定義枚舉類要用關鍵字enum
所有枚舉類都是Enum的子類
枚舉類的第一行上必須是枚舉項,最後一個枚舉項後的分號是可以省略的,但是如果枚舉類有其他的東西,這個分號就不能省略。建議不要省略
枚舉類可以有構造器,但必須是private的,它預設的也是private的。枚舉項的用法比較特殊:枚舉(“”);
枚舉類也可以有抽象方法,但是枚舉項必須重寫該方法
枚舉在switch語句中的使用,JDK7新特性

枚舉類中的幾個常見方法
int compareTo(E o)
String name()
int ordinal()
String toString()
<T> T valueOf(Class<T> type,String name) values()
此方法雖然在JDK文檔中尋找不到,但每個枚舉類都具有該方法,它遍曆枚舉類的所有枚舉值非常方便

模版設計模式
模版設計模式概述
模版方法模式就是定義一個演算法的骨架,而將具體的演算法延遲到子類中來實現
優點
使用模版方法模式,在定義演算法骨架的同時,可以很靈活的實現具體的演算法,滿足使用者靈活多變的需求
缺點
如果演算法骨架有修改的話,則需要修改抽象類別

裝飾設計模式
裝飾設計模式概述
裝飾模式就是使用被裝飾類的一個子類的執行個體,在用戶端將這個子類的執行個體交給裝飾類。是繼承的替代方案
優點
使用裝飾模式,可以提供比繼承更靈活的擴充項物件的功能,它可以動態添加對象的功能,並且可以隨意的組合這些功能
缺點
正因為可以隨意組合,所以就可能出現一些不合理的邏輯

 

重踏學習Java路上_Day27(反射,模式設計,jdk新特性)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.