
嘻道奇闻
- 文章199742
- 阅读14625734
3种Java反射创建对象方法详解(附代码实例)
鏈夋病鏈夋兂杩囦笉鐢?code>new灏辫兘鍑┖閫犲嚭涓€涓狫ava瀵硅薄锛燄煠?浠婂ぉ鍜变滑灏辨潵鍞犲敔杩欎釜榛戠鎶€鈥斺€斿弽灏勫垱寤哄璞★紒灏辩畻浣犳槸鍒氬叆闂ㄧ殑灏忕櫧锛岀湅瀹屼篃鑳界鎳傦紒锛堟媿鑳歌劘淇濊瘉锛?/p>
馃憠 鈥?strong>鈥嬩妇涓牀瀛愨€?/strong>鈥嬶細浣犳墜閲屾湁涓仴鎺у櫒锛堢被Class锛夛紝浣嗘寜閽爣绛鹃兘纾ㄦ病浜嗭紙涓嶇煡閬撴瀯閫犳柟娉曪級锛屽弽灏勫氨鏄浣犱笉鐢ㄧ湅鏍囩涔熻兘鎿嶄綔鐨勭鎶€鑳斤紒
馃洜锔?鏂规硶涓€锛欳lass.newInstance()锛堣繃鏃朵絾缁忓吀锛?/h3>
杩欐柟娉曡€丣ava浜洪兘瑙佽繃锛屼絾鐜板湪瀹樻柟涓嶆帹鑽愮敤浜嗐€備负鍟ワ紵鈥?strong>鈥嬪洜涓轰笉鑳戒紶鍙傛暟鍟婏紒鈥?/strong>鈥?涓嶈繃鍜变滑杩樻槸寰楀锛屼繚涓嶉綈鍝ぉ鍦ㄧ浼犱唬鐮侀噷閬囧埌鍛紵
java澶嶅埗Class<?> clazz = Class.forName("com.example.User"); Object user = clazz.newInstance(); // 鐩稿綋浜巒ew User()
鈿狅笍 鈥?strong>鈥嬫敞鎰忓潙鐐光€?/strong>鈥嬶細
- 蹇呴』鏈夋棤鍙傛瀯閫犳柟娉曪紙鍚﹀垯鐩存帴鎶涘紓甯革級
- 宸茬粡琚獲Deprecated鏍囪锛堟柊椤圭洰鍒敤锛?/li>
鈴?鑰楁椂瀹炴祴锛氳皟鐢?0000娆℃瘮new鎱?0鍊嶏紒锛堝悗闈細鏁欎綘鎬庝箞浼樺寲锛?/p>
馃敡 鏂规硶浜岋細Constructor.newInstance()锛堢幇鍦ㄤ富娴侊級
杩欐墠鏄畼鏂规帹鑽愮殑姝g‘濮垮娍锛佹敮鎸佸悇绉嶅甫鍙傛瀯閫狅紝绋冲緱涓€鎵箏
java澶嶅埗Constructor<?> constructor = Class.forName("com.example.User") .getConstructor(String.class, int.class); Object user = constructor.newInstance("寮犱笁", 25);
馃洃 鈥?strong>鈥嬫柊鎵嬪父瑙佺炕杞︾幇鍦衡€?/strong>鈥嬶細
- 鍙傛暟绫诲瀷椤哄簭鍐欏弽锛堟瘮濡傛妸int鍜孲tring璋冩崲锛?/li>
- 蹇樿澶勭悊InvocationTargetException
馃挕 鈥?strong>鈥嬮獨鎿嶄綔鈥?/strong>鈥嬶細鐢?code>getDeclaredConstructors()鍙互鎷垮埌鎵€鏈夋瀯閫犳柟娉曪紙鍖呮嫭private鐨勶級锛岄厤鍚?code>setAccessible(true)杩炲崟渚嬫ā寮忛兘鑳界牬瑙o紒
鈿?鏂规硶涓夛細鏁扮粍澶ф硶锛堝喎闂ㄤ絾瀹炵敤锛?/h3>
99%鐨勪汉涓嶇煡閬撳弽灏勮繕鑳借繖涔堢帺锛侀€傚悎澶勭悊涓嶇‘瀹氬弬鏁版暟閲忕殑鍦烘櫙
java澶嶅埗Class<?> clazz = Class.forName("com.example.User"); Constructor<?>[] constructors = clazz.getDeclaredConstructors(); // 闅忎究閫変釜鏋勯€犳柟娉曪紙涓嶅缓璁敓浜х幆澧冭繖涔堢敤锛侊級 Object user = constructors[0].newInstance("鏉庡洓");
馃攳 鈥?strong>鈥嬪弬鏁板尮閰嶇巹瀛︹€?/strong>鈥嬶細
- 鐢?code>getParameterTypes()鏌ョ湅鍙傛暟绫诲瀷
- 鐢?code>getParameterAnnotations()鎵炬敞瑙?/li>
馃搳 涓夌鏂规硶瀵规瘮锛堝缓璁敹钘忥級
鏀寔鍙傛暟 | 鏄惁杩囨椂 | 寮傚父澶勭悊 | |
---|---|---|---|
Class.newInstance | 鉂?/td> | 鉁?/td> | InstantiationException |
Constructor.newInstance | 鉁?/td> | 鉂?/td> | IllegalArgumentException |
鏁扮粍澶ф硶 | 鉁?/td> | 鉂?/td> | SecurityException |
馃挜 鐙鎬ц兘浼樺寲绉樼睄锛堝疄鎴樺共璐э級
鍘诲勾鍋氱數鍟嗛」鐩椂韪╄繃鐨勫潙锛氣€?strong>鈥嬪弽灏勬瘮甯歌鏂瑰紡鎱?0鍊嶏紒鈥?/strong>鈥?鍚庢潵鍙戠幇杩欎笁涓晳鍛芥嫑锛?/p>
- 鈥?strong>鈥嬬紦瀛楥onstructor瀵硅薄鈥?/strong>鈥嬶紙鍒瘡娆¢兘閲嶆柊鑾峰彇锛?/li>
- 鈥?strong>鈥嬪叧闂畨鍏ㄦ鏌モ€?/strong>鈥嬶細
constructor.setAccessible(true)
- 鈥?strong>鈥嬬敤MethodHandle浠f浛鈥?/strong>鈥嬶紙JDK7+鐗规€э級
瀹炴祴浼樺寲鍚庨€熷害鎻愬崌8鍊嶏紒鐗瑰埆鏄珮骞跺彂鍦烘櫙锛岃繖鎷涜兘鏁戝懡锛?/p>
馃殌 鍙嶅皠鍒板簳璇ヤ笉璇ョ敤锛燂紙鑰佸徃鏈虹殑蹇犲憡锛?/h3>
铏界劧鍙嶅皠寰堥叿锛屼絾鍗冧竾鍒互鐢紒鎴戜翰鐪艰杩囨湁浜虹敤鍙嶅皠璋冪敤Spring鐨勭鏈夋柟娉曪紝缁撴灉妗嗘灦鍗囩骇鐩存帴宕╀簡...锛堝埆闂垜鎬庝箞鐭ラ亾鐨勷煒級
鈥?strong>鈥嬫帹鑽愪娇鐢ㄥ満鏅€?/strong>鈥嬶細
鉁?妗嗘灦寮€鍙戯紙姣斿Spring IOC锛?br/>
鉁?鍔ㄦ€佷唬鐞?br/>
鉁?鎻掍欢鍖栨灦鏋?/p>
鈥?strong>鈥嬩綔姝诲満鏅€?/strong>鈥嬶細
鉂?涓氬姟浠g爜棰戠箒璋冪敤
鉂?缁曡繃鏉冮檺妫€鏌?br/>
鉂?澶勭悊鏁忔劅鏁版嵁
鏈€鍚庤涓喎鐭ヨ瘑锛欽ava14鏂板嚭鐨?code>Record绫荤敤鍙嶅皠鍒涘缓瀵硅薄浼氭姤閿欙紒鎵€浠ュ晩锛屽鎶€鏈笉鑳藉彧浼氫笁鏉挎枾锛屽緱涓庢椂淇辫繘鎵嶈~锛堟簻浜嗘簻浜嗭紝鍐欎唬鐮佸幓鍜級