Java學習筆記8(物件導向一),java學習筆記
面向過程的思想:遇到問題,想,我該怎麼解決這個問題?然後一步一步解決
物件導向的思想:遇到一件事的時候,思考,我該讓誰來做,至於他怎樣去做,不是我需要考慮的事情,只要最後做好就行
實際舉例:我們要組裝一台新電腦
面向過程:我們上網查詢各種硬體參數性價比,去商城觀察詢價,然後分析出最合適的,買好各種配件自己組裝好
物件導向:請一個懂組裝電腦的專家,告訴他我要一台新電腦,他組裝好之後給我
物件導向的好處:
1.更符合人們的思考習慣
2.物件導向更像是一個指揮者,而面向過程像執行者
3.物件導向的思維方式可以將複雜的問題簡單化
4.世界萬物皆是對象
舉例:用類的方式,描述現實中的汽車
定義汽車:
public class Car { //定義顏色 String color; //定義輪胎個數 int count; //定義跑的功能 public void run(){ System.out.println(color+"色的"+count+"輪車在跑"); }}
運行汽車:
public class CarTest { public static void main(String[] args) { Car c = new Car(); c.color = "黑"; c.count = 3; c.run(); }}
運行後:
對象的記憶體分析:
1.main方法進入棧中運行
2.建立一個Car類,在堆記憶體開一片空間,存入這個建立的對象,類的成員變數跟隨進入堆中,並賦予預設值(null,0)
3.這個記憶體位址傳給引用型變數c,即c指向記憶體中的這個對象
4.c指向的記憶體中的變數color,count被修改
5.方法run由對象c調用,進棧執行
6.run方法執行完畢,釋放棧記憶體
7.main方法結束,釋放棧記憶體
8.c變數消失,堆記憶體中的對象被清除,釋放記憶體
類和對象的關係:
類:對某一類事物的抽象描述
對象:用於表示現實中該事物的個體
類用於描述多個對象的共同特徵,相當於一個模板
對象是通過類建立出來的,一個類可以對應多個對象
寫在類中的變數是成員變數,寫在類的方法中的變數是局部變數,區別:
範圍
成員變數:作用範圍是整個類
局部變數:作用於方法內或語句內
預設值
成員變數:有預設值(null,0,0.0)
局部變數:沒有預設值,不賦值不能使用
記憶體位置
成員變數:跟隨對象進入堆記憶體中進行儲存
局部變數:跟隨自己的方法進入棧記憶體
生命週期
成員變數:跟隨對象,儲存在堆記憶體中,等待JVM清理,生命週期相對更長
局部變數:跟隨方法的,只要方法出棧,就不存在了,生命週期相對更短
物件導向三大特徵:封裝,繼承,多態
封裝表現:
方法就是一個最基本的封裝體
類其實也是一個封裝體
封裝的特點:
1.提高了代碼的複用性
2.隱藏了實現細節,還要對外提供可以訪問的方式,便於調用者的使用
3.提高了安全性
封裝的現實舉例:
一台電腦機箱,裡面有CPU,記憶體,硬碟等組件,如果散落在外邊,會有很多不安全因素,因此把它們放在機箱裡,並且提供各種插口供人們使用
private關鍵字:
定義一個類:
public class Person { //人的姓名年齡,成員變數 String name; int age; //說話功能 public void speak() { System.out.println(age+"歲的"+name+"在說話"); } }
測試:
public class PersonTest { public static void main(String[] args) { Person p = new Person(); p.age = -200; p.name = "張三"; p.speak(); }}
運行後:
不合常理,於是我們想,如果不能修改age變數,這個問題就可以解決,於是有了private關鍵字
被private修飾的成員,只能在自己的本類中使用
可以對私人的成員,提供公用的訪問方式:方法
public class Person { // 人的姓名年齡,成員變數 String name; private int age; // 定義方法,對age賦值 public void setAge(int a) { if (a < 0 || a > 100) { age = 20; } else { age = a; } } //定義方法,擷取age public int getAge(){ return age; } // 說話功能 public void speak() { System.out.println(age + "歲的" + name + "在說話"); }}
public class PersonTest { public static void main(String[] args) { Person p = new Person(); p.setAge(80); System.out.println(p.getAge()); p.name = "張三"; p.speak(); }}