首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

走進 Java 對象世界:封裝、== vs equals、英語術語與程序員成長感悟

     編輯:Java 綜合教學

為什麼要關注英語術語?

專業英語其實不難:語法簡單、詞彙多為高中級、專業術語有限且高頻。掌握核心詞彙能直接閱讀一手技術文檔、源碼註釋、國際社區討論。

中文英文發音提示
封裝Encapsulation/ɪnˌkæpsjʊˈleɪʃn/
繼承Inheritance/ɪnˈherɪtəns/
多態Polymorphism/ˌpɒlɪˈmɔːfɪzəm/
實參Arguments調用時傳入的具體值
形參Parameters方法定義時的變量

一、封裝:不只是語法糖

原因 1:數據合法性守門員

public class Person {
    private int age;
    public void setAge(int age) {
        if (age < 0) throw new IllegalArgumentException("年齡不能為負");
        this.age = age;
    }
}

外部無法繞過 setAge 直接賦值 -100。

原因 2:未來可變性 — 經典名言

The point to setters (and getters) is that you can change your mind later, without breaking anybody else's code!

遊戲充值下限從 0.1 元調整為 100 元:
若屬性 public,所有調用處需加 if 判斷;
若封裝 setPrice() 內部邏輯,僅修改一處,全局生效。

二、== vs equals:記住兩句話

場景==equals()
基本類型比較值不適用
引用類型比較地址值(是否同一對象)比較內容(需類重寫)

經典陷阱:字符串常量池

String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");

s1 == s2        // true  (常量池複用)
s1 == s3        // false (堆上新對象)
s1.equals(s3)   // true  (內容相同)

黃金法則

  1. Use == to compare two primitives, or to see if two references refer to the same object.
  2. Use the equals() method to see if two different objects are equal.

自定義類必須重寫 equals() + hashCode()

@Override public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Person person = (Person) o;
    return age == person.age && Objects.equals(name, person.name);
}
@Override public int hashCode() { return Objects.hash(name, age); }

三、對象屬性 vs 局部變量默認值

  • 對象屬性(字段):自動賦默認值(0、null、false)。
  • 局部變量(方法內):無默認值,必須顯式初始化,否則編譯報錯。

四、函數只能返回一個值?

Java/C/C++ 只能返回單值。想返回多值:
1. 封裝為對象/數組/集合。
2. Python 看似返回多值,實則返回 tuple(元組)。

五、給初學者的幾句話

When everything seems to be going against you, remember that the airplane takes off against the wind, not with it.
只有逆風,才能起飛。堅持寫代碼,哪怕每天多敲十行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved