面向對象基礎
1. 類和對象
(1) 示例:
public class Student {String name = "張三";int age = 23;public void study() {System.out.println("學習 Java");}public void eat() {System.out.println("吃飯");}
}
public class Test {public static void main(String[] args) {Student stu = new Student(); // 創建對象stu.study(); // 使用對象的成員方法stu.eat(); // 使用對象的成員方法}
}
(2) 自動對齊快捷鍵
打開需要格式化的 Java 文件后,按下快捷鍵:
- Windows/Linux:
Ctrl + Alt + L
(3) private 關鍵字
作用:private 可以修飾成員(成員變量和成員方法),作用是保護成員不被別的類使用,被private修飾的成員只能在本類中才能訪問。
使用:針對private修飾的成員變量,如果需要被其他類使用,應提供相應的操作。
(1)提供 get 變量名() 方法,用于獲取成員變量的值,方法用public修飾;
(2)提供 set 變量名(參數)方法,用于設置成員變量的值,方法用public修飾。
示例:
public class GirlFriend {private String name;private int age;private String gender;public void setName(String n) {name = n;}public String getName() {return name;}
}
Q1:為什么方法前沒有?static
?修飾?
- 定義:
static
?修飾的成員(變量或方法)屬于類本身,而非類的實例(對象)。 setName
?和?getName
?操作的是對象的非靜態成員變量?name
(每個對象的?name
?是獨有的),必須通過對象實例調用,因此不能用?static
?修飾。
Q2:setter 與 getter 方法的設計邏輯
setter 方法(如?
setName
):
作用是設置成員變量的值,通常接收參數并賦值,無需返回結果,因此用?void
,且無?static
(依賴對象實例)。getter 方法(如?
getName
):
作用是獲取成員變量的值,需要將值返回給調用者,因此必須指定返回值類型(與成員變量類型一致),且無?static
(依賴對象實例)。
Q3:為什么使用 name = n?
name
?是類中定義的成員變量(屬于對象的屬性),作用域是整個類。n
?是方法?setName
?的參數變量,作用域僅限于當前方法內部。
這句代碼的意思是:把外部傳入的參數?n
?的值,保存到當前對象的?name
?成員變量中。
(4) this 關鍵字
- 用來解決局部變量與成員變量同名的問題,明確區分兩者。
public class Student {String name;public void setName(String name) {this.name = name; // 使用 this 關鍵字來區分成員變量和局部變量}
}
2. 構造方法
(1) 定義:構造方法用于初始化對象的成員變量。構造方法的名稱必須與類名相同,且沒有返回值類型。
(2) 注意事項:
① 構造方法的創建:如果沒有定義構造方法,系統將給出一個默認的無參數構造方法;如果定義了構造方法,系統將不再提供默認的構造方法。
②?構造方法的重載:如果自定義了帶參構造方法,還要使用無參數構造方法,就必須再寫一個無參數構造方法。
public class Student {String name;int age;public Student() { // 無參數構造方法this.name = "默認";this.age = 18;}public Student(String name, int age) { // 帶參數構造方法this.name = name;this.age = age;}
}
③ 推薦的使用方式:無論是否使用,都手工書寫無參數構造方法。
3. JavaBean 的規范
(1)?類的訪問權限:public 修飾
(2)?成員變量:私有(private)封裝
(3)?訪問方法:提供公共的 getter 和 setter
(4)?構造方法:必須包含無參數構造
4. 成員變量和局部變量
(1)?成員變量:類中方法外的變量。
(2)?局部變量:類中方法中的變量。
(3)?成員變量和局部變量的區別: