Java对象方法调用详解:3种实现方式与代码实例
锛堝紑澶撮儴鍒嗭級
鍝庯紝浣犺鍜变滑瀛ava鐨勬椂鍊欙紝鏄笉鏄粡甯歌"瀵硅薄鏂规硶璋冪敤"杩欏嚑涓瓧缁曟檿锛熸槑鏄庣収鐫€涔︿笂鍐欎簡person.sayHello()
锛屼竴杩愯灏辨姤閿欙紵浠婂ぉ鍜变滑灏辨潵鎺板紑浜嗘弶纰庝簡鑱婅繖浜嬪効鈥斺€斺€?strong>鈥婮ava閲岃皟涓璞℃柟娉曞埌搴曟湁澶氬皯绉嶅Э鍔匡紵鈥?/strong>鈥?鎴戞暍鎵撹祵锛岀湅瀹岃繖绡囦綘鑷冲皯鑳借В閿?绉嶆柊鎶€鑳斤紒
锛堟鏂囬儴鍒嗭級
涓€銆佸厛鏁存槑鐧藉暐鏄璞″拰鏂规硶锛?/h2>
涓句釜鏍楀瓙馃尠锛氫綘瀹剁尗涓诲瓙灏辨槸涓€?strong>鈥嬪璞♀€?/strong>鈥嬶紝瀹冦€屽柕鍠靛彨銆嶈繖涓姩浣滃氨鏄€?strong>鈥嬫柟娉曗€?/strong>鈥嬨€傚湪Java閲岋紝鍐欎釜cat.meow()
灏辨槸鍦ㄨ鐚富瀛愭墽琛屻€屽柕鍠靛彨銆嶇殑鏂规硶銆?/p>
鈥?strong>鈥嬪叧閿偣璁扮墷鈥?/strong>鈥嬶細
- 鈥?strong>鈥嬪璞♀€?/strong>鈥嬫槸鐪熷疄瀛樺湪鐨勪釜浣擄紙姣斿
new Cat()
鍑烘潵鐨勯偅鍙尗锛?/li> - 鈥?strong>鈥嬫柟娉曗€?/strong>鈥嬫槸瀵硅薄鑳藉仛鐨勪簨鎯咃紙姣斿鍚冮キ銆佺潯瑙夈€佹媶瀹讹級
- 鈥?strong>鈥嬭皟鐢ㄢ€?/strong>鈥嬪氨鏄瀵硅薄骞叉椿锛堟瘮濡?code>cat.eat("灏忛奔骞?)锛?/li>
鏄笉鏄獊鐒惰寰?瀵硅薄鏂规硶璋冪敤"涔熸病閭d箞鐜勪箮锛?/p>
浜屻€佸Э鍔夸竴锛氭渶鐩寸櫧鐨勬櫘閫氳皟鐢?/h2>
鈥?strong>鈥嬮€傜敤鍦烘櫙鈥?/strong>鈥嬶細浣犵煡閬撳璞″叿浣撴湁鍟ユ柟娉曪紝涓旀柟娉曞悕涓嶄細鍙?/p>
java澶嶅埗// 鍏堟暣涓尗涓诲瓙瀵硅薄 Cat myCat = new Cat(); // 鐩存帴鐐瑰嚭鏂规硶鍚? myCat.meow(); // 鎵ц鍠靛柕鍙? myCat.eat("鍐诲共"); // 浼犲弬鍠傞
鈥?strong>鈥嬭繖鎷涚殑鐗圭偣鈥?/strong>鈥嬶細
- 绠€鍗曠矖鏆达紝鏂版墜鏉戝繀澶囨妧鑳?/li>
- 鈥?strong>鈥嬩唬鐮佸啓姝绘柟娉曞悕鈥?/strong>鈥嬶紝鏀逛釜鏂规硶鍚嶅氨寰楅噸鏂扮紪璇?/li>
- 瀹规槗閬囧埌
NullPointerException
锛堟瘮濡傚璞℃病鍒濆鍖栧氨璋冪敤锛?/li>
鈥?strong>鈥嬮伩鍧戞寚鍗椻€?/strong>鈥嬶細
java澶嶅埗// 閿欒绀鸿寖锛佸璞℃病鍒濆鍖栫洿鎺ヨ皟鐢? Cat nullCat = null; nullCat.meow(); // 鍟紒绌烘寚閽堝紓甯哥硦鑴镐笂浜?
涓夈€佸Э鍔夸簩锛氬弽灏勮皟鐢ㄢ€斺€擩ava鐨?榛戠鎶€"
鈥?strong>鈥嬮€傜敤鍦烘櫙鈥?/strong>鈥嬶細杩愯鏃舵墠鐭ラ亾瑕佽皟鐢ㄥ摢涓柟娉曪紝姣斿鍐欐鏋躲€佹彃浠剁郴缁?/p>
java澶嶅埗// 1. 鍏堟嬁鍒癈lass瀵硅薄锛堢浉褰撲簬鐚殑鍩哄洜鍥捐氨锛? Class catClass = Class.forName("com.example.Cat"); // 2. 鍒涘缓瀹炰緥锛堝彫鍞や竴鍙叿浣撶殑鐚級 Object cat = catClass.newInstance(); // 3. 鑾峰彇鏂规硶瀵硅薄锛堟壘鍒?鍠靛柕鍙?鐨勬寚浠わ級 Method meowMethod = catClass.getMethod("meow"); // 4. 鎵ц锛? meowMethod.invoke(cat); // 鐚細鍠祣
鈥?strong>鈥嬭繖鐜╂剰鍎挎湁澶氶獨鈥?/strong>鈥嬶細
- 鑳解€?strong>鈥嬪姩鎬佽皟鐢ㄦ湭鐭ユ柟娉曗€?/strong>鈥嬶紝鐏垫椿搴︽媺婊?/li>
- 鎬ц兘姣旀櫘閫氳皟鐢ㄥ樊锛堝浜嗗弽灏勮В鏋愭楠わ級
- 瀹规槗韪?code>NoSuchMethodException鐨勫潙
鈥?strong>鈥嬬湡瀹炴渚嬧€?/strong>鈥嬶細
鏌愭鎴戝啓涓伐鍏风被锛岀敤鍙嶅皠鍔ㄦ€佽皟鐢ㄤ笉鍚岀増鏈珹PI锛岀粨鏋滄墜鎶栨妸getDeclaredMethod
鎷奸敊浜嗗瓧姣嶏紝鐩存帴璁╃▼搴忓師鍦扮垎鐐葛煉モ€斺€旀墍浠ヨ鍙嶅皠铏藉ソ锛屸€?strong>鈥嬪紓甯稿鐞嗗繀椤昏窡涓娾€?/strong>鈥嬶紒
鍥涖€佸Э鍔夸笁锛氭帴鍙h皟鐢ㄢ€斺€旈珮鎵嬨伄浼橀泤鏂规
鈥?strong>鈥嬮€傜敤鍦烘櫙鈥?/strong>鈥嬶細闇€瑕佺粺涓€绠$悊澶氱瀵硅薄鐨勮涓猴紝姣斿鏀粯鎺ュ彛
java澶嶅埗// 瀹氫箟銆屼細鍙€嶇殑鎺ュ彛 interface CanMakeSound { void makeSound(); } // 璁╃尗鍜岀嫍閮藉疄鐜拌繖涓帴鍙? class Cat implements CanMakeSound { public void makeSound() { System.out.println("鍠祣"); } } class Dog implements CanMakeSound { public void makeSound() { System.out.println("姹紒"); } } // 缁熶竴璋冪敤 public static void main(String[] args) { CanMakeSound[] pets = {new Cat(), new Dog()}; for (CanMakeSound pet : pets) { pet.makeSound(); // 涓嶇敤绠″叿浣撴槸鐚槸鐙? } }
鈥?strong>鈥嬩负浠€涔堣杩欐槸浼橀泤銇亾鈥?/strong>鈥嬶細
- 绗﹀悎鈥?strong>鈥嬮潰鍚戞帴鍙g紪绋嬧€?/strong>鈥嬬殑鎬濇兂
- 鏂板鍔ㄧ墿绫诲瀷鏃朵笉鐢ㄦ敼璋冪敤閫昏緫
- 浣嗛渶瑕佹彁鍓嶈璁″ソ鎺ュ彛瑙勮寖
浜斻€佷釜浜虹璐ф椂闂?/h2>
瀛︿簡杩欎笁绉嶅Э鍔匡紝浼拌鏈変汉瑕侀棶锛?鎴戣鐢ㄥ摢绉嶏紵"
- 鈥?strong>鈥嬫柊鎵嬫棩甯稿紑鍙戔€?/strong>鈥嬶細鏃犺剳閫夆€?strong>鈥嬫櫘閫氳皟鐢ㄢ€?/strong>鈥嬶紝绠€鍗曚笉瀹规槗鍑洪敊
- 鈥?strong>鈥嬪啓閫氱敤宸ュ叿绫烩€?/strong>鈥嬶細鍙嶅皠璋冪敤鏄湡棣欙紝浣嗚寰楃敤
try-catch
鍖呬綇 - 鈥?strong>鈥嬪ぇ鍨嬮」鐩璁♀€?/strong>鈥嬶細鎺ュ彛璋冪敤鑳借浠g爜鍍忎箰楂樼Н鏈ㄤ竴鏍风伒娲绘嫾鎺?/li>
鎴戣杩囧お澶氫汉娌夎糠鍙嶅皠鐨?楂樼骇鎰?锛岀粨鏋滄妸椤圭洰鎼炲緱鍍忚湗铔涚綉涓€鏍烽毦缁存姢銆傗€?strong>鈥嬫妧鏈€夊瀷灏卞儚绌胯。鏈嶁€斺€斿悎閫傛瘮鏃堕鏇撮噸瑕佲€?/strong>鈥嬶紝浣犺鏄笉鏄繖涓悊锛?/p>
锛堢粨灏鹃儴鍒嗭級
涓嬫鍐嶇湅鍒?code>object.method()杩欑浠g爜锛屾槸涓嶆槸瑙夊緱瀹冪獊鐒剁湁娓呯洰绉€浜嗭紵鍏跺疄Java鐨勬柟娉曡皟鐢ㄥ氨鍍忚涓嶅悓鐨勪汉骞叉椿鈥斺€?/p>
- 鏅€氳皟鐢ㄦ槸鐩存帴鍠婏細"寮犱笁锛屽幓鍊掕尪锛?
- 鍙嶅皠璋冪敤鏄嬁鐫€澶у枃鍙枈锛?閭d釜绌跨孩琛f湇鎴寸溂闀滅殑锛屽灏辨槸浣狅紝鍊掕尪锛?
- 鎺ュ彛璋冪敤鍒欐槸璇达細"鎵€鏈夊悗鍕ょ粍鐨勫悓蹇楋紝鎸夋帓鐝〃琛屽姩锛?
鍒€ョ潃姝昏纭儗锛屸€?strong>鈥嬪鍐欏嚑涓皬渚嬪瓙鈥?/strong>鈥嬶紝鎶婁唬鐮佽窇璧锋潵鐪嬬湅鎶ラ敊淇℃伅銆傜浉淇℃垜锛屼綘鐘繃鐨勬瘡涓€涓┖鎸囬拡寮傚父锛岄兘浼氬彉鎴愪互鍚庤皟钖殑搴曟皵锛?/p>