您現在的位置是:首頁 > 垂釣

面向過程,面向物件的概念與區別

  • 由 碼一碼 發表于 垂釣
  • 2022-11-29
簡介需求:定義標準學生類,使用private修飾成員變數(name,age,性別gender,成績score)提供setXxxgetXxx方法提供空參有參構造方法,有參構造方法為成員變數賦值提供用於顯示資訊的show方法測試類分別使用空參和有

閾下影響是什麼意思

今日目標

面向物件和麵向過程

類和物件

物件記憶體圖

封裝

this 關鍵字

構造方法

一、面向物件

1、面向過程和麵向物件的對比

1。1 問題

1

什麼是面向過程

2

什麼是面向物件

1。2 答案

1。2。1 面向過程

面向過程(pop):是一種以過程為中心的程式設計思想,實現功能的每一步,都是自己實現的。

看名字它是注重過程的。當解決一個問題的時候,面向過程會把事情拆分成: 一個個方法和資料(用於方法的引數)。然後按照一定的順序,執行完這些方法(每個方法看作一個個過程),等方法執行完了,事情就搞定了

過程的特點:親力親為,每一步都是自己去完成,強調的是完成這件事的過程步驟

1。2。2 面向物件

面向物件(oop):是一種以物件為中心的程式設計思想,透過指揮物件實現具體的功能

面向過程,面向物件的概念與區別

例如:

解決產生隨機數的問題 ——-> Random物件

解決鍵盤錄入的問題 ——-> Scanner物件

Java講究萬物皆物件

面向物件思想小結:

可觀存在的任何一種事物,都可以看做為程式中的物件

使用面向物件思想可以將複雜的問題簡單化

將我們從執行者的位置,變成了指揮者

面向物件學什麼 ?

學習自己如何設計物件

學習已有的物件如何使用 (API階段)

2、類和物件的關係

2。1 問題

1

類的概念

2

類的組成

3

類和物件的關係

2。2 答案

2。2。1 類的概念

類是對現實生活中一類具有

共同屬性

行為

的事物的抽象。

【類】是對事物,也就是物件的一種

描述

,可以將類理解為一張設計圖,根據設計圖,可以創建出具體存在的事物

2。2。2 類的組成

屬性。該事物的各種特徵。例如黑馬學生事物的屬性:姓名、年齡、畢業院校…

行為。該事物存在的功能(能夠做的事情)。例如黑馬學生事物行為:學習、Java程式設計開發

2。2。3 類和物件的關係

前提 : Java中想要建立物件,必須要先有類的存在

類:是一組相關屬性和行為的集合, 將其看做為是物件的設計圖

物件:根據類(設計圖)創建出來的實體

關係:類是物件的描述,物件是類的實體

依賴關係 : 需要根據類建立物件

數量關係 : 一對多的關係, 根據一個類創建出多個物件

3、類的定義

3。1 問題

1 類的組成

2 類的定義步驟

3。2 答案

3。2。1 類的組成

屬性(名詞):在程式碼中透過成員變數來體現。跟之前定義變數的格式一樣, 只不過位置發生了改變, 類中方法外

行為(名詞):在程式碼中透過成員方法來體現。跟之前定義方法的格式一樣, 只不過去掉了static關鍵字

3。2。2 類的定義步驟

定義類

編寫類的成員變數

編寫類的成員方法

示例程式碼:

public

class

Student

{

String

name

int

age

public

void

eat

(){

。。。

}

}

注意 :

當類寫好了之後,需要在測試類中建立物件再使用

4、物件的建立和使用

4。1 問題

1

如何透過一個類建立一個物件

2

物件如何去使用

4。2 答案

4。2。1 根據類建立物件

如何透過一個類建立一個物件

類的例項化

建立類的物件

=

類的例項化

=

例項化類

落地實現

1

建立類設計類的成員。

2

建立類的物件。

3

透過物件

屬性。或物件

方法呼叫物件的成員結構。

建立物件的格式

類名

物件名

=

new

類名

();

範例:

Student

s

=

new

Student

();

4。2。2 物件的使用

物件如何去使用

1。

使用物件訪問成員變數

格式:物件名

成員變數名

範例:p

name

2。

使用物件訪問成員方法

格式:物件名

成員方法名

();

範例:p

study

();

5、案例手機類的建立和使用

需求:

首先定義一個手機類,然後定義一個手機測試類,在手機測試類中透過物件完成成員變數和成員方法的使用

思路:

①定義一個手機類(成員變數:品牌,價格;成員方法:打電話,發簡訊)

②定義手機測試類

③在手機測試類中透過物件完成成員變數和成員方法的使用

程式碼實現:

//手機類

public

class

Phone

{

//成員變數

String

brand

int

price

//成員方法

public

void

call

String

name

){

System

out

println

“給”

+

name

+

“打電話”

);

}

public

void

sendMessage

(){

System

out

println

“群發簡訊”

);

}

}

//測試類

public

class

TestPhone

