面向对象
一. 面向對象的思想
- 面向對象區別于面向過程而存在的, 在早期的編程語言中, 我們是先固定功能,然后根據功能來編寫代碼, 每一個功能對應一段代碼. 這段代碼只能完成本功能
- 這樣做的方式及其繁瑣, 代碼量太大, 而且檢查代碼會發給巨額的時間, 為了提高效率, 人們將一些可以重復使用的代碼提取出來, 封裝成一個方法, 這樣就達到 了重復使用的目的
- 再后來, 我們將一些性質相近的方法放到一起, 就出現了一個類. 我們將可以完成一系列功能的類稱之為對象
- 所謂的對象, 就是具有一定功能的獨立個體
- 不再局限于完成固定功能, 不在局限于代碼的實現, 以創造具備某些功能的個 體, 讓這些個體去完成我們的指令為編程方式, 這就是面向對象的思想
- 早期的編程語言更像是程序員自己去執行命令, 比如說掃地, 我需要先拿到掃把,然后從一個地方開始, 揮舞掃把, 到一個地方結束, 然后回頭,重復掃地動作,直到結束,然后將掃把放回原處. 每次掃地都需要重復這樣的步驟
- 面向對象的變成語言更像是創造一個仆人, 你只需要告訴仆人, 將那個地方打掃 干凈,仆人就會自己去做這件事.中間的步驟我只要設定一次就行. 這樣的結果就是, 程序員得到了解放
- 更符合人類的思想習慣
- 將復雜的事情簡單化
- 將我們從執行者變成了指揮者
- 就是不斷的創造對象, 使用對象,指揮對象去做事情
- 面向對象編程的設計其實就是在管理和維護對象之間的關系
- 封裝 : 分類整理 和 保護
- 繼承
- 多態
- 抽象
二. 類的使用
定義
- 我們學習編程的目的就是為了將生活中的事和物用程序語言描述出來
如何描述
- 生活中的描述
- 屬性 就是該實物的信息(事物身上的名詞)
- 行為 就是該事物能夠做什么(事物身上的動詞)
- java中的描述
- 成員變量 就是事物的屬性
- 成員方法 就是事物的行為
- 我們描述的是一類事物
如何用java定義
- 成員變量 等同于局部變量 , 只是位置發生了變化 , 在類中, 方法外
- 成員方法 等同于以前定義的方法 , static 暫時不要了
演示
-
定義學生類
- 學生有學號, 姓名, 年齡, 班級 , 成績
- 學生會吃飯, 睡覺, 學習
測試題
- 定義手機類
- 手機有品牌, 型號屬性
- 手機有上網, 打電話的功能
- 定義老師類
- 老師有 姓名, 年齡, 顏值屬性
- 老師有 教學,審批作業的功能
注意事項
-
類的作用是用來封裝變量和方法
-
類是死物, 不能直接使用, 類似于圖紙
三. 對象
定義
- 在java中, 我們想要使用定義的類來做工作, 就必須先將這個類激活
- 激活之后的類叫做對象, 一個類可以有多個對應的對象,就像是拿圖紙造出實物
格式
- 通過new關鍵字來創建對象
- 類名 對象名 = new 類名();
- Student student = new Student();
對象中成員的調用
- 通過對象名來調用
- 對象名.變量名
- 對象名.方法名();
演示
public static void main(String[] args) {Student student = new Student();//調用對象的屬性String name = student.name;System.out.println(name);//調用對象的方法student.eat();student.sleep();student.study(); }對象中屬性值
- 定義類的時候, 如果類中的屬性有值, 創建的對象中的屬性也會是這個值
- 定義類的時候, 如果類中的屬性沒有具體指, 創建的對象中的屬性會有一個默認值
- 一般來說, 類描述的應該是一類事物, 而不應該簡簡單單是一個具體的事物
對象屬性賦值
-
我可以對對象中屬性的值作出更改
-
對象名.屬性名 = 值;
public static void main(String[] args) {//一個對象名引用一個實例對象Student student = new Student();//打印結果是小明System.out.println(student.name);//給對象賦值student.name = "小剛";//打印結果是小剛System.out.println(student.name); }
測試題
- 定義汽車類的屬性 品牌 , 顏色 , 長度
- 定義汽車類的方法, 點火, 開動
- 創建不同品牌的汽車實例, 并調用方法
測試題
- 定義人類的屬性, 姓名, 年齡, 性別
- 定義人類的方法, 工作, 睡覺, 自我介紹
- 創建不同的人的實例對象, 并調用方法,打印屬性數據
四. 對象和類的內存
存儲位置
- 類存儲于內存中的方法區內, 只有一份
- new出來的對象存儲于內存中的堆內存中, 同一個類的對象可以有多個
使用問題
- 類無法直接使用, 是一個骨架,圖紙
- 對象可以使用其中的成員, 是活的, 具體實物
引用問題
- 一個對象名引用一個實例對象
- 多個對象名引用不同的實例對象
- 多個對象名引用相同的實例對象
五. 成員變量和局部變量
定義
- 成員變量屬于類或對象, 使用對象名可以直接掉用
- 局部變量屬于方法, 對象無法直接調用, 只能在運行方法的時候運行
區別
-
在類中的位置不同
- 成員變量:在類中方法外
- 局部變量:定義在方法中或者方法聲明上
-
在內存中的位置不同
- 成員變量:在堆內存(成員變量屬于對象,對象進堆內存)
- 局部變量:在棧內存(局部變量屬于方法,方法進棧內存)
-
生命周期不同 (誕生 - 活著 - 消亡)
- 成員變量 : 隨著對象的創建而存在 , 隨著對象的消亡而消亡
- 局部變量 : 隨著方法的調用而存在 , 隨著方法的結束而消亡
-
初始化值不同
- 成員變量 : 有默認值, 是在對象創建的過程中jvm設置的默認值
- 局部變量 : 沒有默認值, 必須在使用之前賦值
注意事項
- 局部變量名稱可以和成員變量名稱一樣,在方法中使用的時候,采用的是就近原則。
- 基本數據類型變量包括哪些:byte,short,int,long,float,double,boolean,char
- 引用數據類型變量包括哪些:數組,類,接口,枚舉,注解
測試題
- 判斷結果
- 判斷結果
六. 匿名對象
定義
- 沒有名字的對象
應用場景
- 當前方法內, 對象只使用一次的情況
演示
- 司機開車
七. private 關鍵字
定義
- 一個權限修飾符
- 可以修飾成員變量和成員方法
- 被其修飾的成員只能在本類中使用
作用
- 限定使用范圍, 禁止別人調用類的成員
- 保證數據的安全性, 可以通過方法中的代碼對有害數據進行過濾
演示
- 對年齡的有害信息進行過濾
JavaBean POJO
- 類中的屬性全部私有化
- 通過getter 和 setter方法進行設置
- 提供toString方法用來描述對象
- javabean的主要作用是運送數據
測試題
-
判斷結果
public class Person {private String name = "小明";public void method(){System.out.println(name);//判斷是或否成立} }public static void main(String[] args) {Person person = new Person();person.method(); } -
判斷結果
public class Person {private String name = "小明";private void method(){System.out.println(name);}}public static void main(String[] args) {Person person = new Person();person.method(); }
八. this關鍵字
定義
- 代表本類對象的引用
- 用來區分重名的成員變量和局部變量
注意事項
- 只能在本類方法中使用
- 本類的靜態方法中無法使用
- 當我們創建對象并調用對象的方法時, 方法中如果出現了this,指的調用這個方法的對象
- 本類對象中的方法調用本類中的其他方法時, 其實被調用方法的前面就有一個省略的this
演示
public class Person {private String name = "小明";public void method(){String name = "李四";System.out.println(name);System.out.println(this.name);//這里就有一個省略的thismethod2();//this.method2();}public void method2(){System.out.println("方法2");} }public static void main(String[] args) {Person person = new Person();person.method(); }總結
定義類
類的作用 : 對變量和方法進行封裝
單獨封裝方法
單獨封裝變量
封裝方法和變量
對象
類是一個模板, 不能直接使用, 需要創建對象
類名 對象名 = new 類名();
使用對象
對象名.成員變量
對象名.方法()
面向對象
我們java開發人員每天都在跟對象打交道, 所以我們稱之為 面向對象編程
成員變量和局部變量
書寫的位置不同 成員變量在類中方法外, 局部變量在方法內
內存中的位置不同 : 成員變量在堆, 局部變量在棧
生命周期不同 : 成員變量隨著對象走, 局部變量隨著方法走(方法進棧了才有意義)
初始化值不同 : 成員變量有默認值, 局部變量沒有, 必須手動賦值
匿名對象
當一個對象在當前方法內只使用一次, 那么我們可以直接使用, 不用定義對象名
優點 : 少寫代碼
缺點 : 對象只能使用一次
private關鍵字
私有化 ,保護成員
JavaBean : 但一個類只被用于存儲運輸數據, 沒有任何功能性方法 ,
? 一般來說, 我們需要對所有成員變量私有化, 提供getter和setter方法,提供toString方法
? 這樣類的創建的對象, 我們稱之為 JavaBean
this
用于區分成員變量和局部變量
作業
- 使用編程語言描述小狗,并調用方法打印屬性
- 屬性 : 品種 , 性別 , 年齡
- 方法 : 吃飯, 看門 , toString()
- 使用編程語言描述桌子, 并調用方法
- 屬性 : 材質, 高度 , 形狀
- 方法 : 存放物品 , toString()
- 創建一個動物類
- 屬性 : 物種, 年齡, 性別
- 方法 : 吃飯, 睡覺
- 創建小貓和小狗兩個對象, 分別調用其方法
- 創建一個人類
- 屬性 : 姓名, 年齡, 性別
- 方法 : 睡覺, 工作 , 自我介紹
- 定義不同的方法內容, 并調用
- 學校有教學功能, 但是需要先聘請老師來授課, 現在一個學校有java , h5兩門課程, 編程模擬
- 創建一個學生的javabean, 從鍵盤接受數據存儲到學生對象中,打印學生對象信息
總結
- 上一篇: 具有万有引力加速机理的布谷鸟搜索算法
- 下一篇: 嵌入式系统中的FLASH