Corejava
Java概述
1. java總共有52條指令由計(jì)算機(jī)的CPU識(shí)別。
2. java虛擬機(jī)(JVM)是包裹在OS外的一層虛擬環(huán)境,上面定義了一層能被java源程序識(shí)別的接口,使應(yīng)用程序不需要考慮具體OS的差異。是JRE的子集。Java運(yùn)行的核心部分。
3. java的編譯:XXX.java→(編譯)字節(jié)碼(二進(jìn)制,可跨平臺(tái))→(運(yùn)行)JVM。
4. java字節(jié)碼是中立的與平臺(tái)無關(guān)的。
5. JDK(java開發(fā)工具包):包括java的開發(fā)、調(diào)試、運(yùn)行等的一整套工具包。
6. JRE(java的運(yùn)行環(huán)境):不包含java的開發(fā)調(diào)試工具,只包含java運(yùn)行的一個(gè)包,JRE為JDK的一個(gè)子集,包含基礎(chǔ)類庫。
7. java程序的運(yùn)行過程:
(1)啟動(dòng)JVM;
(2)找到類的字節(jié)碼文件并加載到JVM;
(3)運(yùn)行類的main方法。
8. 一個(gè)java的源文件中可以定義多個(gè)類。但最多只有一個(gè)Public類。同時(shí)Public類的類名應(yīng)和文件名一致。
9. 源文件中有多少個(gè)類的定義,編譯后就得到多少個(gè)字節(jié)碼文件。
10. 一個(gè)可運(yùn)行的java程序,必須有且僅有一個(gè)main方法。
11.“//+注釋” 單行注釋,表明代碼的意思。
12.“/* */”多行注釋。
13,“/** */”文檔注釋,說明類定義,屬性定義和方法定義。
14. $jar 打包發(fā)送。格式如下:jar cvf tools(壓縮文件名).jar\com(打包內(nèi)容)C:創(chuàng)建jar文件;v:可視化;f:指定文件名
15. 編碼的規(guī)范:1.有良好的可閱讀性;2.有嚴(yán)格的縮進(jìn)
16. java的安裝:
(1)java_home:jdk的安裝目錄。
(2)classpath:類的搜素路徑。
(3)path:bin目錄加到path。
17. $javadoc生成一份程序文檔
18. javac –d .XXX.java.java 打包后字節(jié)碼存放的位置–d.命令的顯像;“.”表示把編譯好的文件存到指定的位置。
20. javadoc 提取文檔注釋,生成網(wǎng)頁性質(zhì)的文檔。
21. 包實(shí)際上是一個(gè)用來組織類和接口的目錄結(jié)構(gòu)。包提供了一套軟件復(fù)用的機(jī)制和唯一類命名的約定。
Java語法
注釋
1.“//+注釋” 單行注釋,表明代碼的意思。
2.“/* */”多行注釋。
3.“/** */”文檔注釋,說明類定義,屬性定義和方法定義。
4. javadoc 提取文檔注釋,生成網(wǎng)頁性質(zhì)的文檔。
標(biāo)識(shí)符
1. 標(biāo)識(shí)符包括:類名、方法、變量。
2. 標(biāo)識(shí)符明明可以由下劃線、$、字母、數(shù)字組成。數(shù)字不能開頭。
3. 嚴(yán)格區(qū)分大小寫。
4. 沒有長度限制。
命名規(guī)則
1. 類名的每個(gè)單詞的首字母大寫。
2. 接口名的每個(gè)單詞也需大寫。
3. 方法名的首字母小寫,其余單詞首字母大寫。
4. 變量名第一個(gè)單詞全小寫,從第二個(gè)單詞開始以后每個(gè)單詞首字母大寫其他字母小寫。
5. 常量:值在程序中不可改變,每個(gè)字母都大寫,單詞與單詞間用下劃線隔開。
6. 包的命名習(xí)慣是字母全小寫。
關(guān)鍵字:略
Java數(shù)據(jù)類型
1. 引用類型(類、接口、枚舉、標(biāo)注)特點(diǎn)(復(fù)合、多值、可分割)
2. 8種基本數(shù)據(jù)類型 特點(diǎn)(簡單、單值、院子、不可分割的類型)
空類型
3. 8種基本數(shù)據(jù)類型:
1. Boolean:布爾類型表示或真或假的值。值的范圍:true or false
2. byte:8位二進(jìn)制數(shù),用一個(gè)字節(jié)存儲(chǔ)的整數(shù)。范圍-27-27-1
3. char:單一的字符。范圍0-216-1
4. double:用8個(gè)字節(jié)來存儲(chǔ)一個(gè)浮點(diǎn)數(shù)。
5. float:用4個(gè)字節(jié)來存儲(chǔ)一個(gè)浮點(diǎn)數(shù)。
6. int:用4個(gè)字節(jié)來存儲(chǔ)的整數(shù)。范圍-231-231-1
7. long:8個(gè)字節(jié)來存儲(chǔ)的整數(shù)。范圍-263-263-1
8. short:2個(gè)字節(jié)存儲(chǔ)的整數(shù)。范圍-215-215-1
9. 基本數(shù)據(jù)類型之間的轉(zhuǎn)換:從窄范圍到寬范圍可以自動(dòng)轉(zhuǎn)換,反之則需要強(qiáng)制轉(zhuǎn)換。強(qiáng)制轉(zhuǎn)化可能有數(shù)據(jù)和精度的丟失,也有可能改變數(shù)據(jù)的正負(fù)性。Byte→short→int→long→float→double以及char→int可以自動(dòng)轉(zhuǎn)化;其他情況則需強(qiáng)制轉(zhuǎn)化。
10.整數(shù)在內(nèi)存的存儲(chǔ)狀態(tài)存在一一對(duì)應(yīng)的關(guān)系,而實(shí)數(shù)則為近似存儲(chǔ),只有在整數(shù)的范圍內(nèi)才能用存儲(chǔ)空間大小判斷。
11.強(qiáng)轉(zhuǎn)規(guī)則:大范圍轉(zhuǎn)換成小范圍整數(shù),將二進(jìn)制位中的高位去掉保留低位,實(shí)數(shù)→整數(shù),則只需將小數(shù)截掉保留整數(shù)。
12.java中默認(rèn)的數(shù)值類型為double。
引用和對(duì)象
1. 引用其實(shí)就是存儲(chǔ)了一個(gè)地址值的變量,類似于c語言和C++中的指針。
2. 一個(gè)引用只能連接一個(gè)對(duì)象。
3. 一些用能夠指向同一個(gè)對(duì)象。
4. 如果沒有一個(gè)引用指向?qū)ο?,則會(huì)被JVM當(dāng)垃圾處理。
5. 空指針異常(定義看一個(gè)引用,但在程序中并沒有在程序中使用它)
運(yùn)算符
++ ;--;其他略
1. ++ 實(shí)現(xiàn)變量的自加運(yùn)算。b=a++;等價(jià)于 b=a;a=a+1;b=++a;等價(jià)于a=a+1;b=a;
2. 運(yùn)算符的優(yōu)先級(jí)別:. ,【】,()優(yōu)先級(jí)最高,其次,依次是:單目運(yùn)算符、算術(shù)運(yùn)算符、移位運(yùn)算符、關(guān)系運(yùn)算符、等值運(yùn)算符、位運(yùn)算符、邏輯運(yùn)算法、條件運(yùn)算符、賦值運(yùn)算。
流程控制
if-else語句
實(shí)現(xiàn)選擇。可以嵌套,根據(jù)if()括號(hào)里面的語句,如果為真則執(zhí)行if后面跟的大括號(hào)里面的內(nèi)容。如果為假則執(zhí)行else大括號(hào)里面的內(nèi)容??梢远嘀厍短?。
如:if(){
if(){
}else{
}
……
}else{
}
或者if(){
}else if(){
}else if(){
}
……
else if(){
}else{
}
switch語句
switch語句格式如下:
int a;
switch(a){
case1:……;break;
case2:……;break;
case3:……;break;
……
default:……;
}
case后面跟常量,可以的數(shù)據(jù)類型有:byte、short、char、int和枚舉。
循環(huán)語句
1. for循環(huán):格式for(1;2;3)1.代表初始化語句,2.循環(huán)條件,3.步長語句。
for循環(huán)適合做循環(huán)次數(shù)預(yù)先已知的循環(huán)。
2. while循環(huán):格式while(statement=true){……};為真則執(zhí)行循環(huán)體內(nèi)語句,再判斷循環(huán)條件。當(dāng)條件為假時(shí)則跳出循環(huán)。while適合用于做循環(huán)次數(shù)預(yù)先未知的循環(huán)。
3. do—while循環(huán):格式為:do{……}while(statement=true)先執(zhí)行do后面循環(huán)體語句,然后再判斷while的循環(huán)條件,為真時(shí)繼續(xù)執(zhí)行循環(huán)體語句,為假時(shí)則跳出循環(huán)。Do—while適合做至少循環(huán)一次的循環(huán)。
4. continue和break
continue:結(jié)束本次循環(huán),重新開始下一次循環(huán)。continue+語句標(biāo)號(hào):結(jié)束語句標(biāo)號(hào)的那一遍循環(huán),執(zhí)行下一遍循環(huán)。
break:結(jié)束本個(gè)循環(huán)。break+語句標(biāo)號(hào);結(jié)束語句標(biāo)識(shí)得那一層循環(huán)。
數(shù)組
1. 數(shù)組定義:把多個(gè)同類型的數(shù)據(jù)組織在一起的空間。
2. 數(shù)組的聲明,格式如:int [] a;
3. 將數(shù)組實(shí)例化:格式:int [] a=new int []{……(元素值)}。
4. java語言將數(shù)組也當(dāng)成對(duì)象來看,數(shù)組變量相當(dāng)于對(duì)象的引用。數(shù)組存儲(chǔ)空間相當(dāng)于對(duì)象空間。
5. 數(shù)組長度的獲取a.length來獲得。a表示數(shù)組名。
6. 二維數(shù)組的聲明:格式如:int[][]a;
7. 二維數(shù)組的初始化:int[][]a=new int a[][]{{},{}}。
8. 二維數(shù)組其實(shí)可以看做是兩個(gè)一維數(shù)組的組合體,對(duì)數(shù)組元素的訪問格式如a[行數(shù)][列數(shù)]。
9. **數(shù)組基本上同二維數(shù)組。對(duì)多為數(shù)組的長度的訪問有:a.length表示數(shù)組的行數(shù),a[0].length表示列數(shù)。
10.在使用數(shù)組時(shí)一定要注意下標(biāo)越界問題,數(shù)組的下標(biāo)一定是從0開始。下標(biāo)越界則java會(huì)產(chǎn)生ArrayIndexOutOfBoundException。
11.java.util.Arrays類提供了一些讓我們對(duì)數(shù)組進(jìn)行操作的方法。比如:排序、查找。使用時(shí)我們不需要自己去實(shí)現(xiàn)排序和查找的算法。
Java面向?qū)ο?span lang="EN-US">
面向?qū)ο蠡A(chǔ)
1. 軟件設(shè)計(jì)的本質(zhì)工作就是對(duì)現(xiàn)實(shí)世界做抽象,而抽象又可分為數(shù)據(jù)的抽象和業(yè)務(wù)過程的抽象。
2. 如果以業(yè)務(wù)過程的抽象作為整個(gè)軟件的抽象導(dǎo)向,那么我們的軟件中只有業(yè)務(wù)過程的定義(函數(shù)),這就是面向過程的程序設(shè)計(jì)方法。
3. 如果以數(shù)據(jù)的抽象作為整個(gè)軟件抽象的導(dǎo)向,那么我們的軟件中就只有數(shù)據(jù)類型的定義(類),所有的業(yè)務(wù)過程都封裝在數(shù)據(jù)類型的定義中,這就是面向?qū)ο蟮脑O(shè)計(jì)方法。
4. 對(duì)象中使用的數(shù)據(jù)抽象主要是類,等同于面向過程中的函數(shù),但是又有本質(zhì)上的區(qū)別。生成對(duì)象的語法:用關(guān)鍵字new。
5. 創(chuàng)建對(duì)象的三個(gè)基本步驟:分配空間,初始化屬性,調(diào)用構(gòu)造方法。
6. A類中通過一個(gè)引用去訪問B類,則叫做關(guān)聯(lián)關(guān)系。面向?qū)ο笾械年P(guān)聯(lián)關(guān)系有一對(duì)一的關(guān)聯(lián)、一對(duì)多的關(guān)聯(lián)和多對(duì)多的關(guān)聯(lián)。
類
1.是一種抽象的數(shù)據(jù)類型。是數(shù)據(jù)和代碼的集合。
2.對(duì)象是類的實(shí)例。
3.在java語言中類的聲明與實(shí)現(xiàn)的接口是在同一時(shí)間進(jìn)行的。在c++中,類的聲明和實(shí)現(xiàn)的接口是可以分開的。
4.在包中可以建立一個(gè)新的類,也可以聲明一個(gè)其他的類來使用這個(gè)新建的類,可以定義類的使用范圍,如果在其他類中需要使用這個(gè)類則要為這個(gè)類建立一個(gè)構(gòu)造函數(shù),在類中可以定義許多的方法。在類的定義中可定義多個(gè)屬性,多個(gè)方法且可重名,也可相互調(diào)用。
5.類的聲明可以包含如下3個(gè)選項(xiàng):類修飾符、父類、類實(shí)現(xiàn)的接口。
6.public表示這個(gè)類可以在其他任何類中使用。abstract表明這是個(gè)抽象類,不可以被實(shí)例化,final表示這個(gè)類不能被繼承,即沒有子類。
7.在類中可以聲明多個(gè)成員變量。成員變量即是類和對(duì)象的特征屬性,一般在聲明成員方法之前聲明成員變量。不帶static關(guān)鍵字的成員變量都是實(shí)例變量。用static修飾的變量是一個(gè)類變量。
8.類變量和實(shí)例變量的差別是,不管為類創(chuàng)建了多少對(duì)象,系統(tǒng)僅在第一調(diào)用類的時(shí)候?yàn)樽兞糠峙鋬?nèi)存,所有對(duì)象共享該類的類標(biāo)量??梢酝ㄟ^類本身或者某個(gè)對(duì)象來訪問類變量。
9.類的封裝,類中的屬性必須隱藏。讓外部程序按照類規(guī)定的操作去訪問。
10.抽象類不能創(chuàng)建對(duì)象,必須首先創(chuàng)建它的的子類,然后由子類創(chuàng)建對(duì)象。
方法
1. 方法的定義:修飾符返回值類型 方法名 (參數(shù)列表){代碼塊}。
2. 方法一定有返回值類型(構(gòu)造方法除外)。
3. 如果在方法中沒有返回值產(chǎn)生則將返回值類型定義為void,定義為void則可以沒有return語句,否則一定需要有return語句。
4. 在方法的調(diào)用時(shí)一定要注意:
(1) 方法聲明的形參個(gè)數(shù)、類型、次序要和調(diào)用該方法是傳給它的實(shí)參個(gè)數(shù),類型、次序要一致。
(2) 方法聲明的返回值類型要和return語句中返回值類型匹配。
5. 方法是類的動(dòng)態(tài)屬性,對(duì)象的行為是由它的方法來實(shí)現(xiàn)。一個(gè)對(duì)象可以通過調(diào)用另一個(gè)對(duì)象的方法來訪問該對(duì)象。
6. 實(shí)例方法可以對(duì)當(dāng)前對(duì)象的實(shí)例變量進(jìn)行操作,而且可以訪問類變量。
7. 使用static修飾的方法為類方法。類方法能操作類變量,但不能訪問類中定義的實(shí)例變量。
8. 實(shí)例成員和類成員的另外一個(gè)不同點(diǎn)就是類成員可以通過類名直接訪問,重載的方法參數(shù)必須有所區(qū)別。參數(shù)類型不同,參數(shù)的順序也不同,參數(shù)的個(gè)數(shù)也不相同。
9. 如果用戶沒有定義構(gòu)造方法,則系統(tǒng)自動(dòng)創(chuàng)建缺省的構(gòu)造方法,無實(shí)參。
10.當(dāng)通過return語句從方法返回信息時(shí)基本數(shù)據(jù)類型的變量總是以值的形式返回,而對(duì)象總是以引用的方式返回。
11.構(gòu)造方法的特殊性表現(xiàn)在:
(1) 構(gòu)造方法名與類名重名
(2) 構(gòu)造方法沒有返回值類型。
(3) 構(gòu)造方法的主要作用是完成對(duì)象的初始化工作。
(4) 構(gòu)造方法不能像一般方法那樣直接調(diào)用,應(yīng)該要用new關(guān)鍵字調(diào)用構(gòu)造方法為新對(duì)象初始化。
12.構(gòu)造方法一般是生成對(duì)象時(shí)系統(tǒng)自動(dòng)調(diào)用的,構(gòu)造方法的調(diào)用總是伴隨著對(duì)象的生成,反之亦然。
13.方法參數(shù)是方法或者構(gòu)造方法的形式參數(shù)。用于傳遞值給方法和構(gòu)造方法。方法參數(shù)的作用域是整個(gè)方法或者構(gòu)造方法。
14.this關(guān)鍵字的用法:
(1) 直接寫this代表當(dāng)前對(duì)象。
(2) this.XXX:訪問當(dāng)前對(duì)象的的實(shí)例成員。僅當(dāng)方法中定義有與屬性同名的局部變量時(shí),在方法中訪問類的屬性才需要用this。XXX。
(3) this();調(diào)用本類的其他構(gòu)造方法,這種用法只能出現(xiàn)在構(gòu)造方法的
的第一行。
15. 類中的屬性私有后,如果外部需要訪問則在外部提供訪問方法。get+屬性名或是set+屬性名。
繼承
1. 如果某個(gè)類沒有明確聲明父類,則默認(rèn)繼承自java.lang.Abject,所以Object類。Object類是所有類的直接或間接父類,Object類中的多有方法搜將被其他類繼承。
2. 繼承實(shí)現(xiàn)了代碼的復(fù)用,任何子類的構(gòu)造方法都會(huì)調(diào)用父類的構(gòu)造方法。
3. java的繼承結(jié)構(gòu)是單一繼承結(jié)構(gòu),一個(gè)父類可以派生出多個(gè)子類,一個(gè)子類只有唯一的一個(gè)父類,類似樹狀結(jié)構(gòu)。
4. super關(guān)鍵字的用法:
(1) super.XXX:訪問父類中定義的實(shí)例成員。僅當(dāng)子類有與父類同名的成員時(shí)類中訪問父類成員需要使用super.XXX。
(2) super.(XXX):調(diào)用父類的構(gòu)造方法,該用法只能出現(xiàn)在構(gòu)造方法的第一行。
5. 父類、子類之間的掛席具有:
(1) 共享性:即子類可以共享父類的公共域和方法。
(2) 差異性:即子類和父類一定會(huì)存在差異,否則應(yīng)該是同一個(gè)類。
(3) 層次性:單繼承性,每個(gè)類都處于繼承關(guān)系中的某一個(gè)層面。
6. 構(gòu)造方法的繼承遵循以下原則:
(1) 子類無條件的繼承父類的無參數(shù)構(gòu)造方法。
(2) 如果子類沒有定義構(gòu)造方法,則它將繼承父類的無參數(shù)構(gòu)造方法作為自己的構(gòu)造方法,如果子類定義了構(gòu)造方法,則在新建對(duì)象時(shí),將先執(zhí)行繼承自父類的無參數(shù)構(gòu)造方法,然后執(zhí)行自己的構(gòu)造方法。
(3) 對(duì)于父類帶參數(shù)的構(gòu)造方法,子類可以通過在自己的構(gòu)造方法中使用super類關(guān)鍵字來調(diào)用它,這個(gè)調(diào)用語句必須是子類構(gòu)造方法的第一個(gè)可執(zhí)行語句。
多態(tài)
1. 對(duì)象的多態(tài):一個(gè)對(duì)象多種形態(tài)。
2. 對(duì)象多態(tài)的基礎(chǔ):子類對(duì)象可以當(dāng)做父類對(duì)象來看。
3. 對(duì)象多態(tài)的核心定理:
(1) 如果我們把子類對(duì)象當(dāng)做父類對(duì)象來看,那么我們就只能訪問父類中已有的屬性和方法(不能訪問子類擴(kuò)展的屬性和方法)。
(2) 如果子類把父類方法覆蓋了,再把子類對(duì)象當(dāng)做父類對(duì)象來看,去調(diào)用該方法,調(diào)用的是覆蓋之后的方法。
4. Animal a=new Bird();
該語句可以這樣理解:
(1) 左邊是編譯時(shí)的類型——編譯器認(rèn)為a是什么類型。右邊是運(yùn)行時(shí)類型—即java虛擬機(jī)認(rèn)為a是什么類型。
(2) 左邊是主觀認(rèn)為(我們把a當(dāng)做什么看?),右邊是客觀存在(a實(shí)際上是什么?)。
(3) 編譯器認(rèn)為a是Animal沒有Bird中定義的方法。JVM認(rèn)為a是Bird。
5. 如果子類中定義與父類相同的方法,有兩種情況:
(1) 同名不同參,叫做方法的重載。
(2) 同名同參,叫做方法的覆蓋或者重寫。
6. 方法覆蓋中需要注意的問題是:子類在重新定義父類已有的方法時(shí),應(yīng)保持與父類完全相同的方法頭部的聲明,即應(yīng)與父類有完全相同的方法名、返回值類型、和參數(shù)列表。否則不是方法的覆蓋,而是子類定義了與父類無關(guān)的方法,父類方法仍然存在于子類中。
7. 方法的覆蓋與對(duì)象的隱藏不同之處在于:子類隱藏父類對(duì)象只是使之不可見,父類的同名對(duì)象在子類對(duì)象中仍占有自己獨(dú)立的內(nèi)存空間,而子類方法對(duì)父類同名方法的覆蓋將清除父類方法占用的內(nèi)存空間,從而使父類方法在子類對(duì)象中不復(fù)存在。
8. 對(duì)象類型的強(qiáng)轉(zhuǎn):如知識(shí)點(diǎn)4,只有當(dāng)a本來就是Bird的實(shí)例是,才能將a轉(zhuǎn)化成Bird,否則會(huì)報(bào)告錯(cuò)誤。
9. 我們經(jīng)常在強(qiáng)制類型轉(zhuǎn)換之前首先使用instanceof判斷某個(gè)對(duì)象是否是某種類型的實(shí)例,這樣可以避免錯(cuò)誤的轉(zhuǎn)換。如:
if(a instanceof Bird){
Bird b=(Bird)a;
}
是否是一個(gè)類型的實(shí)例,考察時(shí)考慮其運(yùn)行時(shí)的類型,原本是一個(gè)類型可自動(dòng)向上轉(zhuǎn)化。
訪問控制修飾符
static
1. static 靜態(tài)的,static描述的屬性和方法是用來描述整個(gè)類的特征和行為的,不是用來描述某個(gè)對(duì)象個(gè)體的行為特征的。
2. 靜態(tài)屬性在整個(gè)類中只保留一份,在類加載時(shí)為其分配龍健。
3. static 可以修飾代碼快,不屬于任何方法是獨(dú)立的。
(1) 無名、無參、無返回的“三無”方法虛擬機(jī)會(huì)在核實(shí)的時(shí)機(jī)調(diào)用。、
(2) 非靜態(tài)的三無方法會(huì)在創(chuàng)建類對(duì)象時(shí)被JVM自動(dòng)調(diào)用。
(3) 靜態(tài)的三無防腐一般會(huì)在類加載時(shí)被JVM自動(dòng)調(diào)用。
類加載的時(shí)機(jī):
(1)java XXX啟動(dòng)java虛擬機(jī)、找到類的字節(jié)碼文件、找到類的主方法。
(2)在創(chuàng)建一個(gè)新的對(duì)象的時(shí)候。
(3)訪問類的一個(gè)靜態(tài)屬性和方法。
(4)手動(dòng)加載類,格式如class.forName(“類名”)。在整個(gè)JVM運(yùn)行的過程中一個(gè)類只加載一次。
4. 靜態(tài)方法中不能使用this,不能直接訪問本類的非靜態(tài)成員。
5. 靜態(tài)方法不能被覆蓋,沒有多態(tài)。
6. 靜態(tài)方法不與任何對(duì)象相關(guān)聯(lián)。
7. 靜態(tài)代碼塊定義在靜態(tài)屬性之后,初始化類的靜態(tài)屬性。
8. 靜態(tài)代碼塊在類加載時(shí)自動(dòng)執(zhí)行一次,經(jīng)常用來做類初始化工作,構(gòu)造方法用來做對(duì)象的初始化的工作。
final
1. final的屬性只有兩個(gè)機(jī)會(huì)可以復(fù)制:在定義時(shí)賦值和在構(gòu)造方法中賦值。
2. 一般static final的屬性都在定義時(shí)賦值,非static的final屬性在構(gòu)造方法中賦值。
3. final用來修飾類,則不能夠有派生類和子類,也不能被繼承。
4. final用來修飾類的屬性,表示屬性的值在對(duì)象生成的周期內(nèi)不會(huì)被改變。
5. 修飾方法,則表示該方法不能不覆蓋。
6. 修飾方法體內(nèi)的局部變量,表示值不可改變。
abstract
1. 用abstract修飾的方法是類方法。
2. 抽象方法:在面向?qū)ο筮^程中,有一些方法不知道該如何實(shí)現(xiàn),但可以確定該方法一定會(huì)需要實(shí)現(xiàn),則可以定義為抽象方法。
3. 如果類中包含一個(gè)抽象方法則該類一定要申明為抽象類,但如果類中包含的方法都是實(shí)例方法,該類也可以申明為抽象類。
4. 抽象類不能被實(shí)例化。
5. 抽象類的構(gòu)造方法子類可以調(diào)用。
6. 抽象方法是可以繼承的。
7. 子類實(shí)現(xiàn)父類的抽象方法實(shí)際上也是一種覆蓋。
8. 如果非抽象的子類繼承抽象的父類,在調(diào)用抽象方法時(shí)必須將父類的抽象方法進(jìn)行重寫。
接口
1. 接口是用來實(shí)現(xiàn)類間多重繼承功能的一種結(jié)構(gòu),是相對(duì)獨(dú)立完成特定功能的屬性集合。接口調(diào)用實(shí)際上就是獲得了多個(gè)特殊父類的屬性,即實(shí)現(xiàn)了多重繼承。
2. 接口定義看若干個(gè)抽象的方法和常量,形成一個(gè)屬性集合,該屬性集合通常對(duì)應(yīng)了某一組功能。接口的定義僅實(shí)現(xiàn)了某個(gè)特定功能的一組對(duì)外接口和規(guī)范,而這個(gè)功能的真正實(shí)現(xiàn)是在繼承這個(gè)接口的各個(gè)類中完成的要由這些類來具體定義接口中各抽象方法的方法體和適合某種特定的行為。
3. 接口的方法必須都是抽象方法。
4. 接口中的所以屬性都是默認(rèn)公開的靜態(tài)常量。
5. 接口不能被實(shí)例化。因?yàn)榻涌跊]有構(gòu)造方法。
6. 類與類之間的關(guān)系叫做繼承為單一的關(guān)系,類與接口之間的關(guān)系叫做實(shí)現(xiàn)可以是多重關(guān)系。即一個(gè)類可用以實(shí)現(xiàn)多個(gè)接口,接口名用逗號(hào)隔開。接口與接口之間的關(guān)系是可以是多對(duì)一的關(guān)系。即一個(gè)接口可以繼承多個(gè)接口。
7. 定義接口用interface關(guān)鍵字。
8. 接口編程的最大好處:將服務(wù)的提供者和服務(wù)的使用者分離開來,這樣服務(wù)的使用者只需要關(guān)心標(biāo)準(zhǔn)而不需要關(guān)心具體實(shí)現(xiàn),如果以后服務(wù)的實(shí)現(xiàn)變化了,而上層不需要做任何改變,從而降低系統(tǒng)的耦合。
9. 基于抽象(接口)的編程還能讓程序具有更好的兼容性和通用性,能夠使用抽象類型的地方一般不要使用具體類型。
10.接口與抽象類的區(qū)別:
(1) 接口不能夠有任何可以實(shí)現(xiàn)的方法,抽象類可以有。
(2) 類可以繼承多個(gè)接口,但只能繼承一個(gè)父類。
(3) 類有嚴(yán)格的層次結(jié)構(gòu),而接口不是類層次結(jié)構(gòu)的一部分,沒有聯(lián)系的類可以實(shí)現(xiàn)相同的接口。
11.當(dāng)類實(shí)現(xiàn)一個(gè)接口中的抽象方法時(shí),這個(gè)方法的名字和參數(shù)類型及數(shù)目必須與接口中的方法一致。
12.實(shí)現(xiàn)接口時(shí)應(yīng)該注意:
(1) 類的聲明部分用implements關(guān)鍵字聲明該類將要實(shí)現(xiàn)那些接口。
(2) 類在實(shí)現(xiàn)抽象方法時(shí),必須用public修飾符。
(3) 除抽象類外,在類的定義部分必須為接口中所有的抽象方法體定義方法體切方法體的首部應(yīng)該與接口中的定義完全一致。
(4) 若實(shí)現(xiàn)某接口的類是抽象類,則它可以不實(shí)現(xiàn)該接口中所有的方法,但是對(duì)于這個(gè)抽象類的任何一個(gè)非抽象子類,不允許存在未被實(shí)現(xiàn)的借口方法。那些非抽象類中不能存在抽象的方法。
(5) 定義一個(gè)接口實(shí)際上定義了一個(gè)新的引用數(shù)據(jù)類型,可以在使用接口類型外的其他類型的名字的地方,都可以使用這個(gè)接口名。
(6) 接口不能被覆蓋。
高級(jí)語法
1. 頂層類可用的修飾符有:public、protected、default、final、abstract. private、static不能用來修飾頂層類。
2. 類的屬性可用的修飾符有:public、protected、default、private、static、final。abstract不能用來修飾屬性。
3. 方法可用的修飾符有:public、protected、default、private、static、final、abstract。
局部變量可用的修飾符有:final。不可用public、protected、default、private、static、abstract修飾符來修飾。
4. 內(nèi)部類可用的修飾符有:public、protected、default、private、static、final、abstract。
修飾符的訪問控制權(quán)限:public:在類的內(nèi)部可以訪問,同包可以訪問,子類可以訪問,其他也可以訪問。
5. protected:在類的類部可以訪問,在相同的包內(nèi)也可以訪問、子類可以訪問。其他則不可以訪問。
6. default:在類的累不可以訪問,在相同的包內(nèi)可以訪問,子類不可以訪問,其他也不能訪問。
7. private:在類的內(nèi)部可以訪問,在相同的包內(nèi)不可以訪問,子類中也不能訪問,其他也不能訪問。
8. 注意:不能用生成的對(duì)象去直接訪問父類中的protected屬性。
java.lang包下的Object類:
1. Object clone():創(chuàng)建和返回一個(gè)當(dāng)前對(duì)象的拷貝。
2. 在程序中完成一個(gè)當(dāng)前對(duì)象的拷貝需要在自己的類中將clone方法重寫。
3. 重寫的過程有:
1、在自己的類中寫一個(gè)clone()方法,覆蓋Object類中的clone();并聲明為public。
2、在重寫的方法中調(diào)用父類的clone()方法。格式為super.clone()。
3、在派生的類中要實(shí)現(xiàn)cloneable接口。該接口只起標(biāo)記的作用。
boolean equals(Object obj):用來判斷對(duì)象的值是否相等。
equals與“==”的區(qū)別:
1、如果Object類中的equals()方法沒有重寫,則與“==”相同,判斷對(duì)象是否相等,實(shí)際上比較的是以用的值(對(duì)象的地址值)。
2、如果equals()方法已經(jīng)由程序員自己重寫,則會(huì)覆蓋父類中的equals()方法,比較時(shí)則根據(jù)程序員自己定義的比較規(guī)則,進(jìn)行比較如果相等則為true,不等則為false。
同時(shí)equals()方法必須遵循以下的幾條規(guī)則:
1、自反性:對(duì)于任何一個(gè)非空以用值x,x.equals(x)的返回值必須為true。
2、對(duì)稱性:對(duì)于任何非空引用值x和y,x.equlas(y)返回值為true當(dāng)且僅當(dāng)y.equals(x)返回值為true。
3、傳遞性:對(duì)于任何非空引用值x、y和z,如果x.equals(y)返回值為true和y.equals(z)返回值為true,那么x.equals(z)的返回值也為true。
4、一致性:對(duì)于任何非空引用值x和y。多次調(diào)用x.equals(y),要么始終返回true,要么始終返回false,前提條件是對(duì)象上的所有信息沒有被修改。
5、對(duì)于任何非空引用值x,x.equals(null),返回值一定為false。
String類和對(duì)象池
1. 在JDK5.0里面,java虛擬機(jī)在啟動(dòng)時(shí)會(huì)實(shí)例化9個(gè)對(duì)象池,這9個(gè)對(duì)象池分別用來存儲(chǔ)8中基本類型的包裝類對(duì)象和String對(duì)象。我們?cè)诔绦蛑兄苯佑秒p引號(hào)括起來一個(gè)字符串時(shí),JVM就到String的對(duì)象池里去尋找是否有一個(gè)值相同的對(duì)象,如果有,就拿現(xiàn)成的對(duì)象,如果沒有就在對(duì)象池里面創(chuàng)建一個(gè)對(duì)象,并返回。
2. 字符串池中的值是不可變的。
3. String str2=new String(“hello”),是直接生成一個(gè)新對(duì)象。
4. String s=new String(“hello”)創(chuàng)建了兩個(gè)對(duì)象,在程序中有雙引號(hào)引起的字符串首先創(chuàng)建了一個(gè)新的字符串,有在字符串池中構(gòu)造了一個(gè)新的對(duì)象。
5. 在任何情況下,只要你去new了一個(gè)String對(duì)象那都是創(chuàng)建了一個(gè)新的對(duì)象。
聯(lián)系客服