類與對象
1.面向對象思想
就是將做一件事(實現某個功能)通過創建對象,然後調用對象的行爲來實現
2.與面向過程(思想)的區別
面向過程是自己一步一步的操作去實現功能,面向對象是把實現功能的部分交給對象的屬性和行爲去實現
3.類
具有相關屬性和行爲的一種事物的集合,比如說寵物貓、裝水的杯子...等等
例如:寵物貓:
屬性:顏色、重量...
行爲:爬樹、抓老鼠...
4.類的定義
格式:
public class ClassName {
//成員變量
//成員方法
}
5.對象
每一種事物都有自己的屬性和行爲,好比如寵物貓,這是一個總的概述,他有自己的屬性(品種、顏色、重量、叫聲...),而對象就是指明的一隻貓,他的各種“屬性”都是確定的,那麼對於寵物貓這個總述,這隻貓就是一個“對象”。
6.對象的創建和使用
創建格式:
類名 對象名 = new 類名();
使用格式:
對象名.成員變量;
對象名.成員方法();
7.類與對象的關係
類是對一類事物的描述,是抽象的。 對象是一類事物的實例,是具體的。 類是對象的模板,對象是類的實體。
類是對一類事物總的概括,對象是具體的哪一個
8.成員變量的默認值
整數: 0
浮點數: 0.0
boolean: false
字符: ‘\u0000’(空字符)
字符串: null
9.成員變量與局部變量的區別
1定義位置不同:
成員變量定義在類中方法外,局部變量定義在方法內
2默認值不同:
成員變量的默認值如上,局部變量不賦值不可以調用
3內存中的位置不同:
對象是new出來,對象在堆裏,成員變量跟着對象在堆裏面,棧是保存變量,運行方法,局部變量跟着方法在棧裏
4生命週期不同:
對象是new出來,跟對象誕生,所以成員變量跟着對象死亡,局部變量跟着方法的運行誕生,跟着方法死亡
封裝
1.封裝
將屬性隱藏起來,相當於建立起了一層保護屏障,防止數據和代碼被其他類隨意訪問。如果要訪問,必須通過指定的方式。讓代碼更容易理解和維護,增加了安全性。
2.封裝的方法
使用private(私有的)關鍵字修飾成員變量或成員方法。
3.設置器
getXxx方法,設置訪問封裝的成員變量值
4.訪問器
getXxx方法,獲取封裝的成員變量值
例子:
5.IDEA自動生成getters/setter
右鍵選擇,GenerateàGetter and Setterà選擇成員變量點擊OK
快捷鍵:ALT + insert
6.成員變量爲boolean的訪問器
isXxx訪問器
setXxx 設置器
構造方法
1.封裝的優化1:this關鍵字
this代表所在類的當前對象的引用(地址值),即對象自己的引用。(方法被哪個對象調用,方法中的this就代表那個對象)
方法參數中的變量名和成員變量的變量名相同時,用this關鍵字來區分
使用格式:
this.成員變量名;
2.封裝的優化2:構造方法
1.當一個對象被創建時候,構造方法用來初始化該對象,給對象的成員變量賦初始值
2.如果沒有定義構造方法,Java默認贈送一個無參的構造方法,如果創建了則不贈送
3.構造方法的寫法上,方法名與它所在的類名相同。它沒有返回值,所以不需要返回值類型,不需要void。
3.封裝的優化3:構造方法-重載
和方法重載一樣,參數列表不同,方法名相同
1.只能new調用,用來創建對象
2.給成員變量賦值
開發中一般 寫一個無參構造方法,寫一個全參構造方法
4.IDEA自動生成構造方法
右鍵選擇 generateàconstructorà選擇成員變量(構造方法的參數)
可以參考自動生成get、set方法的圖示
5.構造方法注意事項
1.自己不定義構造方法,系統會送一個 無參
2.自己定義了構造方法,系統不送
3.構造方法可以重載,項目中,寫一個無參,全參
6.標準的JavaBean類
a) 成員變量必須private
b) 配套get/set
c) 構造方法
d) 其他方法
示例:測試類如下
package com.itheima.day06;
public class Test01 {
//兩個成員變量
private String name;
private int age;
//無參數的構造方法
public Test01() {
System.out.println("這裏是無參構造方法,用來初始化變量");
}
//有參數(全參)的構造方法
public Test01(String name, int age) {
this.name = name;
this.age = age;
}
//成員變量name配套的get方法
public String getName() {
return name;
}
//成員變量name配套的set方法
public void setName(String name) {
this.name = name;
}
//成員變量age配套的get方法
public int getAge() {
return age;
}
//成員變量age配套的set方法
public void setAge(int age) {
this.age = age;
}
//其他方法
public void show(Test01 test){
System.out.println("姓名:"+name+"年齡:"+age);
System.out.println("這是類中的其他方法,可以把創建的對象傳遞過來");
System.out.println("這個方法裏面可以無條件調用private的成員變量");
}
public static void main(String[] args) {
}
}
調用如下:
package com.itheima.day06;
public class Test02 {
public static void main(String[] args) {
Test01 test1 = new Test01();//創建一個對象,調用無參構造方法
Test01 test2 = new Test01("張三",18);
test1.show(test1);
test2.show(test2);
}
}
輸出如下: