本帖最后由 磬辰 于 2018-5-12 22:03 編輯
林文輝 反射總結 反射的特性比較高級,只要獲取到類名,就可以獲取到類的內部的所有成員和所有方法.就單純對程序來說確實是提高了程序的靈活性.但是同時可能帶來意料之外的問題.并且反射代碼通常比我們正常寫的代碼要麻煩,相當于拐了個彎.而且反射是通過類名對類的類部進行一系列的操作,這樣可能會導致后期維護的難度增加.
字節碼對象說白了就是.java文件經過編譯后變成了.class,然后再加載這個類.通常的獲取方式有 類的對象.getClass(),類名.class 或者Class.forName("全類名").
通過Class的靜態方法getConstructor()可以獲取類的public修飾的構造方法 ,getDeclaredConstructor()則比較不講道理,不管你是不是用pulibc修飾的,我一樣能把你獲取. getConstructors()和getDeclaredConstructors() 分別是返回所有的public構造方法和返回所有的構造方法,返回類型都是數組.
getField()和getDeclaredField()和構造方法類似,沒加Declared的都是只能獲取public修飾的方法或者變量,后者則可以全部獲取,只不過必須在沒有安全限制的環境中(setAccessible(true))運行,,這也是反射的一個問題所在.
javaBean個人認為就是類的規范,按規矩來寫類.不然總有個別喜歡搞特例的,就是不愛用private 就是喜歡protected 就是喜歡public修飾成員變量.
基本就是遵循這個幾個規范
1、所有屬性為private
2、提供默認構造方法
3、提供getter和setter
4、實現serializable接口
BUtils是阿帕奇組織眾多的一個工具類之一,populate相對來說用處稍廣(畢竟是應用不是理解),并且也用到了雙列結合,
由此可見雙列集合在往后的開發項目是很廣的,比如網站一些的分類啊,父分類子分類這種,Map相對來說用途還是很廣的.
set get populate這幾個底層都是通過反射來實現的.編寫這幾個方法主要還是熟悉一下人家的源碼.正常來說只要知道怎么用就行了,不用管那么多,我們在編碼時,并不需要知道我們處理的JavaBeans具體是什么類型,有哪些屬性,這些信息是可以動態獲取的,甚至我們都可以不必去關心事實上是否存在這樣一個具體的JavaBean類。我們只需要知道有一個JavaBean的實例,我們需要從中取得某個屬性,設定某個屬性的值.當然有興趣就可以去研究.
|