作業可以抄 程式碼就不要抄了
java零基礎入門-面向物件篇(五) 類和物件 (下)
這次我們來詳細說一下方法。
方法的使用場景
我們寫程式碼為什麼要方法?從上往下,像寫文章一樣去寫不就好了,先幹啥,後幹啥,很好嘛,為什麼要用方法呢?
首先,我們看程式碼和看文章是有些共同點的,比如文章很大一個特點是沒有重複的。如果有篇文章,第一段“今天天氣真好,陽光明媚,同學們都在操場上玩耍 ......”,好了,第二段開始 “今天天氣真好,陽光明媚,同學們都在操場上玩耍 ......”,第三段開始“今天天氣真好,陽光明媚,同學們都在操場上玩耍 ......”,你是不是很想跟作者見個面,噓寒問暖一番?
我們的程式碼也一定要避免重複,如果一段程式碼裡面,充斥著重複的相同的程式碼,會讓人像看一篇重複的文章一樣,索然無味甚至讓人想跟你這個作者進行身體上的交流。在這方面,有些公司甚至是有硬性的規定的,一個類不允許超過多少行,一個方法不允許超過多少行,超過的部分想辦法抽出來做成方法。有些複雜的邏輯也要儘量抽出來做成方法,這樣程式碼的可讀性會非常好。
所以我們的方法一般是用在
1 重複的程式碼 2 複雜的邏輯
這兩種情況最多,當然還有一些特定的情況,比如對實體類做封裝會有get,set方法之類的,在詳細的介紹封裝的時候會說。現在來看看什麼叫重複的情況和複雜的邏輯。
假設現在你被某平臺招聘成了程式設計師,讓你負責寫一個頁面,像下面這張圖一樣,你會怎麼寫?拿到需求首先就是把業務模型抽象出來,java工程都是由類組成,你如何設計一個類來完成需求?
功能分析
注:真實專案不會這樣設計,這裡只是作為教學,學習知識的使用方法,沒有考慮一些標準,規則,請注意。
這次程式碼有點長,我將主方法與類分開來寫。
體力勞動
建議每個同學把上面的程式碼敲一遍,感受一下什麼叫體力勞動。程式設計師雖然還有一個稱謂是碼農,可我們需要的還是腦力勞動,不是體力勞動。
使用構造器和方法
主方法
我們觀察到,構造器和方法起到的作用差不多,構造器將建立物件的過程封裝起來,而方法將我們的邏輯封裝起來,都在很大程度上幫我們減少了程式碼量,並且使得程式有更好的可讀性。
其實這一個看上去很簡單的頁面包含了很多的知識點,我們初學的話暫時只用來學習概念即可,基礎打紮實,我們學習後面的web部分的內容才能暢行無阻,順風順水。
有的同學想說 “老師,我的ctrl +c ,ctrl +v 用的很6啊,毫無壓力”,我想說“丟了飯碗看你有沒有壓力”
方法的引數傳遞
在學方法的時候,會有很多不好理解的概念,比如形參和實參。形參就是我們定義一個方法的時候,方法裡面的引數。實參就是我們呼叫方法的時候傳遞給方法的引數。
我們來看看下面這個帥哥抄作業的例子。形參和實參的名字沒有必要保持一致,因為我的作業和他的作業不是一個作業,沒有必要保持一致。
形參和實參
方法的引數傳遞跟我們抄作業很像,為什麼呢?你抄作業的時候,抄完了是不是要把作業還給人家,你別告訴我你抄作業,結果抄都懶得抄,直接把同學的作業改名交上去吧。我們給方法傳遞引數也是一樣的,呼叫方法的時候,我把引數裡面的東西給你,你抄完了就是你自己的了,跟我沒關係。還是上面的程式碼,我們關注一下 no 這個變數。
方法的引數是區域性變數
不知道各位有沒有看明白,形參是方法的區域性變數,在方法內部怎麼改動都不影響實參。
這種引數傳遞的方法叫做值傳遞。java裡面只有值傳遞,記住這個就行了。
方法過載
方法的過載,初學者聽起來又是一個高大上的名字,其實他就是在一個類裡面可以寫多個名字一樣,引數不一樣的方法而已。
方法過載
很多其他教材,將方法的引數定義,就是方法引數括號內的內容,叫做形參列表,還有個概念叫做方法簽名,這些東西理解起來很麻煩,我們只要記住方法的過載只跟引數的數量,型別有關係就可以了。
引數數量不同,可以過載
引數型別不同,可以過載
引數名稱不同,其他相同不可以過載
其他的返回值,訪問修飾符與過載無關
後面還有一個東西叫方法的重寫,這兩個東西本質是不一樣的,過載是抄各種不同的作業。重寫是我發現借我抄的作業是個錯的,我還是自己寫了一遍。開始還以為借我抄作業的是個王者,抄著抄著發現是個青銅,還沒有自己做靠譜,哎。。。
構造器過載
說了方法的過載就把構造器的過載一起說一說。其實構造器很像方法,我們說過多次了,比如過載的時候,他們對形參列表的要求也是一樣的。
構造器過載
不管是構造器的過載,還是方法的過載,我們一定要搞清楚一件事,就是我們在寫程式碼的時候,呼叫方法或者構造器的時候,只會寫引數的數量,引數的型別,所以程式只能根據我們提供給他的線索(引數的數量,引數的型別)去尋找合適的方法和構造器,這是過載最需要理解的地方。
英語作業忘記抄了,英語老師已經默默的點開了 - 家長聯絡方式.xls
PS:最近工作較忙,更新有點慢,實在抱歉,後面會加快速度。有些同學私信我,說我真的沒有催你,我就想快點學更多知識,好吧...你們的套路真是一波接一波啊。