一、面向對象思想
1、概述
Java語言是一種面向對象的程序設計語言,而面向對象思想是一種程序設計思想,我們在面向對象思想的指引下,使用Java語言去設計、開發計算機程序。
這里的對象泛指現實中一切事物,每種事物都具備自己的屬性和行為。
面向對象思想就是在計算機程序設計過程中,參照現實中事物,將事物的屬性特征、行為特征抽象出來,描述成計算機事件的設計思想。 它區別於面向過程思想,強調的是通過調用對象的行為來實現功能,而不是自己一步一步的去操作實現。
2、舉例
洗衣服:
-
-
- 面向過程:把衣服脫下來-->找一個盆-->放點洗衣粉-->加點水-->浸泡10分鍾-->揉一揉-->清洗衣服-->擰干-->晾起來
- 面向對象:把衣服脫下來-->打開全自動洗衣機-->扔衣服-->按鈕-->晾起來
-
區別:
-
-
- 面向過程:強調步驟如何執行,注重細節。
- 面向對象:強調對象,(即洗衣機)忽略細節。
- 面向過程:強調步驟如何執行,注重細節。
-
3、特點
面向對象思想是一種更符合我們思考習慣的思想,它可以將復雜的事情簡單化,並將我們從執行者變成了指揮者 。
面向對象的語言中,包含了三大基本特征,即 封裝、繼承 和 多態。
二、類和對象
1、什么是類
-
- 類:是一組相關 屬性 和 行為 的集合。可以看成一類事物的模板,使用事物的屬性特征和行為特征來描述該類事物。
- 屬性:就是該事物的狀態信息。
- 行為:就是該事物能夠做什么。
Demo:
類:小狗。
屬性:名字、雌雄、體重、顏色、年齡;
行為:走、跑、叫、吃、看門
2、什么是對象
-
- 對象:是一類事物的具體體現。 對象是類的一個 實例,必然具備該類事物的屬性和行為。
Demo:
對象:一個小狗。
屬性:Tom、公、6kg、黑色、3歲;
行為:翹着尾巴走,歡快的跑、汪汪的叫、吃骨頭;
3、類與對象的關系
-
- 類 是對一類事物的描述,是 抽象 的。
- 對象 是一類事物的實例,是 具體 的。
- 類是對象的模板,對象是類的實體。
三、類的定義
1、事物與類的對比
現實世界的一類事物:
屬性:事物的狀態信息。 行為:事物能夠做什么。
Java 中用 class 描述事物也是如此:
成員變量:對象事物的 屬性。 成員方法:對應事物的 行為。
2、類的定義格式
語法格式:
[修飾符] class ClassName {
//成員變量
//成員方法
//構造器
//代碼塊
//內部類
}
-
- 定義類: 就是定義類的成員,包括 成員變量,成員方法,構造器,代碼塊和內部類;
- 成員變量: 同普通的定義變量一樣,只是位置發生了變化。在類中,方法外面;
- 成員方法: 同普通的定義方法一樣,(方法前面不需要加 static 關鍵字);
- 構造器:創建對象時使用;
- 代碼塊:在類初始化和對象初始化時使用;
- 內部類:在某個大的事物中,包含一個獨立的小事物;
Demo:定義一個學生類
1 public class Student { 2 //成員變量
3 String name; // 姓名
4 int age; // 年齡
5 char sex = '男'; //性別 顯示設置屬性的值 6
7 // 成員方法
8 public void study() { 9 System.out.println("我愛學 Java。"); 10 } 11
12 }
注意:
-
-
- 成員變量是直接定義在類當中的,在方法外邊。
- 成員方法不要寫static關鍵字。
-
四、對象的使用
1、導包
其實就是指出需要使用的類,在什么位置,在哪個包里面。
語法格式:
import 包名稱.類名稱;
注意:如果要使用的類和當前類屬於同一個包的情況下,可以省略導包語句不寫。
2、創建對象
語法格式:
類名 對象名 = new 類名();
3、使用對象
使用對象訪問類中的成員:
使用成員變量: 對象名.成員變量;
使用成員方法: 對象名.成員方法();
Demo:
1 public class Test01_Student { 2 public static void main(String[] args) { 3 //創建對象格式:類名 對象名 = new 類名();
4 Student s = new Student(); 5 System.out.println("s:"+s); // Student@100363 地址值 6
7 //直接輸出成員變量值
8 System.out.println("姓名:"+s.name); //null
9 System.out.println("年齡:"+s.age); //0 10
11 //給成員變量賦值
12 s.name = "趙麗穎"; 13 s.age = 18; 14 //再次輸出成員變量的值
15 System.out.println("姓名:"+s.name); //趙麗穎
16 System.out.println("年齡:"+s.age); //18 17
18 //調用成員方法
19 s.study(); // "我愛學 Java"
20
21 }
注意:
(1)可以在類中給成員變量賦值,稱為顯示賦值,這樣新建對象后,類中的值就是該對象屬性的初始值。
(2)如果成員變量沒有進行賦值,那么將會有一個默認值,規則如下:
數據類型 | 默認值 | |
基本類型 | 整數(byte,short,int,long) | 0 |
浮點數(float,double) | 0.0 | |
字符(char) | '\u0000' | |
布爾(boolean) | false | |
引用類型 | 數組,類,接口,字符串 | null |
五、對象內存圖
1、一個對象,調用一個方法內存圖
分析:通過上圖,可以得知在 棧 內存中運行的方法,遵循“先進后出,后進先出” 的原則。
在 main 方法中,變量 one 指向的是 堆中對象的地址,而堆中的對象的成員方法指向的又是方法區中 .class 文件的成員方法的地址。
2、兩個對象,調用同一方法內存圖
分析:多個對象調用方法時,根據對象中方法標記(地址值),去類中尋找方法信息。這樣哪怕是多個對象,方法信息只保存一份,節約內存空間。
3、兩個引用指向同一對象的中內存圖
分析:通過上圖可知,雖然創建了兩個引用變量,但實際在堆中只創建了一個對象,兩個引用變量都指向這個對象,而且都能夠修改此對象的成員變量和調用成員方法。
六、對象作為參數和返回值
1、作為參數
2、作為返回值
總結:對象類型作為方法的參數與返回值的時候,傳遞的其實都是 地址值。
七、成員變量和局部變量區別
1、圖解
變量根據定義 位置的不同,給變量起了不同的名字。
2、區別
-
-
定義的位置不一樣 【重點】
-
成員變量:在類中,方法外部
- 局部變量:方法中或者方法聲明上(形式參數)或者代碼塊中
-
-
作用范圍不一樣 【重點】
- 成員變量:整個類中都可以使用
- 局部變量:只有在聲明的方法中才可以使用,
-
默認值不一樣 【重點】
- 成員變量:如果沒有賦值,會有默認值,規則如上;
- 局部變量:沒有默認值,必須先定義,賦值,才能使用
-
內存中的位置不一樣 【了解】
- 成員變量:位於堆內存
- 局部變量:位於棧內存
-
生命周期不一樣 【了解】
- 成員變量:隨着對象創建而誕生,隨着對象被垃圾回收而消失
- 局部變量:隨着方法進棧而誕生,隨着方法出棧而消失
- 修飾符
- 成員變量:有很多修飾符,如:權限修飾符
- 局部變量:不能加權限修飾符,唯一能加的是 final
-