沒有對象怎麼面向對象編程呢?真讓人頭禿

沒有對象怎麼面向對象編程呢?真讓人頭禿


Java中最核心的東西就是面向對象,我們只要把面向對象這個概念,和它的一些語法還有用法,思想掌握好,那對於我們後面去學習Java的任何東西,甚至去學習其它的語言的時候,都是輕車熟路啊!所以它的作用還是非常非常關鍵滴!

1、面向對象的基本概念

1、什麼是面向對象

提到面向對象,我們就不得不提到面向過程,什麼是面向過程呢,如果小夥伴們在大學的時候學過C語言的話,想必對面向過程應該是不陌生的,或者學過C plus plus 的前半部分,c plus plus 也是有面向對象的。。,面向過程:以步驟為單位,一步一步完成某一個具體的事情,面向對象:以對象為單位,通過調度組合不同的對象來完成某一個事情,面向對象更高級一些!
舉個例子:軒軒買彩票中了600塊錢,打算去創業賣煎餅,我做事情的過程全都我一個人來,租三輪,買原料,灌煤氣,親手攤煎餅,然後親手收錢每件事情都得自己親手來,這個創業的過程就是面向過程,但是後來呢我攤的 煎餅很好吃,非常好吃,忙不過來了,我就開始招人了,有專門收錢的,專門攤煎餅的,專門買面的,還有專門蹬三輪的。。。,然後軒軒呢就負責支配他們,讓他們幫我賣煎餅,軒軒調度人手的辦事的過程就是面向對象了!


面向對象是一種編程思想
面向對象是一種思考問題的思維方式

2、建立面向對象思維方式

先整體,再局部
先抽象,再具體
能做什麼,再做什麼

3、如何學習面向對象

掌握一門面向對象語言的語法
熟悉面向對象的設計原則
熟悉面向對象設計模式 大概23中 常用的十來種

2、類與對象

什麼是類?

1、類是:分類、類別。
2、通過分類,我們可以區別不同的事物種類,在日常生活當中,我們常常這樣做。
3、所以,類是一組具有相同特性(屬性)與行為(方法)的事物集合。 我們除了特徵和 行為之外,還能通過其他的東西分類了,我們發現沒有了!屬性和行為好像就能把所有的東西都能分類了

類與對象的關係

1、類表示一個共性的產物,是一個綜合的特徵,而對象,是一個個性的產物,是一個個體的特徵。
2、類由屬性和方法組成:
· 屬性:就相當於一個個的特徵
· 方法:就相當於人的一個個的行為,例如:說話、吃飯、唱歌、睡覺
類就是類別分類,對象就是這個類裡邊的實例,比如男人這個分類,那我就是一個對象!再舉個例子軒軒就是個對象,程序員就是類!程序員的屬性就是頭髮少,錢多,話少,死的早!

3、類和對象的定義格式

在Java中可以使用以下的語句定義一個類:

<code>

class

類名稱{

屬性名稱; 返回值類型 方法名稱(){} } /<code>

對象的定義:
一個類要想真正的進行操作,則必須依靠對象,對象的定義格式如下:

<code>類名稱 對象名稱 = 

new

類名稱() ; /<code>

按照以上的格式就可以產生對象了,我去…原來搞個對象那麼容易哈..new 一下就一個對象嘖嘖嘖


如果要想訪問類中的屬性或方法(方法的定義),則可以依靠以下的語法形式:
訪問類中的屬性:

<code>對象.屬性 ;
/<code>

調用類中的方法:

<code>對象.方法();
/<code>

在java中對象聲明有兩種含義
聲明對象:

<code>Horse horse= 

null

; ; /<code>

實例化對象:

<code>horse= 

new

Horse() ; horse.eat()

new

Horse().eat() /<code>

代碼實例:

<code>

public

class

Test8

{

public

static

void

main

(

String[] args

)

{ Horse h=

null

; h=

new

Horse(); h.name=

"赤兔馬"

; h.age=

350

; h.run(); h.eat();

new

Horse().eat(); h=

null

; } }

class

Horse

{ String name;

int

age;

public

void

run

(

)

{ System.

out

.println(

"我是"

+name+

",我"

+age+

"歲了,我還能日行千里"

); }

public

void

eat

(

)

{ System.

out

.println(

"我吃仙草,還吃得多"

); } } /<code>

4、對象內存分析

1、new 關鍵字表示創建一個對象
2、new 關鍵字表示實例化對象
3、new 關鍵字表示申請內存空間
注意:如果使用一個沒有申請內存空間的對象,會報空指針異常:
java.lang.NullPointerException
對象在內存中的結構:
Horse horse= null;

沒有對象怎麼面向對象編程呢?真讓人頭禿


horse 存的是地址因為=null 所以現在horse裡面沒有地址

horse = new Horse();

沒有對象怎麼面向對象編程呢?真讓人頭禿


字符串的默認值是null, int的默認值是0;
給對象的屬性賦值:

沒有對象怎麼面向對象編程呢?真讓人頭禿


注意,在堆內存的 name它存的也是地址,我是為了方便理解所以把它和字符串放在一起了,name存的也是地址它指向一個內存空間,這個空間存的是真正的字符串小白。
在內存中創建多個對象

沒有對象怎麼面向對象編程呢?真讓人頭禿


分別給兩個對象的屬性賦值:

沒有對象怎麼面向對象編程呢?真讓人頭禿


聲明兩個對象,一個實例化,一個沒實例化

沒有對象怎麼面向對象編程呢?真讓人頭禿


對象之間的賦值:

沒有對象怎麼面向對象編程呢?真讓人頭禿


horse2沒有實例化,但是把horse1賦值給horse2了,賦值的過程就是,將horse1的地址給了horse2,所以現在是horse1和horse2指向了同一塊內存,所以現在把horse2.name=”嘿嘿”,你打印出來horse1的name也等於嘿嘿
分別實例化兩個對象:


沒有對象怎麼面向對象編程呢?真讓人頭禿


對象之間的賦值:

沒有對象怎麼面向對象編程呢?真讓人頭禿


這個賦值過程和上邊的是一樣的,不一樣的是horse2原先指向的內存,因為沒有被指向,所以它會被gc認為是垃圾就會被釋放掉,什麼是gc呢,gc就是虛擬機裡的Garbage Collection垃圾回收器

5、小結

  • new關鍵字:表示向內存申請空間,也表示實例化一個對象,創建一個對象。
  • 一個對象在內存中的大小,由該對象的所有屬性所佔的內存大小的總和。引用類型變量在32位系統上佔4個字節,在64位系統上佔8個字節。加上而外的對象隱性數據所佔的大小。
  • 相同的類型才可以賦值
  • 不同的引用,指向同一個對象,任何一個引用改變對象的值,其它引用都會反映出來。
  • 編程時要注意的問題,在確定不使用對象時,要儘早釋放對象:引用=null
  • 當一個堆中的對象沒有被任何引用變量所指向時,該對象會被JVM 的 GC 程序認為是垃圾對象,從而被回收。


分享到:


相關文章: