面向過程思想概述
我們來回想一下,我們完成一個需求的步驟:首先是搞清楚我們要做什麼,然後在分析怎麼做,最後我們再代碼體現。一步一步去實現,而具體的每一步都需要我們去實現和操作。這些步驟相互調用和協作,完成我們的需求。
在上面的每一個具體步驟中我們都是參與者,並且需要面對具體的每一個步驟和過程,這就是面向過程最直接的體現。
那麼什麼是面向過程開發呢? 面向過程開發,其實就是面向着具體的每一個步驟和過程,把每一個步驟和過程完成,然後由這些功能方法相互調用,完成需求。
面向過程的代表語言:C語言
當需求單一,或者簡單時,我們一步一步去操作沒問題,並且效率也挺高。可隨着需求的更改,功能的增多,發現需要面對每一個步驟很麻煩了,這時就開始思索,能不能把這些步驟和功能在進行封裝,封裝時根據不同的功能,進行不同的封裝,功能類似的封裝在一起。這樣結構就清晰了很多。用的時候,找到對應的類就可以了。這就是面向對象的思想。接下來我們看看面向對象到底是什麼?
面向對象
-
面向對象思想概述
- 面向對象是基於面向過程的編程思想
-
面向對象思想特點
- 是一種更符合我們思想習慣的思想
- 可以將複雜的事情簡單化
- 將我們從執行者變成了指揮者
- 角色發生了轉換
-
面向對象開發
- 就是不斷的創建對象,使用對象,指揮對象做事情。
-
面向對象設計
- 其實就是在管理和維護對象之間的關係。
-
面向對象特徵
- 封裝(encapsulation)
- 繼承(inheritance)
- 多態(polymorphism)
類和對象
類:是一組相關的屬性和行爲的集合
對象:是該類事物的具體體現
- 舉例:
類 學生
對象 班長就是一個對象
學生類
如何定義
按照事物到類的過程一步步分析
如何使用
創建對象:
類名 對象名 = new 類名();
對象名.成員變量
對象名.成員方法
成員變量和局部變量
- 在類中的位置不同
- 成員變量 類中方法外
- 局部變量 方法內或者方法聲明上
- 在內存中的位置不同
- 成員變量 堆內存
- 局部變量 棧內存
- 生命週期不同
- 成員變量 隨着對象的存在而存在,隨着對象的消失而消失
- 局部變量 隨着方法的調用而存在,隨着方法的調用完畢而消失
- 初始化值不同
- 成員變量 有默認的初始化值
- 局部變量 沒有默認的初始化值,必須先定義,賦值,才能使用。
private關鍵字:
-
private關鍵字:
是一個權限修飾符。
可以修飾成員(成員變量和成員方法)
被private修飾的成員只在本類中才能訪問。 -
private最常見的應用:
把成員變量用private修飾
提供對應的getXxx()/setXxx()方法
class Student {
private String name;
private int age;
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
public void setAge(int a) {
age = a;
}
public int getAge() {
return age;
}
public void study() {}
}
this關鍵字:
this:代表所在類的對象引用
記住:
方法被哪個對象調用,this就代表那個對象
什麼時候使用this呢?
局部變量隱藏成員變量
class Student {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void show() {
System.out.println("姓名是:"+name+",年齡是:"+age);
}
public void study() {
System.out.println("學生愛學習");
}
public void eat() {
System.out.println("學生要喫飯");
}
public void sleep() {
System.out.println("學生想睡覺");
}
}
class StudentTest {
public static void main(String[] args) {
Student s = new Student();
s.setName("kevin");
s.setAge(28);
s.show();
s.study();
s.eat();
s.sleep();
System.out.println("姓名是:"+s.getName());
System.out.println("年齡是:"+s.getAge());
}
}
構造方法:
- 構造方法作用概述
- 給對象的數據進行初始化
- 構造方法格式
- 方法名與類名相同
- 沒有返回值類型,連void都沒有
- 沒有具體的返回值
- 構造方法注意事項
- 如果你不提供構造方法,系統會給出默認構造方法
- 如果你提供了構造方法,系統將不再提供
- 構造方法也是可以重載的
class Student {
private String name;
private int age;
public Student() {}
public Student(String name,int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void show() {
System.out.println("姓名是:"+name+",年齡是:"+age);
}
}
class StudentTest {
public static void main(String[] args) {
//無參+setXxx()
Student s = new Student();
s.setName("林青霞");
s.setAge(28);
s.show();
//帶參
Student ss = new Student("張曼玉",20);
ss.show();
}
}
static關鍵字
可以修飾成員變量和成員方法
static關鍵字特點
隨着類的加載而加載
優先於對象存在
被類的所有對象共享
這也是我們判斷是否使用靜態關鍵字的條件
可以通過類名調用
static關鍵字注意事項
在靜態方法中是沒有this關鍵字的
靜態方法只能訪問靜態的成員變量和靜態的成員方法
靜態變量和成員變量的區別
- 所屬不同
- 靜態變量屬於類,所以也稱爲爲類變量
- 成員變量屬於對象,所以也稱爲實例變量(對象變量)
- 內存中位置不同
- 靜態變量存儲於方法區的靜態區
- 成員變量存儲於堆內存
- 內存出現時間不同
- 靜態變量隨着類的加載而加載,隨着類的消失而消失
- 成員變量隨着對象的創建而存在,隨着對象的消失而消失
- 調用不同
- 靜態變量可以通過類名調用,也可以通過對象調用
- 成員變量只能通過對象名調用