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 程序認為是垃圾對象,從而被回收。