沒有物件怎麼物件導向程式設計呢?真讓人頭禿!

2020-08-13 16:12:13


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

1、物件導向的基本概念

1、什麼是物件導向

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

2、建立物件導向思維方式

先整體,再區域性
先抽象,再具體
能做什麼,再做什麼

3、如何學習物件導向

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

2、類與物件

什麼是類?

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

類與物件的關係

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

3、類和物件的定義格式

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

class 類名稱{
	屬性名稱;
	返回值型別 方法名稱(){}
}

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

類名稱 物件名稱 = new 類名稱() ;

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

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

物件.屬性 ;  

呼叫類中的方法:

物件.方法();  

在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("我吃仙草,還吃得多");
	}
}

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 程式認爲是垃圾物件,從而被回收。