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

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

一、面向對象的基本概念

一、什麼是面向對象

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

二、創建面向對象思惟方式

先總體,再局部
先抽象,再具體
能作什麼,再作什麼程序員

三、如何學習面向對象

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

二、類與對象

什麼是類?

一、類是:分類、類別。
二、經過分類,咱們能夠區別不一樣的事物種類,在平常生活當中,咱們經常這樣作。
三、因此,類是一組具備相同特性(屬性)與行爲(方法)的事物集合。 咱們除了特徵和 行爲以外,還能經過其餘的東西分類了,咱們發現沒有了!屬性和行爲好像就能把全部的東西都能分類了設計模式

類與對象的關係

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

三、類和對象的定義格式

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

class 類名稱{
	屬性名稱;
	返回值類型 方法名稱(){}
}
複製代碼

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

類名稱 對象名稱 = new 類名稱() ;
複製代碼

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

若是要想訪問類中的屬性或方法(方法的定義),則能夠依靠如下的語法形式:
訪問類中的屬性:3d

對象.屬性 ;  
複製代碼

調用類中的方法:指針

對象.方法();  
複製代碼

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

Horse horse= null;  ; 
// 表示聲明瞭一個對象,可是此對象沒法使用,horse沒有具體的內存指向
複製代碼

實例化對象:

horse= new Horse() ;
// 表示實例化了對象,可使用
//經過對象調用方法:
horse.eat()

//匿名對象調用方法:
new Horse().eat()
複製代碼

代碼實例:

public class Test8{
	
	public static void main(String[] args){	
	//類的使用
	Horse h=null;//聲明一個類的變量(變量 除了八種基本數據類型 都是引用類型,包括數組)
	//建立一個Horse類型的對象 (實例化一個對象)
	h=new Horse();
	//有了對象,咱們就能夠調用對象的屬性和方法
	h.name="赤兔馬";
	h.age=350;
	h.run();//調用方法 方法就被執行了
	h.eat();
	//匿名對象:只能使用一次 用完後就會被釋放
	new Horse().eat();
	h=null;//把對象釋放掉
	// h.eat(); 當對象不存在時,調用改對象的方法和屬性會報空指針異常
	}	
}
//自定義一個類(類型 引用類型) Horse 類
class Horse{
	//在類中定義屬性(特徵)
	String name;
	int age;
	//定義方法
	public void run(){
		System.out.println("我是"+name+",我"+age+"歲了,我還能日行千里");
	}
	public void eat(){
		System.out.println("我吃仙草,還吃得多");
	}
}

複製代碼

四、對象內存分析

一、new 關鍵字表示建立一個對象
二、new 關鍵字表示實例化對象
三、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垃圾回收器

五、小結

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