Java中最核心的東西就是物件導向,我們只要把物件導向這個概念,和它的一些語法還有用法,思想掌握好,那對於我們後面去學習Java的任何東西,甚至去學習其它的語言的時候,都是輕車熟路啊!所以它的作用還是非常非常關鍵滴!
提到物件導向,我們就不得不提到程序導向,什麼是程序導向呢,如果小夥伴們在大學的時候學過C語言的話,想必對程序導向應該是不陌生的,或者學過C plus plus 的前半部分,c plus plus 也是有物件導向的。。,程序導向:以步驟爲單位,一步一步完成某一個具體的事情,物件導向:以物件爲單位,通過排程組合不同的物件來完成某一個事情,物件導向更高階一些!
舉個例子:軒軒買彩票中了600塊錢,打算去創業賣煎餅,我做事情的過程全都我一個人來,租三輪,買原料,灌煤氣,親手攤煎餅,然後親手收錢每件事情都得自己親手來,這個創業的過程就是程序導向,但是後來呢我攤的 煎餅很好吃,非常好吃,忙不過來了,我就開始招人了,有專門收錢的,專門攤煎餅的,專門買面的,還有專門蹬三輪的。。。,然後軒軒呢就負責支配他們,讓他們幫我賣煎餅,軒軒排程人手的辦事的過程就是物件導向了!
物件導向是一種程式設計思想
物件導向是一種思考問題的思維方式
先整體,再區域性
先抽象,再具體
能做什麼,再做什麼
掌握一門物件導向語言的語法
熟悉物件導向的設計原則
熟悉物件導向設計模式 大概23中 常用的十來種
1、類是:分類、類別。
2、通過分類,我們可以區別不同的事物種類,在日常生活當中,我們常常這樣做。
3、所以,類是一組具有相同特性(屬性)與行爲(方法)的事物集合。 我們除了特徵和 行爲之外,還能通過其他的東西分類了,我們發現沒有了!屬性和行爲好像就能把所有的東西都能分類了
1、類表示一個共性的產物,是一個綜合的特徵,而物件,是一個個性的產物,是一個個體的特徵。
2、類由屬性和方法組成:
· 屬性:就相當於一個個的特徵
· 方法:就相當於人的一個個的行爲,例如:說話、吃飯、唱歌、睡覺
類就是類別分類,物件就是這個類裏邊的範例,比如男人這個分類,那我就是一個物件!再舉個例子軒軒就是個物件,程式設計師就是類!程式設計師的屬性就是頭髮少,錢多,話少,死的早!
在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("我吃仙草,還吃得多");
}
}
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垃圾回收器