首页 > 社会 > 正文内容

3种Java反射创建对象方法详解(附代码实例)

社会2025-05-28 08:02:53

鏈夋病鏈夋兂杩囦笉鐢?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>鈥嬶細

  1. 蹇呴』鏈夋棤鍙傛瀯閫犳柟娉曪紙鍚﹀垯鐩存帴鎶涘紓甯革級
  2. 宸茬粡琚獲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>鈥嬶細

  1. 鐢?code>getParameterTypes()鏌ョ湅鍙傛暟绫诲瀷
  2. 鐢?code>getParameterAnnotations()鎵炬敞瑙?/li>

馃搳 涓夌鏂规硶瀵规瘮锛堝缓璁敹钘忥級

鏀寔鍙傛暟鏄惁杩囨椂寮傚父澶勭悊
Class.newInstance鉂?/td>鉁?/td>InstantiationException
Constructor.newInstance鉁?/td>鉂?/td>IllegalArgumentException
鏁扮粍澶ф硶鉁?/td>鉂?/td>SecurityException

馃挜 鐙鎬ц兘浼樺寲绉樼睄锛堝疄鎴樺共璐э級

鍘诲勾鍋氱數鍟嗛」鐩椂韪╄繃鐨勫潙锛氣€?strong>鈥嬪弽灏勬瘮甯歌鏂瑰紡鎱?0鍊嶏紒鈥?/strong>鈥?鍚庢潵鍙戠幇杩欎笁涓晳鍛芥嫑锛?/p>

  1. 鈥?strong>鈥嬬紦瀛楥onstructor瀵硅薄鈥?/strong>鈥嬶紙鍒瘡娆¢兘閲嶆柊鑾峰彇锛?/li>
  2. 鈥?strong>鈥嬪叧闂畨鍏ㄦ鏌モ€?/strong>鈥嬶細constructor.setAccessible(true)
  3. 鈥?strong>鈥嬬敤MethodHandle浠f浛鈥?/strong>鈥嬶紙JDK7+鐗规€э級

瀹炴祴浼樺寲鍚庨€熷害鎻愬崌8鍊嶏紒鐗瑰埆鏄珮骞跺彂鍦烘櫙锛岃繖鎷涜兘鏁戝懡锛?/p>


馃殌 鍙嶅皠鍒板簳璇ヤ笉璇ョ敤锛燂紙鑰佸徃鏈虹殑蹇犲憡锛?/h3>

铏界劧鍙嶅皠寰堥叿锛屼絾鍗冧竾鍒互鐢紒鎴戜翰鐪艰杩囨湁浜虹敤鍙嶅皠璋冪敤Spring鐨勭鏈夋柟娉曪紝缁撴灉妗嗘灦鍗囩骇鐩存帴宕╀簡...锛堝埆闂垜鎬庝箞鐭ラ亾鐨勷煒級

鈥?strong>鈥嬫帹鑽愪娇鐢ㄥ満鏅€?/strong>鈥嬶細
鉁?妗嗘灦寮€鍙戯紙姣斿Spring IOC锛?br/> 鉁?鍔ㄦ€佷唬鐞?br/> 鉁?鎻掍欢鍖栨灦鏋?/p>

鈥?strong>鈥嬩綔姝诲満鏅€?/strong>鈥嬶細
鉂?涓氬姟浠g爜棰戠箒璋冪敤
鉂?缁曡繃鏉冮檺妫€鏌?br/> 鉂?澶勭悊鏁忔劅鏁版嵁


鏈€鍚庤涓喎鐭ヨ瘑锛欽ava14鏂板嚭鐨?code>Record绫荤敤鍙嶅皠鍒涘缓瀵硅薄浼氭姤閿欙紒鎵€浠ュ晩锛屽鎶€鏈笉鑳藉彧浼氫笁鏉挎枾锛屽緱涓庢椂淇辫繘鎵嶈~锛堟簻浜嗘簻浜嗭紝鍐欎唬鐮佸幓鍜級

搜索