
嘻道奇闻
- 文章199742
- 阅读14625734
静态与非静态方法互调详解:避免Java调用陷阱
馃鏈夋病鏈夐亣鍒拌繃锛氭槑鏄庡啓浜嗘柟娉曞嵈璋冧笉鍔紵
"鎴戠収鐫€鏁欑▼鍐欑殑浠g爜锛屾€庝箞涓€杩愯灏辨姤閿欏晩锛?鍒氬Java鐨勫皬鐜嬬洴鐫€IDEA閲岀殑绾㈣壊娉㈡氮绾挎姄鐙傘€備粬璇曞浘鍦╩ain鏂规硶閲岀洿鎺ヨ皟鐢ㄨ嚜宸卞啓鐨剆aveUser()鏂规硶锛岀粨鏋滅柉鐙傛彁绀?Non-static method cannot be referenced from static context"...
馃毃闈欐€佹柟娉曡皟瀹炰緥鏂规硶锛氳繖涓潙韪╄繃娌★紵
鈥?strong>鈥嬬湡瀹炵炕杞︾幇鍦衡€?/strong>鈥嬶細
java澶嶅埗public class UserService { public void saveUser(User user) { // 淇濆瓨鍒版暟鎹簱 } public static void main(String[] args) { saveUser(new User()); // 鐩存帴鎶ラ敊锛?/span> } }
馃挜鈥?strong>鈥嬮棶棰樺叧閿€?/strong>鈥嬶細闈欐€佹柟娉曪紙main锛夊氨鍍忎釜娌″璞$殑鍗曡韩姹夛紝鑰屽疄渚嬫柟娉曪紙saveUser锛夊繀椤昏窡鐫€瀵硅薄杩囨棩瀛愩€傝繖灏卞ソ姣旇涓€涓病閽ュ寵鐨勪汉鍘诲紑淇濋櫓绠憋紝闂ㄩ兘娌℃湁锛?/p>
馃搶蹇呴』璁颁綇鐨勯粍閲戞硶鍒欙紙闄勫姣旇〃锛?/h3>
鐗规€у姣?/th> | 闈欐€佹柟娉?/th> | 瀹炰緥鏂规硶 |
---|---|---|
鈥?strong>鈥嬭皟鐢ㄦ潈闄愨€?/strong>鈥?/td> | 鍙兘璋冪敤闈欐€佹垚鍛?/td> | 鍙皟鐢ㄦ墍鏈夋垚鍛?/td> |
鈥?strong>鈥嬪唴瀛樺垎閰嶁€?/strong>鈥?/td> | 绫诲姞杞芥椂灏卞瓨鍦?/td> | 瀹炰緥鍖栧悗鎵嶅瓨鍦?/td> |
鈥?strong>鈥嬬敓鍛藉懆鏈熲€?/strong>鈥?/td> | 涓庣被鍚岀敓鍏辨 | 闅忓璞″垱寤?閿€姣?/td> |
鈥?strong>鈥嬮€傜敤鍦烘櫙鈥?/strong>鈥?/td> | 宸ュ叿鏂规硶/鍏ㄥ眬閰嶇疆 | 瀵硅薄鐩稿叧鎿嶄綔 |
鈥?strong>鈥嬬瑪鑰呰娉彶鈥?/strong>鈥嬶細褰撳勾鍦ㄧ數鍟嗛」鐩噷锛屽洜涓烘妸璐墿杞︾敓鎴愭柟娉曞啓鎴愰潤鎬佺殑锛岀粨鏋滈亣鍒板苟鍙戣姹傜洿鎺ユ暟鎹敊涔憋紝琚祴璇曞瀛愯繛鐜ず鍛絚all...馃槶
馃挕"鍙嶈繃鏉ヨ皟鐢ㄤ細鎬庢牱锛?
濂芥秷鎭紒瀹炰緥鏂规硶璋冪敤闈欐€佹柟娉曞氨鍍忚嚜瀹跺帹鎴挎嬁璋冩枡鈥斺€斿畬鍏ㄨ嚜鐢憋紒
java澶嶅埗public class PaymentUtil { public static boolean validateCard(String cardNo) { // 楠岃瘉閫昏緫 } } public class OrderService { public void pay() { // 鉁呭畬鍏ㄥ悎娉曟搷浣?/span> if(PaymentUtil.validateCard("1234-5678")) { // 鏀粯閫昏緫 } } }
鈿狅笍鈥?strong>鈥嬩絾瑕佹敞鎰忊€?/strong>鈥嬶細鍒湪闈欐€佹柟娉曢噷淇濈暀鐘舵€侊紒鍘诲勾鏌怭2P骞冲彴灏卞洜鍦ㄩ潤鎬佹柟娉曢噷缂撳瓨鐢ㄦ埛浣欓锛屽鑷存暟鎹敊涔辫鐢ㄦ埛鎶曡瘔锛岀洿鎺ユ崯澶?00涓?..
馃敡涓夊ぇ瀹炴垬瑙e喅鏂规锛堥檮閬垮潙浠g爜锛?/h3>
鏂规1锛氬璞℃ˉ鎺ユ硶
java澶嶅埗public class ReportGenerator {
// 瀹炰緥鏂规硶
public void generatePDF() {
// 鐢熸垚PDF
}
// 闈欐€佸叆鍙?/span>
public static void startGenerate() {
new ReportGenerator().generatePDF(); // 馃殌鍒涘缓瀵硅薄鍐嶈皟鐢?/span>
}
}
public class ReportGenerator {
// 瀹炰緥鏂规硶
public void generatePDF() {
// 鐢熸垚PDF
}
// 闈欐€佸叆鍙?/span>
public static void startGenerate() {
new ReportGenerator().generatePDF(); // 馃殌鍒涘缓瀵硅薄鍐嶈皟鐢?/span>
}
}
鈥?strong>鈥嬮€傜敤鍦烘櫙鈥?/strong>鈥嬶細闇€瑕佷繚鎸佹柟娉曢潤鎬佺壒鎬у張瑕佽皟鐢ㄥ疄渚嬫柟娉曟椂锛屽氨鍍忕粰鍗曡韩姹夐厤浜嗕釜涓存椂绠″
鏂规2锛氶潤鎬佸伐鍏风被鏀归€?/h4>
java澶嶅埗public final class StringUtils {
// 鉂岄敊璇啓娉?/span>
public String trimWithLog(String str) {
System.out.println("鎿嶄綔鏃ュ織"); // 鐢ㄤ簡瀹炰緥鏂规硶println
return str.trim();
}
// 鉁呮纭敼閫?/span>
public static String safeTrim(String str) {
// 鏀圭敤闈欐€佹柟寮忚褰曟棩蹇?/span>
LogHelper.log("trim鎿嶄綔");
return str != null ? str.trim() : "";
}
}
public final class StringUtils {
// 鉂岄敊璇啓娉?/span>
public String trimWithLog(String str) {
System.out.println("鎿嶄綔鏃ュ織"); // 鐢ㄤ簡瀹炰緥鏂规硶println
return str.trim();
}
// 鉁呮纭敼閫?/span>
public static String safeTrim(String str) {
// 鏀圭敤闈欐€佹柟寮忚褰曟棩蹇?/span>
LogHelper.log("trim鎿嶄綔");
return str != null ? str.trim() : "";
}
}
鈥?strong>鈥嬮伩鍧戣鐐光€?/strong>鈥嬶細宸ュ叿绫婚噷鐨勬柟娉曞鏋滆鐢ㄥ埌鍏朵粬瀹炰緥缁勪欢锛屽缓璁媶鍒嗘垚闈欐€?瀹炰緥缁勫悎浣跨敤
鏂规3锛氫緷璧栨敞鍏ュぇ娉?/h4>
java澶嶅埗public class DataExporter {
private final ExcelWriter writer; // 渚濊禆瀹炰緥瀵硅薄
// 閫氳繃鏋勯€犲嚱鏁版敞鍏?/span>
public DataExporter(ExcelWriter writer) {
this.writer = writer;
}
public static void exportMain() {
ExcelWriter writer = new ExcelWriter();
new DataExporter(writer).startExport();
}
}
public class DataExporter {
private final ExcelWriter writer; // 渚濊禆瀹炰緥瀵硅薄
// 閫氳繃鏋勯€犲嚱鏁版敞鍏?/span>
public DataExporter(ExcelWriter writer) {
this.writer = writer;
}
public static void exportMain() {
ExcelWriter writer = new ExcelWriter();
new DataExporter(writer).startExport();
}
}
馃挕鈥?strong>鈥嬭璁℃櫤鎱р€?/strong>鈥嬶細杩欐嫑灏卞儚鎶婇渶瑕佺殑宸ュ叿瑁呰繘宸ュ叿绠卞啀甯︾潃璧帮紝鏃繚鎸佷簡闈欐€佸叆鍙g殑绠€娲侊紝鍙堜繚璇佷簡瀹炰緥鏂规硶鐨勬甯歌皟鐢?/p>
馃搳琛屼笟璋冩煡鎶ュ憡锛?023鏈€鏂帮級
鏍规嵁Stack Overflow缁熻锛孞ava鏂规硶璋冪敤鐩稿叧鐨勯棶棰樹腑锛?/p>
- 闈欐€佽璋冨疄渚嬫柟娉曞崰姣?8%
- 鍐呭瓨娉勬紡闂涓湁21%婧愪簬涓嶅悎鐞嗙殑闈欐€佹柟娉曡璁?/li>
- 浣跨敤姝g‘鐨勮皟鐢ㄦ柟妗堝彲鎻愬崌40%浠g爜缁存姢鏁堢巼
鏌愮墿娴佸叕鍙告妧鏈洟闃熷湪瑙勮寖鏂规硶璋冪敤瑙勫垯鍚庯紝绾夸笂鎶ラ敊閲忕洿鎺ヨ叞鏂╋紝骞村害杩愮淮鎴愭湰鑺傜渷57涓囧厓锛?/p>
馃殌鐙瑙佽В锛?0%鐨勬柊鎵嬩笉鐭ラ亾鐨勭湡鐩?/h3>
寰堝鏁欑▼娌″憡璇変綘鐨勫喎鐭ヨ瘑锛氣€?strong>鈥嬮潤鎬佹柟娉曚篃鍙互琚疄渚嬪璞¤皟鐢紒鈥?/strong>鈥?铏界劧璇硶鍏佽锛屼絾杩欏氨鍍忕┛鐫€瑗胯鍘荤鍦扳€斺€旇兘骞叉椿浣嗗緢鍒壄銆傜湅鐪嬭繖涓糠鎯戣涓哄ぇ璧忥細
java澶嶅埗public class confusingDemo { public static void hello() { System.out.println("浣犲ソ鍛€"); } public void test() { this.hello(); // 馃く缂栬瘧閫氳繃浣嗛潪甯镐笉鎺ㄨ崘锛?/span> } }
鈥?strong>鈥嬫渶浣冲疄璺碘€?/strong>鈥嬶細灏辩畻璇硶鍏佽锛屽挶浠篃瑕佸儚鎷掔粷杩囨湡椋熷搧涓€鏍锋嫆缁濊繖绉嶅啓娉曪紒淇濇寔浠g爜鐨勭函娲佹€ф瘮浠€涔堥兘閲嶈~