程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 走進java對象的門口,走進java對象門口

走進java對象的門口,走進java對象門口

編輯:JAVA綜合教程

走進java對象的門口,走進java對象門口


從題目中可以看出來,今天只是java面向對象的入門級探討。看看今天的內容。


 

為什仫說英語呢?我的英語從三年級都不好,一直到現在,但我們的未來職業要求我們必須懂英語,就算不能像馬雲一樣溜吧,但最起碼能看懂英語版的專業書籍。其實,專業上的英語挺簡單的,如果你能靜下心看看那些書,你會發現,書上的語法很簡單,詞匯還都是高中的,只有極個別的專業詞匯有點難,記住就好啦,反正不多,所以,這裡說幾個英語名詞。

面向對象三大特性:encapsulation:封裝  inheritance:繼承  polymorphism:多態

還有兩個詞用的比較多:arguments 和 parameters : 實參 和 形參。

編程語言的函數或方法都只能放回一個值(我只學過的幾個,語言之多,不知有沒有特例),有時想返回多個值,可以數組(當我剛學c語言的時候,我都不知道這樣做),python好像能返回多個,直觀上如此,但其實python返回的是一個元組,把你的多個返回值構成一個元組返回的。


一、封裝

剛學面向對象時,對封裝思想不甚了解,特別是從面向過程轉過來的人。為什麼要對屬性進行封裝呢?外部直接調用不是很方便嗎?

其一原因:通過封裝,外部只能通過你的getter() ,setter()來間接訪問你的屬性,那你不是可以在gette and setter 中做些什麼了嗎。比如:你寫了個Person類,其中一個屬性是年齡age,age的范圍肯定是 age>= 0的(不知有沒有長生的人),如果你不封裝,外部可以把 -100 賦值給 age,顯然這是不合理的,但通過setter來賦值時,你可以對傳進的值進行判斷如果小於 0,就拋個異常給調用者。是不是很好,通過封裝你可以對傳進的值進行一些判定或其他的操作啦。

你可能要反駁說啦,我見過一些setter or getter,就是最簡單的賦值啊,沒啥功能啊。下面就是另一個重要的使用封裝的原因啦。

 

其二:The point to setters (and getters, too) is that you can change your mind later,without breaking anybody else’s code! 你寫了個一款游戲,剛開始時你對游戲充錢的范圍設置應該很低,假設充錢的下限是 一毛(哈哈),等過了一段時間,你的游戲大火,為了make more money,你要提高充錢的下限啦(反正總會有人充的,畢竟玩家多嘛),設為price >= 100。你想想,如果開發時你的公司員工都是把屬性設置為public,如果想進行更改,你就的在原來需要給price賦值的地方做個if(money >= 100){//ok } else{//buy failure}判斷,或者寫setter(getter也一樣),進行對傳進的值判斷,然後,在原來使用price的地方調用setter().看見了沒有不用封裝,以後想改都很麻煩,所以還是使用封裝吧,別看現在可能沒啥用,以後你有別的想法想改時,就很方便啦。記住這句話:you can change your mind later,without breaking anybody else’s code!


 

 插一段關於對象屬性和局部變量初始值的問題:

 


 

二、“==”與equals方法的區別:

“==”比較的是兩個變量在內存中的 bits 是否相等不關心你的類型是否相等,比如 int a = 1, b = 1; a == b //true  byte c = 1; a == c //also true,因為a,c在內存中的bits都是0000 0000 0000 0001。對於對象引用變量來書,他們比較是是否指向相同的對象,其實還是一樣的,指向相同的對象,他們的bits就是相同的。所以,“==”,主要還是比較兩個變量是否指向相同的對象(基本變量沒啥好說的)。

有時,你不關心兩個變量是否指向同一個對象,你只是關心兩個變量指向的對象的內容是否完全一樣。上代碼,具體看看:

你猜結果是true or false:

想想為什麼.

再看一個對比的:

再猜猜結果:

奇妙的事情發生啦,str1 和 str2的值都是“hello",為什麼他兩相比的結果是false。因為,str1,str2指向的對象不同,雖然對象中的內容是相同的,但"=="只關心變量的二進制數是否相同,因為指向不同的對象,所以,他們之間的bits不可能相同。

那我想看兩個字符串是否相同咋辦?那就要用equals方法啦。

把判斷語句稍微一改:

結果就是想要的啦:

記住這兩句話:

Use == to compare two primitives, or to see if two references refer to the  same object.
Use the equals() method to see if two  different objects are equal.

 

留個問題,自己寫個類,用“==” 和 equals()方法來比較一下,結果可能會出乎你的意料。具體如何,且看不知多少下回的分析。


When everything seems to be going against you, remember that the airplane takes off against the wind, not with it.

只有通過逆境,你才能變得強大。(我都被自己給翻譯服啦,呵呵)

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved