標籤:集合 包含 例子 資料 rgs 有意思 一句話 過程 取整
一.
說完了靜態關鍵字的一些特點和使用注意事項,同時也交代了靜態應用情境以後。現在準備寫個具體的例子,將前面的知識點串起來。
這個例子從最基礎的開始穿起。
需求:求數組最大值
最開始,我們的寫法是將代碼寫在主函數裡面,運行一下就可以了。下面是我們之前學習時的解題方法。
(代碼中的每一句話都是有其存在的意義的,沒有意義和作用的語句可以不用寫。public static void main(String[] args)這句話是保證程式的獨立啟動並執行,但是本類不需要獨立運行,所以本類中沒有主函數。)
DOS一運行上面中的程式,需求就解決了。但是,我們說以後不要再這麼寫代碼了。主函數只是入口,是用來調用其他程式。那麼,這裡應該怎麼寫?
中的求最大值程式只能求解一個數組的最大值,數組arr,和for語句中x<arr.length是結合在一起的。如果再有一個數組,又要重新構建一個新的求解最大值的代碼。這樣不合適,重複的書寫基本相同的代碼。
為了提高代碼的複用性,要將功能封裝起來。(這就是我們後來講的函數。開始是數組,然後由數組衍生出一系列的操作,接著就是函數封裝功能) 之前講述的時候,只有主函數一個,所有的代碼都放置在主函數裡。現在把代碼封裝起來,進行複用,我們可以對很多數組求最大值。只要把數組告訴我們就可以了。
這時,定義一個功能,擷取整型數組的最大值。
對下面的程式進行展開講解,public是修飾符,表明最大的存取權限(不太懂?自己的理解)。static的存在,是因為本類中,主函數也是static修飾的,主函數要想調用本方法,必須是static修飾的(?),getMax方法參數中的arr和主函數中的arr不是同一個東西,只是重名。功能函數最後要返回最大值。需求就是擷取最大值,傳回值就是數組中的最大值。
封裝功能過後的程式書寫如下,主函數中的內容大大縮減。到目前,我對主函數的理解就是,主函數就像一個控制台,上面就幾個按鈕。每個按鈕背後複雜的工作都被影藏了起來。
函數的出現提高了複用。接著擴充一下思維,另外的一個類中,也需要求解最大值,(這時就不是在一個類中求解了)。而且不關是求解最值,排序,折半..全都需要,這就意味著有很多方法,現在應該怎麼辦?
按照對象的思想。我們不應該把它們都定義成方法,而是應該把這些方法放置在一個類裡面,換句話說,就是封裝到對象裡面去。我找到了運算元組的對象,是不是找到了運算元組這個功能啊?這是個過渡,從最早期的主函數,過渡到我們自訂的函數進行封裝,再過渡到把我們所需的眾多功能,進行對象(那麼這個對象裡面全是方法?對象的參數列表怎麼寫?)進行封裝。我們不再面向過程,而是物件導向。因此,我們這裡單獨寫了一個類。這個類寫完以後,我能用,你也能用。
在第二個方法中,有一個特殊的地方,if語句中應該是 進行位置置換,位置置換是個功能,在這寫個功能就完事了。這種開發方式很多見,因為我們的思路就建立在我這塊肯定需要一個功能,我們不用管怎麼實現,先寫個這個功能,後面再去細解怎麼實現這個功能。
swap功能是給selectSort服務的,不需要提供出去,所以用private修飾。swap的參數列表是三個,給一個數組,再給兩個變數(就是兩角標)。因為我們要置換的是數組中的兩個兩個位置,數組明確嗎?數組不明確。這裡是如何調用swap方法的呢?在selectSort方法的某一個語句中,調用了swap方法。先是有確定的數組調用了seleceSort方法,在selectSort方法被執行的過程中,selectSort方法又調用了swap方法,具體的調用書寫為swap(arr, x, y); 這裡是不需要傳回值的。
在來個簡單尋找,這裡的return -1是什麼意思,忘記了。
這裡還有一個列印數組的功能,把數組變成字串應該是一個方法,返回的是一個字串,這裡面最簡單的就是用字串串連的方式,大家都知道,任何資料和字元床相加,想串連。String str=""; 是null嗎?這是一個真實的字串,只是裡面沒有內容而已,
(首先是將所有的方法集合在一個類中,裡面的方法間,也會有聯絡)
至此,把這個功能寫完了,封裝在了一個對象叫ArrayTool裡面,叫做數組工具對象。接著結合之前的類,我們想要來一個數組的最值擷取。
對象寫完以後,我們想要求最值怎麼辦?
這裡其實是兩個java檔案,一個是ArrayTool.java,還有一個是ArrayToolDemo.java。ArrayToolDemo.java檔案中包含有主函數,ArrayToolDemo是別人寫的,準備用我們的工具。兩個檔案,先編譯誰?按理說,先編譯ArrayTool,ArrayToolDemo是在用ArrayTool。如果連ArrayTool.class檔案都沒有,怎麼使用
DOS中將執行的順序表示了出來。
接著又做了一些改變,如下。本類做了改變,工具類並沒有發生變化。
接著有趣的事兒來了,先編譯了ArrayToolDemo.java,一編譯,兩個類都出來了。
解析:ArrayTooleDemo它這個類中確實用到了ArrayTool.class,可是ArrayTool.class它有嗎?是沒有的,java編譯器很有意思,它發現了該類中用到了其他類,它會去classpath路徑下找這個類,或者去目前的目錄下找這個類,一找發現沒有,它會繼續找,找什嗎?找和這個類名相同的.java檔案。因為這個類通常對應著一個源檔案,找到源檔案,對其進行編譯,再產生這個class檔案,
JAVA-初步認識-第八章-數組工具對象建立