Java_面向對象(上)

面向過程思想概述

我們來回想一下,我們完成一個需求的步驟:首先是搞清楚我們要做什麼,然後在分析怎麼做,最後我們再代碼體現。一步一步去實現,而具體的每一步都需要我們去實現和操作。這些步驟相互調用和協作,完成我們的需求。
在上面的每一個具體步驟中我們都是參與者,並且需要面對具體的每一個步驟和過程,這就是面向過程最直接的體現。
那麼什麼是面向過程開發呢? 面向過程開發,其實就是面向着具體的每一個步驟和過程,把每一個步驟和過程完成,然後由這些功能方法相互調用,完成需求。
面向過程的代表語言: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關鍵字的
靜態方法只能訪問靜態的成員變量和靜態的成員方法

靜態變量和成員變量的區別

  • 所屬不同
    • 靜態變量屬於類,所以也稱爲爲類變量
    • 成員變量屬於對象,所以也稱爲實例變量(對象變量)
  • 內存中位置不同
    • 靜態變量存儲於方法區的靜態區
    • 成員變量存儲於堆內存
  • 內存出現時間不同
    • 靜態變量隨着類的加載而加載,隨着類的消失而消失
    • 成員變量隨着對象的創建而存在,隨着對象的消失而消失
  • 調用不同
    • 靜態變量可以通過類名調用,也可以通過對象調用
    • 成員變量只能通過對象名調用

在這裏插入圖片描述

關注博主,獲取相關博客的原資料!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章