1.7 面向對象

1、面向對象思想概述

概述:

Java語言是一種面向對象的程序設計語言,而面向對象思想是一種程序設計思想,我們在面向對象思想的指引下,使用Java語言去設計、開發計算機程序。
這裏的對象泛指現實中一切事物,每種事物都具備自己的屬性行爲。面向對象思想就是在計算機程序設計過程中,參照現實中事物,將事物的屬性特徵、行爲特徵抽象出來,描述成計算機事件的設計思想。
它區別於面向過程思想,強調的是通過調用對象的行爲來實現功能,而不是自己一步一步的去操作實現。

特點:

面向對象思想是一種更符合我們思考習慣的思想,它可以將複雜的事情簡單化,並將我們從執行者變成了指揮者。面向對象的語言中,包含了三大基本特徵,即封裝、繼承和多態。

面向對象(OOP),OOD(面向對象的設計),OOA(面向對象的分析),面向過程(POP)

2、類和對象

  • :是一組相關屬性行爲的集合。可以看成是一類事物的模板,使用事物的屬性特徵和行爲特徵來描述該類事物。
  • 對象:是一類事物的具體體現。對象是類的一個實例,必然具備該類事物的屬性和行爲。

類與對象的關係

  • 類是對一類事物的描述,是抽象的
  • 對象是一類事物的實例,是具體的
  • 類是對象的模板,對象是類的實體

3、類的定義

public class ClassName {
  //構造方法
  //成員變量
  //成員方法 
}
  • 定義類:就是定義類的成員,包括成員變量成員方法
  • 成員變量:和以前定義變量幾乎是一樣的。只不過位置發生了改變。在類中,方法外
  • 成員方法:和以前定義方法幾乎是一樣的。只不過把static去掉,static的作用在面向對象後面課程中再詳細講解。

類的定義格式舉例:

public class Student {
  	//成員變量
  	String name;//姓名
    int age;//年齡

    //成員方法
    //學習的方法
    public void study() {
    System.out.println("好好學習,天天向上");
  }
}

4、對象的使用

創建對象:

類名 對象名 = new 類名();

使用對象訪問類中的成員:

對象名.成員變量;
對象名.成員方法()

對象的使用格式舉例:

public class Test01_Student {
  public static void main(String[] args) {
    //創建對象格式:類名 對象名 = new 類名();
    Student s = new Student();
    System.out.println("s:"+s); //cn.itcast.Student@100363

    //給成員變量賦值
    s.name = "趙麗穎";
    s.age = 18;

    //輸出成員變量的值
    System.out.println("姓名:"+s.name); //趙麗穎
    System.out.println("年齡:"+s.age); //18

    //調用成員方法
    s.study(); // "好好學習,天天向上"
  }	
}

5、成員變量的默認值

數據類型 默認值
基本類型 整數(byte,short,int,long) 0
浮點數(float,double) 0.0
字符(char) ‘\u0000’
布爾(boolean) false
引用類型 數組,類,接口 null

6、對象內存圖

一個對象,調用一個方法內存圖

在這裏插入圖片描述

通過上圖,我們可以理解,在棧內存中運行的方法,遵循"先進後出,後進先出"的原則。變量p指向堆內存中的空間,尋找方法信息,去執行該方法。

但是,這裏依然有問題存在。創建多個對象時,如果每個對象內部都保存一份方法信息,這就非常浪費內存了,因爲所有對象的方法信息都是一樣的。那麼如何解決這個問題呢?請看如下圖解。

兩個對象,調用同一方法內存圖

在這裏插入圖片描述

對象調用方法時,根據對象中方法標記(地址值),去類中尋找方法信息。這樣哪怕是多個對象,方法信息只保存一份,節約內存空間。

7、成員變量和局部變量區別

變量根據定義位置的不同,我們給變量起了不同的名字。如下圖所示:
在這裏插入圖片描述

  • 在類中的位置不同
    • 成員變量:類中,方法外
    • 局部變量:方法中或者方法聲明上(形式參數)
  • 作用範圍不一樣
    • 成員變量:類中
    • 局部變量:方法中
  • 初始化值的不同
    • 成員變量:有默認值
    • 局部變量:沒有默認值。必須先定義,賦值,最後使用
  • 在內存中的位置不同
    • 成員變量:堆內存
    • 局部變量:棧內存
  • 生命週期不同
    • 成員變量:隨着對象的創建而存在,隨着對象的消失而消失
    • ​局部變量:隨着方法的調用而存在,隨着方法的調用完畢而消失
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章