編程語言分類(以程序運行時結(jié)構(gòu)及變量類型的可變性作為標準):
--|1.靜態(tài)語言
--|2.動態(tài)語言:程序運行時扭弧,允許改變程序的結(jié)構(gòu)及變量類型的語言;
~由此记舆,Java寄狼、C++、C#是非動態(tài)語言,而Perl泊愧、Python伊磺、Ruby是動態(tài)語言
·Java中按照加載時機將類的加載類型劃分為編譯時檢查類型、運行時加載類型
1.編譯時檢查類型的類(運行時已識別類型:RTTI--Run Time Type Identificated):編譯時識別删咱,該類型的類在編譯時由編譯器檢查確認屑埋,在運行時加載
2.運行時加載類型(反射:主要用于構(gòu)造工具):從其他地方得到一個未知類的對象,在程序運行時動態(tài)的將該未知類對象所在類文件加載到Java Virtual Machine中
---- 反射(Reflective): 能夠分析類能力的程序
···反射庫(Reflection Library)-豐富且精心設(shè)計的工具集痰滋,方便編寫能夠動態(tài)操縱Java代碼的程序摘能。這項功能被大量應(yīng)用與JavaBeans中,JavaBeans為Java組件的的體系結(jié)構(gòu)敲街,在設(shè)計或運行中添加新類時团搞,可以快速應(yīng)用開發(fā)工具動態(tài)查詢新添加類的能力(具體體現(xiàn)為獲得新類的實例域及方法);
·反射機制的作用:
? ? 1.程序運行時動態(tài)分析類的能力
? ? 2.程序運行時動態(tài)查看對象多艇,例如:編寫一個toString方法供所有類使用
? ? 3.實現(xiàn)通用的數(shù)組操作代碼
? ? 4.利用Method對象(對象類似于C++中的函數(shù)指針)
反射中的類Class逻恐、Constructor、Method
·Class類(泛型類--例如:Employee.class的類型是Class<Employee>):保存對象在程序運行時的類型信息(程序運行期間峻黍,Java運行系統(tǒng)始終為所有的對象維護一個被稱為運行時的類型標識复隆。該信息跟蹤著每個對象所屬的類。虛擬機利用運行時類型信息選擇相應(yīng)的方法執(zhí)行)姆涩,一個Class對象表示一個特定類的屬性
Class類中的方法:
1.public String getName(){} -- 返回類的名字
2.public static Class forName(String className){} -- 返回對應(yīng)className的類的Class對象(className:類或接口的全名挽拂,即包名.類名),需處理異常:ClassNotFoundException
3.T表示任意Java類型:則T.class將代表T對應(yīng)的Class類對象
4.任意對象都有的方法:public Class getClass(){} -- 返回調(diào)用該方法的對象的所屬類的Class類對象
注:2骨饿、3亏栈、4為獲取Class類對象的方法(以下僅針對獲取Class類對象這一過程)
>其中編號為2的方法僅需要類的名字,而不需要導(dǎo)入包宏赘,更加具有普遍意義(反射 -- 運行時檢查绒北,處理的運行時異常為ClassNotFoundException);
>編號為3的方法需要類的名字置鼻,且需要導(dǎo)入相應(yīng)的包(編譯時檢查)镇饮;
>編號4的方法需要類對象且需要導(dǎo)入相應(yīng)的包(編譯時檢查);
5.public Method getMethod(String methodName, Class...parametersType){} -- 返回特定方法的Method對象?
>第一個參數(shù)為方法名字箕母,之后的參數(shù)為要獲取方法的參數(shù)所在類的Class對象(以下同此格式可以此方式解釋)
6.public Method[ ] getMethods(){} -- 返回Class對象指向的類中以public作為訪問權(quán)限修飾符的方法
>以下同此格式可以此方式解釋(實在拗口储藐,書寫不便,見諒嘶是!)
7.public Method[ ] getDeclaredMethods(){} -- 返回Class對象指向的類中的所有方法(包括protected钙勃、private修飾的方法)的Method對象的數(shù)組;
>以下同此格式可以此方式解釋(實在拗口聂喇,書寫不便辖源,見諒蔚携!)
注:5、6克饶、7為Class類中獲取Class對象指向的類中的方法的方法
8.public Constructor getConstructor(Class...parameterTypes){} -- 返回Class對象中特定構(gòu)造器的Constructor對象
9.public Constructor[ ] getConstructors(){} -- 返回包含Class對象中公共構(gòu)造器對象的Constructor數(shù)組
10.public Constructor[ ] getDeclaredConstructors(){} -- 返回包含Class對象中所有構(gòu)造器對象的Constructor數(shù)組
注:8酝蜒、9、10為Class類中獲取Class對象中的構(gòu)造器的方法
11.public Field getField(String name){} -- 返回Class對象中的特定實例域的Field對象
12.public Field[ ] getFields(){} -- 返回包含Class對象中公共實例域?qū)ο蟮腇ield數(shù)組
13.public Field[ ] getDeclaredFields(){} -- 返回包含Class對象中所有實例域?qū)ο蟮腇ield數(shù)組
注:11矾湃、12亡脑、13為Class類中獲取Class對象中的實例域的方法(因封裝原理,一般getDeclaredFields(){}是無意義的)
14.public void setAccessible(boolean flag){} -- 設(shè)置訪問Class對象所指向的類的私有屬性權(quán)限
Method類:描述方法的類
Method類對象指向具體的方法邀跃,類似于C霉咨、C++中的函數(shù)指針;
Method類中的方法:
public void invoke(String methodName, Object...parameters){} -- 調(diào)用Method類對象所指的方法(在運行時動態(tài)調(diào)用需要的方法)
Constructor類:描述構(gòu)造器的類
Constructor類對象指向具體的構(gòu)造器拍屑,本質(zhì)是函數(shù)途戒,也類似于C、C++中的函數(shù)指針僵驰;
Constructor類中的方法:
public Object newInstance(Object...parameters){} -- 調(diào)用Constructor類對象所指的構(gòu)造器
Field類:描述實例域的類
關(guān)于實例域(Field):
-- 封裝:從形式上看封裝不過是將數(shù)據(jù)和行為組合在一個包內(nèi)喷斋,并對對象的使用者隱藏了行為的實現(xiàn)方式。對象中的數(shù)據(jù)稱為實例域(instance field)矢渊,這些值的集合就是這個對象的當前狀態(tài)(state)继准。向?qū)ο蟀l(fā)送一條消息枉证,它的狀態(tài)就有可能發(fā)生改變矮男。
對象的主要特性:
? ? 1.對象的行為(behavior) -- 可以對對象施加哪些操作,或可以對對象施加哪些方法
? ? 2.對象的狀態(tài)(state) -- 當施加方法時室谚,對象如何響應(yīng)
? ? 3.對象表示(identity) -- 如何辨別具有相同行為與狀態(tài)的不同對象
大致上的含義是改變數(shù)據(jù)的方式毡鉴、改變后的數(shù)據(jù)代表的意義、標示相同數(shù)據(jù)的不同含義
>由此秒赤,對象即一組數(shù)據(jù)猪瞬,而數(shù)據(jù)能夠通過邏輯運算實現(xiàn)人為賦予的抽象意義!入篮!
陈瘦!·待補充 -- 動態(tài)代理