{

/*

編寫一個手機測試類(TestPhone)建立手機類物件

並呼叫成員變數並列印,呼叫成員方法執行

*/

public

static

void

main

String

[]

args

) {

Phone

p

=

new

Phone

();

p

brand

=

“華為手機”

p

price

=

5999

System

out

println

p

brand

);

System

out

println

p

price

);

p

call

“阿強”

);

p

sendMessage

();

}

}

6、單個物件的記憶體圖

面向過程,面向物件的概念與區別

7、兩個物件的記憶體圖

面向過程,面向物件的概念與區別

8、兩個引用指向同一個物件的記憶體圖

面向過程,面向物件的概念與區別

垃圾回收

注意:

當堆記憶體中,

物件

陣列

產生的地址,透過任何方式都不能被找到後,就會被判定為記憶體中的

“垃圾”

垃圾會被Java垃圾回收器,空閒的時候自動進行清理

GC : Garbage Collection

“引用計數演算法”

引用計數是垃圾收集器中的早期策略。在這種方法中,堆中每個物件例項都有一個引用計數。當一個物件被建立時,且將該物件例項分配給一個變數,該變數計數設定為1。當任何其它變數被賦值為這個物件的引用時,計數加1(a

=

b

則b引用的物件例項的計數器

+

1

),但當一個物件例項的某個引用超過了生命週期或者被設定為一個新值時,物件例項的引用計數器減1。任何引用計數器為0的物件例項可以被當作垃圾收集。當一個物件例項被垃圾收集時,它引用的任何物件例項的引用計數器減1。

“可達性演算法”

該方法的基本思想是透過一系列的“GC

Roots”物件作為起點進行搜尋,如果在“GC

Roots”和一個物件之間沒有可達路徑,則稱該物件是不可達的,不過要注意的是被判定為不可達的物件不一定就會成為可回收物件。

一個物件的引用

強引用

軟引用

弱引用

虛引用

程式碼練習:

public

class

TestClass

{

public

static

void

main

String

[]

args

) {

// 1 第一個實驗

int

a

=

10

int

b

=

a

b

++

System

out

println

a

);

//列印多少

//2 實驗2

Student

s1

=

new

Student

();

//

Student

s2

=

s1

s2

age

++

System

out

println

s1

age

);

//現在age是多少?

}

}

class

Student

{

int

age

=

20

}

=======================================================================

public

class

TestClass

{

public

static

void

main

String

[]

args

) {

// 實驗1

int

m

=

10

changeInt

m

);

System

out

println

m

);

//列印多少

//實驗2

Student

s1

=

new

Student

();

changeAge

s1

);

System

out

println

s1

age

);

//列印多少。

//實驗3

Student

s2

=

new

Student

();

changeStudent

s2

);

System

out

println

s2

age

);

//列印多少。

}

public

static

void

changeInt

int

a

){

//a=10

a

++

}

