首页 > 投稿 > 正文内容

静态与非静态方法互调详解:避免Java调用陷阱

投稿2025-05-27 13:39:38

馃鏈夋病鏈夐亣鍒拌繃锛氭槑鏄庡啓浜嗘柟娉曞嵈璋冧笉鍔紵

"鎴戠収鐫€鏁欑▼鍐欑殑浠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>
    }
}

鈥?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() : "";
    }
}

鈥?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();
    }
}

馃挕鈥?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爜鐨勭函娲佹€ф瘮浠€涔堥兘閲嶈~

搜索