[Java] Absolute Java (5E) Ch4 ~ 5 重點筆記 3
Java中 同一個 class 當中都寫static method彼此的呼叫則不用new新的物件
寫起來跟C很像!
圖示觀念:
stack
一開始進入main method就有變數args , date 跟 val
到了第19行, val被指定為11
到了第21行,進入到static method產生一個新的copy叫做value進入stack
並把val的值放進value當中!
第5~6行: value在fuction裡面被設定為55,然後出了function後就被pop掉了
第26行:執行new的動作會先到Heap區開一塊記憶體空間大小為MyDate這麼大,並且用constructor建構好初始值,然後date指過去。
第28行:這個function (第7行) 會看到ref 進到 stack 中指著date
第8行 ref會指到一個Heap新new的一塊MyDate
第9行:出了這個function,stack裡面的ref就被pop掉了,導致沒有人指到剛剛新new的那塊MyDate,成了garbage,會有garbage collection來回收它
第30行:所以由上可知,這裡的date.print()還是會印舊的資料22 7 1964
this的概念:老師說 請A同學把我的考卷拿去印!
換到A同學角度,他就會想,我要把老師的考卷拿去印!
這兩個人講的考卷都是同一份的,this的概念!
Local varible沒有給default value,如果沒給值就列印,會出錯!
如果是instance varible要new才可以用的!一定要給初始值
Information hiding的觀念:
把how to use跟detail information隔開來!
例如請同學去幫你買隨身碟,買回來以後就直接給他錢就好,不用去管到細節像是在哪裡買的,如何過去到那邊買的?
abstraction的概念:把細節之處給忽略掉,只給概念就好,例如排隊,去銀行時拿號碼牌,然後就可以亂坐就好,還是會照FIFO的規則排好隊!
所以只要把FIFO原則抽象的特性講出來就好,重點在描述特質,而不在討論!
Encapsulation 觀念:進一步的information hiding,information只說怎麼做不用管,只要知道怎麼用就好了,encapsulation進一步地將資料跟方法整個包成一個整體,避免弄錯,增加調理。
例如生活中,我們不會去把電視機打開來看裡面有什麼,但是我們都會使用電視!
而encapsulation已經包好一個,直接給你一個遙控器你就會用了!
Encapsulation 你只看得到 interface
Accessor 跟 Mutator Methods
例如要對於private資料做事情的時候
set方法就是Mutator
get方法就是Accessor
Q: 如果只有get沒有set的話,資料怎麼進去的呢?
A: 1. default的!
2. 使用constructor
JAVA
static:代表整個Class裡面只有一份!
final:指這個變數一但給了之後就不能改!例如身分證字號就是一種final給了值之後就永遠不能改!
private 是針對class而不是object
如果是要保護object裡面的內容則是security的範疇
Static Methods
static method 不需要 calling object
Static data 的用途
例:
寫起來跟C很像!
圖示觀念:
stack
一開始進入main method就有變數args , date 跟 val
到了第19行, val被指定為11
到了第21行,進入到static method產生一個新的copy叫做value進入stack
並把val的值放進value當中!
第5~6行: value在fuction裡面被設定為55,然後出了function後就被pop掉了
第26行:執行new的動作會先到Heap區開一塊記憶體空間大小為MyDate這麼大,並且用constructor建構好初始值,然後date指過去。
第28行:這個function (第7行) 會看到ref 進到 stack 中指著date
第8行 ref會指到一個Heap新new的一塊MyDate
第9行:出了這個function,stack裡面的ref就被pop掉了,導致沒有人指到剛剛新new的那塊MyDate,成了garbage,會有garbage collection來回收它
第30行:所以由上可知,這裡的date.print()還是會印舊的資料22 7 1964
this的概念:老師說 請A同學把我的考卷拿去印!
換到A同學角度,他就會想,我要把老師的考卷拿去印!
這兩個人講的考卷都是同一份的,this的概念!
Local varible沒有給default value,如果沒給值就列印,會出錯!
如果是instance varible要new才可以用的!一定要給初始值
Information hiding的觀念:
把how to use跟detail information隔開來!
例如請同學去幫你買隨身碟,買回來以後就直接給他錢就好,不用去管到細節像是在哪裡買的,如何過去到那邊買的?
abstraction的概念:把細節之處給忽略掉,只給概念就好,例如排隊,去銀行時拿號碼牌,然後就可以亂坐就好,還是會照FIFO的規則排好隊!
所以只要把FIFO原則抽象的特性講出來就好,重點在描述特質,而不在討論!
Encapsulation 觀念:進一步的information hiding,information只說怎麼做不用管,只要知道怎麼用就好了,encapsulation進一步地將資料跟方法整個包成一個整體,避免弄錯,增加調理。
例如生活中,我們不會去把電視機打開來看裡面有什麼,但是我們都會使用電視!
而encapsulation已經包好一個,直接給你一個遙控器你就會用了!
Encapsulation 你只看得到 interface
Accessor 跟 Mutator Methods
例如要對於private資料做事情的時候
set方法就是Mutator
get方法就是Accessor
Q: 如果只有get沒有set的話,資料怎麼進去的呢?
A: 1. default的!
2. 使用constructor
JAVA
static:代表整個Class裡面只有一份!
final:指這個變數一但給了之後就不能改!例如身分證字號就是一種final給了值之後就永遠不能改!
private 是針對class而不是object
如果是要保護object裡面的內容則是security的範疇
Static Methods
static method 不需要 calling object
Static data 的用途
例:
留言
張貼留言