`

public

static

void

changeAge

Student

s

){

//s=s1;

s

age

++

}

public

static

void

changeStudent

Student

s

){

//s=s2

s

=

new

Student

();

s

age

++

}

}

class

Student

{

int

age

=

20

}

總結

java中引數傳遞的規則

“值傳遞”

簡單型別的引數

傳值

物件型別的引數

傳地址

傳引用

實參和形參指向同一物件

一個電腦可以插多個鍵盤

9、成員變數和區域性變數的區別

9。1 問題

成員變數和區域性變數有什麼區別

9。2 答案

9。2。1 區別

面向過程,面向物件的概念與區別

10、private關鍵詞

10。1 問題

1

private關鍵字的含義是什麼

2

被private修飾的屬性有什麼特點

3

被private修飾的方法有什麼特點

10。2 答案

10。2。1 含義

是一個許可權修飾符,代表私有的意思,可以修飾成員(成員變數和成員方法)

10。2。2 private修飾屬性

只能本類內部使用,不能透過物件名 “。” 的形式呼叫

10。2。3 private修飾方法

只能本類內部使用,不能透過物件名 “。” 的形式呼叫

注意:

針對private修飾的成員變數,如果需要被其他類使用,提供相應的操作

提供“

get變數名()

”方法,用於獲取成員變數的值,方法用public修飾

提供“

set變數名(引數)

”方法,用於設定成員變數的值,方法用public修飾

11、private關鍵字的使用

一個標準類的編寫:

把成員變數用private修飾

提供對應的setXxx()/getXxx()方法

12、this關鍵字

12。1 問題

1

this的本質

2

this的作用

12。2 答案

12。2。1 this的本質

this 代表當前類物件的引用(地址)

12。2。2 this的作用

可以呼叫本類的成員(變數, 方法),解決區域性變數和成員變數的重名問題

13、this關鍵字記憶體圖

面向過程,面向物件的概念與區別

14、封裝

14。1 問題

1

什麼是封裝

2

封裝在程式碼中的體現

3

封裝的好處

14。2 答案

14。2。1 封裝的介紹

封裝是面向物件三大特徵之一(封裝,繼承,多型)

隱藏實現細節,僅對外暴露公共的訪問方式

面向過程,面向物件的概念與區別

14。2。2 封裝在程式碼中的常見體現

私有成員變數,提供setXxx和getXxx方法

將程式碼抽取到方法中,這是對程式碼的一種封裝

將屬性抽取到類當中,這是對資料的一種封裝

14。2。3 封裝的好處

提高了程式碼的安全性

提高了程式碼的複用性

15、構造方法的格式和執行時機

15。1 問題

1

什麼是構造方法

2

構造方法的格式

3

構造方法的執行時機

15。2 答案

15。2。1 構造方法的概述

構建、創造物件的時候,所呼叫的方法

面向過程,面向物件的概念與區別

15。2。2 格式

許可權修飾符

類名

(){}

例如:public

Student

(){}

1。

方法名與類名相同,大小寫也要一致

2。

沒有返回值型別,連void都沒有

3。

沒有具體的返回值(不能由return帶回結果資料)

15。2。3 執行時機

建立物件的時候呼叫,每建立一次物件,就會執行一次構造方法

不能手動呼叫構造方法

16、構造方法的作用

16。1 作用

本質作用:建立物件

結合構造方法執行時機:給物件中的屬性(成員變數)進行初始化

17、構造方法的注意事項

17。1 構造方法的分類

有參構造

無參構造

17。2 注意事項

17。2。1 構造方法的建立

如果沒有定義構造方法,系統將給出一個預設的無引數構造方法

如果定義了構造方法,系統將不再提供預設的構造方法

17。2。2 構造方法的過載

構造方法也是方法,允許過載關係出現

17。2。3 推薦的使用方式

無引數構造方法,和帶引數構造方法,都自己手動給出

17。3 構造方法記憶體圖解

面向過程,面向物件的概念與區別

18、標準類的程式碼編寫和使用

1。

自定義類

1。

私有化成員變數

2。

構造方法

無參構造

滿參構造

3。

set及get方法

4。

成員方法

5。

為了展示資料方便的show方法

2。

測試類

1。

main方法

2。

建立物件使用成員變數

成員方法

。。。

需求:定義標準學生類,

使用private修飾成員變數

name

age

性別gender

成績score

提供setXxx

/

getXxx方法

提供空參有參構造方法,有參構造方法為成員變數賦值

提供用於顯示資訊的show方法

測試類分別使用空參和有參構造方法建立物件

要求分別使用空參和有參構造方法建立物件,

空參建立的物件透過setXxx賦值,

有參建立的物件直接賦值,

並透過show方法展示資料。

19、練習:使用標準 JavaBean 封裝資料

面向過程,面向物件的概念與區別

步驟:

1。編寫飲水機類 WaterDispenser

2。定義四個成員變數(品牌 brand)(顏色 color)(容量 capacity)(模式 model)

3。私有成員變數,提供 setXxx\getXxx 方法

4。提供空參、帶參構造方法

5。提供成員方法 show - 用於展示出所有成員變數所記錄的值

6。編寫測試類 Test

7。使用帶參構造方法建立物件,給屬性賦值為(美的,紅色,5L,手動淨水)

8。呼叫show方法執行

9。將容量獲取出來,並判斷容量是否大於3L。

執行結果:

品牌為

美的

顏色為

紅色

容量為

5

模式為

手動淨水

容量大於3L

程式碼:

package

com

itheima

test

public

class

WaterDispenser

{

// 定義四個成員變數(品牌 brand)(顏色 color)(容量 capacity)(模式 model)

private

String

brand

private

String

color

private

int

capacity

private

String

model

// 空參構造

public

WaterDispenser

() {

}

// 帶參構造

public

WaterDispenser

String

brand

String

color

int

capacity

String

model

) {

this

brand

=

brand

this

color

=

color

this

capacity

=

capacity

this

model

=

model

}

// setXxx\getXxx

public

String

getBrand

() {

return

brand

}

public

void

setBrand

String

brand

) {

this

brand

=

brand

}

public

String

getColor

() {

return

color

}

public

void

setColor

String

color

) {

this

color

=

color

}

public

int

getCapacity

() {

return

capacity

}

public

void

setCapacity

int

capacity

) {

this

capacity

=

capacity

}

public

String

getModel

() {

return

model

}

public

void

setModel

String

model

) {

this

model

=

model

}

// show 方法

public

void

show

() {

System

out

println

“品牌為:”

+

brand

);

System

out

println

“顏色為:”

+

color

);

System

out

println

“容量為:”

+

capacity

);

System

out

println

“模式為:”

+

model

);

}

}

package

com

itheima

test

public

class

TestWaterDispenser

{

public

static

void

main

String

[]

args

) {

WaterDispenser

wd

=

new

WaterDispenser

“美的”

“紅色”

5

“手動淨水”

);

wd

show

();

if

wd

getCapacity

()

>

3

){

System

out

println

“容量大於3L”

);

}

else

{

System

out

println

“容量沒有大於3L”

);

}

}

}

Top