其實我早就有想寫個學習筆記的想法了。今天終於下定決心要寫了,寫的不好的地方,大家給我指正啊!其實也就是個簡化版的TIJ
第一章 對象導論
其實這章介紹的是oop的思想,知道什麼是抽象、介面、繼承等等,其實這些我覺得沒有必要專門提出來寫一章,這個我就不介紹了
在以後的學習中,這些知識是會在裡面融會貫通的。
第二章 萬事萬物皆對象
在java程式中,萬事萬物皆對象,即使是java程式本身,也是一個對象
一、Reference是操縱對象之鑰匙
c語言中是使用指標來操縱對象的,但是java呢?用的是reference來操縱對象,我習慣把他叫做控制代碼,控制代碼和對象的關係就想是電視遙控器和電視機的關係一樣,既然是這樣,那麼遙控器和電視機都是可以獨立出現的
例如:String name;
這個java語句只會產生句餅(遙控器),並不產生實際的對象(電視機),就想你老婆還沒生孩子之前你們就把名字給取好了一樣,控制代碼並沒有串連到實際的對象上。這個樣子寫代碼是不推薦的,一個沒有指向對象的控制代碼在調用的時候編譯器會抱錯,應當使用String name="baby";,或者使用String name =new String("baby");這裡new的意思是產生一個string類型的對象,並且這個string叫做baby。這2個方法都可以實現對象的建立。
二、所有的對象都需要你來建立
1、儲存在那裡
a、寄存器 這裡是核心的儲存空間,我們是沒辦法操縱的
b、棧 (stack )這裡的存取速度快,效率高,因為這裡要求被儲存的資料有具體大小和存活時間限制,使用彈性小,這裡一般儲存的是我們的物件控點,而對象是不存在這裡的
c、堆 (heap) 這裡是通用的儲存空間,他比stack好在編譯器不需要知道實際在heap中儲存資料的大小,也不知道這個空間需要分配多長時間,彈性好,所以用來儲存物件,但是速度要比stack慢很多
d、靜態儲存空間(static storage)這裡是存放被聲明為static的特定成員,java對象本身是不會分配在這裡的
e、常量儲存空間 這裡存放的是程式中的常量,常量值不會改變,最安全
f、non-ram 流或者是持久話對象
2、基礎資料型別 (Elementary Data Type)
boolean char byte short int long float double void 基礎資料型別 (Elementary Data Type)的資料是不用new 來建立的,直接int i=0,不使用heap空間,他是被放在stack中的,速度快!但是假如你要是想用heap來儲存基礎資料型別 (Elementary Data Type)的話,就要使用該類型的外覆類來實現了 例如Integer i= new Integer("0");
注意!String不是基礎資料型別 (Elementary Data Type),她是對象!從他的定義方法就可以知道了!
3、數組(array)
java中的數組使用和定義上要比c中的數組更安全,當你在定義數組的時候其實產生的是一個儲存物件控點的數組,而每一個控制代碼所指向的值回被設定為null,也就是不指向任何對象
三、你不需要摧毀對象
1、基本類型生存範圍
java中基本類型的生存範圍是由一對大括弧決定的,在生存空間內定義的變數,只能用於生存空間結束之前
{
int i=1;
{
int i=100;//錯誤!這樣的定義在java總是不允許的!編譯器會認為i已經被定義過了
}
}
2、對象的生存範圍
對象擁有的壽命和基本類型是不一樣的,當你使用new來產生一個對象的時候,即使離開了大括弧,該對象還是存在的
{
String name =new Sting("baby");
}
控制代碼name會在大括弧的生存空間之外消失的,但是他所指向的string對象卻還在繼續佔用著記憶體,但是大家會認為大量的無用對象會佔用大量的記憶體,java中是怎麼解決的呢?他使用的是記憶體回收機制,記憶體回收行程會在特定的時間檢查使用new建立的對象,假如這些對象已經沒有控制代碼指向他們,那麼他就回把無用的對象清理掉。
四、建立新的資料類型 class
java中既然一切全是對象,那麼是什麼來限制對象的屬性呢?通過使用類。java中使用class關鍵字來自己定義一個類
例如:class women{ //class body}這樣你就定義一個women 類,當然這個類沒有任何屬性
1、資料成員和方法
一個類中,存在2中成員,一個是資料成員,一個是方法。資料成員可以是基礎資料型別 (Elementary Data Type),也可以是對象,而基礎資料型別 (Elementary Data Type)在聲明的時候系統會自動的給他賦予一個初始值
五、方法、參數、傳回值
一個合法的方法包括名稱、參數、傳回型別、方法體 例如
void name(int i)
{
return;
}其中 名稱name() 參數int i 傳回型別 void 方法體 {},對於一個class而言,名稱+參數的組合必須是唯一的,參數也可以是空的,有一個叫test的對象允許你調用一個傳回值為string的方法getTest(),則 String name = test.getTest(); name的類型一定要和傳回值的類型相同。
在向一個方法傳遞一個對象的時候,其實傳遞的是該對象的控制代碼(基礎資料型別 (Elementary Data Type)除外),而傳遞的物件類型一定要和方法中接受參數的參數類型相同。當你不需要方法給你返回什麼東西的時候,你可以把該方法的傳回型別設定為void,而此時方法中的return就是用來離開方法的,不需要等到他執行完畢,如果方法的傳回型別不為void的時候,你可以使用return 返回一個和傳回型別一樣的值
未完。。。。。。。