匿名對象是對象的簡化形式。(凡是簡化的都有局限性,例如三元運算符。)
匿名對象兩種使用情況:
1、特點:
2、作用:對象一建立就會調用與之對應的構造函數,給對象進行初始化。
3、注意:1、默認構造函數的特點 2、多個構造函數是以重載的形式存在的
4、構造函數的小細節:當一個類中沒有定義構造函數時,那么系統會默認給該類加入一個空參數的構造函數。當在類中自定義了構造函數后,默認的構造函數就沒有了。
5、構造函數和一般函數在寫法上有不同。在運行上也有不同:構造函數是在對象一建立就運行,給對象初始化。而一般方法是對象調用才執行,是給對象添加對象具備的功能。一個對象建立,構造函數只運行一次。而一般方法可以被對象調用多次。
6、什么時候定義構造函數呢?
當分析事物時,該事物存在具備一些特性或者行為,那么將這些內容定義在構造函數中。
7、構造代碼塊作用:給對象進行初始化,對象一建立就運行,而且優先于構造函數執行。//"{ }"什么都沒有,就一大括號。構造代碼塊中定義的是不同對象共性的初始化內容。
8、構造函數和構造代碼塊的區別:構造代碼塊是給所有對象進行初始化,構造函數是給對應對象進行初始化。
9、構造函數是可以被私有化的,一旦一個類中所有構造函數被私有化,就代表這個類不可能被創建對象。因為構造函數不能被初始化。
3.5this關鍵字1、this是用于區分局部變量和成員變量同名的情況。
2、this代表她所在函數所屬對象的引用,哪個對象在調用this所在的函數,this就代表哪個函數。
3、應用:當定義類中功能時,該函數內部要用到調用該函數對象時,這時用this來表示這個對象。
4、this關鍵字在構造函數間調用//this.name = name this(name)=new person(name)
5、this語句只能定義在構造函數的第一行。//this();因為初始化要先執行,
3.6static(靜態)關鍵字3.6.1 static實例變量和類變量的區別:
靜態有利有弊:利:對對象的共享數據單獨空間進行存儲,節省空間,沒有必要對每一個對象都存儲一份,可以直接被類名調用。弊端:生命周期過長。訪問出現局限,只能訪問靜態。
3.6.2 主函數:public staitic void main (String [] args)主函數是一個特殊的函數,作為程序的入口,是固定格式的,可以被jvm調用。
主函數的特點:
要從兩方面下手:因為靜態修飾的有成員變量和成員函數。
什么時候定義靜態變量?
當對象中出現共享數據時,該數據被靜態所修飾。對象中的特有數據定義成非靜態存在于堆內存中。
什么時候定義靜態函數?
當功能內部沒有訪問到非靜態數據(對象的特有數據),那么該功能可以定義成靜態的。
靜態的應用:每一個程序中都有共性的功能,可以將這些功能進行抽取,獨立封裝,以便復用。
雖然可以通過ArrayTool的對象使用這些工具方法,對數組進行操作。發現了以下問題:
這時就考慮,讓程序更嚴謹,是不需要對象的。可以將ArrayTool中的方法都定義成static的,直接通過類名調用即可。
將方法都靜態后,可以方便于使用,但是該類還是可以被其他程序建立對象的。為了更嚴謹,強制該類不能建立對象。可以通過將構造函數私有化完成。//private ArrayTool(){}
3.6.4 幫助文檔得制作javadoc接下來,把javadoc.class文件發送給別其他人,其他人只要將該文件設置到classpath路徑下就可以使用該工具類,但是該類中到底定義了多少個方法,對方卻不清楚,因為沒有使用說明書。
開始制作程序的說明書,java的使用說明書由注釋來完成。/**這是一個對數組進行操作的工具類。*/
凡是用public修飾符修飾的功能都用文檔注釋,都可以被文檔注釋所提取。/**獲取一個整形數組中的最大值。@param arr 接受的是一個int類型的數組 @return 會返回一個該數組中的最大值。*/
格式:javadoc -d myhelp -auther -version (-d:目錄的意思 myhelp:有就入沒就建一個 -authe:作者 -version:版本)注意:類必須是public修飾符修飾,權限要足夠大。
默認構造函數的權限是隨著類的變化而變化的(注意不寫才是默認的構造函數!!)
API(application program interface 應用程序接口)
3.6.5 靜態代碼塊格式: static{靜態代碼塊得執行語句。}
特點:隨著類的加載而執行,只執行一次,并優先于主函數,用于給類進行初始化的。(只有用到類中的內容類才會被加載。)
靜態代碼塊(給類進行初始化的)-->構造代碼塊(給對象進行初始化的)-->構造函數(給對應對象進行初始化的)
3.7 對象的初始化過程3.7.1person p = new person("zhangdan",20)該句話都做了些什么?
棧里面會先開辟主函數的空間p,對內存里new了一個對象實體,把內存地址值傳給p,p.setname會在棧內存中開辟局部變量name的空間,每一個非靜態的方法都有自己所屬,為this的引用,方法被p調用,所以this的值為p的值,“lisi"就付給p對象的name。
設計模式:解決某一問題最行之有效的方法。Java中有23種設計模式。
單例設計模式:解決一個類在內存中值存在一個對象。
想要保證對象唯一。
這三步怎樣用代碼去體現呢?
對于事物該怎么描述還怎么描述。對需要將該事物的對象保證在內存中的唯一時,就將以上的三步加上即可。
、
新聞熱點
疑難解答