第2章 一切都是對象2.1 用句柄操縱對象2.2 必須創(chuàng)建所有對象2.2.1 保存在什么地方2.2.2 特殊情況:主類型2.2.3 Java中的數(shù)組2.3 絕對不要清除對象2.3.1 作用域2.3.2 對象的作用域2.4 新建數(shù)據(jù)類型:類2.4.1 字段和方法2.5 方法、自變量和返回值2.5.1 自變量列表2.6 構(gòu)建Java程序2.6.1 名字的可見性2.6.2 使用其他組件2.6.3 static關(guān)鍵字2.7 我們的第一個Java程序2.8 注釋和嵌入文檔2.8.1 注釋文檔2.8.2 具體語法2.8.3 嵌入HTML2.8.4 @see:引用其他類2.8.5 類文檔標記2.8.6 變量文檔標記2.8.7 方法文檔標記2.8.8 文檔示例2.9 編碼樣式2.10 總結(jié)2.11 練習 第3章 控制程序流程3.1 使用Java運算符3.1.1 優(yōu)先級3.1.2 賦值3.1.3 算術(shù)運算符3.1.4 自動遞增和遞減3.1.5 關(guān)系運算符3.1.6 邏輯運算符3.1.7 按位運算符3.1.8 移位運算符3.1.9 三元if-else運算符3.1.10 逗號運算符3.1.11 字串運算符+3.1.12 運算符常規(guī)操作規(guī)則3.1.13 造型運算符3.1.14 Java沒有“sizeof”3.1.15 復習計算順序3.1.16 運算符總結(jié)3.2 執(zhí)行控制3.2.1 真和假3.2.2 if-else3.2.3 反復3.2.4 do-while3.2.5 for3.2.6 中斷和繼續(xù)3.2.7 切換3.3 總結(jié)3.4 練習 第4章 初始化和清除4.1 由構(gòu)建器保證初始化4.2 方法過載4.2.1 區(qū)分過載方法4.2.2 主類型的過載4.2.3 返回值過載4.2.4 默認構(gòu)建器4.2.5 this關(guān)鍵字4.3 清除:收尾和垃圾收集4.3.1 finalize()用途何在4.3.2 必須執(zhí)行清除4.4 成員初始化4.4.1 規(guī)定初始化4.4.2 構(gòu)建器初始化4.5 數(shù)組初始化4.5.1 多維數(shù)組4.6 總結(jié)4.7 練習 第5章 隱藏實施過程5.1 包:庫單元5.1.1 創(chuàng)建獨一無二的包名5.1.2 自定義工具庫5.1.3 利用導入改變行為5.1.4 包的停用5.2 Java訪問指示符5.2.1 “友好的”5.2.2 public:接口訪問5.2.3 private:不能接觸5.2.4 protected:“友好的一種”5.3 接口與實現(xiàn)5.4 類訪問5.5 總結(jié)5.6 練習 第6章 類再生6.1 合成的語法6.2 繼承的語法6.2.1 初始化基礎(chǔ)類6.3 合成與繼承的結(jié)合6.3.1 確保正確的清除6.3.2 名字的隱藏6.4 到底選擇合成還是繼承6.5 protected6.6 遞增開發(fā)6.7 上溯造型6.7.1 何謂“上溯造型”?6.8 final關(guān)鍵字6.8.1 final數(shù)據(jù)6.8.2 final方法6.8.3 final類6.8.4 final的注意事項6.9 初始化和類裝載6.9.1 繼承初始化6.10 總結(jié)6.11 練習 第7章 多形性7.1 上溯造型7.1.1 為什么要上溯造型7.2 深入理解7.2.1 方法調(diào)用的綁定7.2.2 產(chǎn)生正確的行為7.2.3 擴展性7.3 覆蓋與過載7.4 抽象類和方法7.5 接口7.5.1 Java的“多重繼承”7.5.2 通過繼承擴展接口7.5.3 常數(shù)分組7.5.4 初始化接口中的字段7.6 內(nèi)部類7.6.1 內(nèi)部類和上溯造型7.6.2 方法和作用域中的內(nèi)部類7.6.3 鏈接到外部類7.6.4 static內(nèi)部類7.6.5 引用外部類對象7.6.6 從內(nèi)部類繼承7.6.7 內(nèi)部類可以覆蓋嗎?7.6.8 內(nèi)部類標識符7.6.9 為什么要用內(nèi)部類:控制框架7.7 構(gòu)建器和多形性7.7.1 構(gòu)建器的調(diào)用順序7.7.2 繼承和finalize()7.7.3 構(gòu)建器內(nèi)部的多形性方法的行為7.8 通過繼承進行設(shè)計7.8.1 純繼承與擴展7.8.2 下溯造型與運行期類型標識7.9 總結(jié)7.10 練習 第8章 對象的容納8.1 數(shù)組8.1.1 數(shù)組和第一類對象8.1.2 數(shù)組的返回8.2 集合8.2.1 缺點:類型未知8.3 枚舉器(反復器)8.4 集合的類型8.4.1 Vector8.4.2 BitSet8.4.3 Stack8.4.4 Hashtable8.4.5 再論枚舉器8.5 排序8.6 通用集合庫8.7 新集合8.7.1 使用Collections8.7.2 使用Lists8.7.3 使用Sets8.7.4 使用Maps8.7.5 決定實施方案8.7.6 未支持的操作8.7.7 排序和搜索8.7.8 實用工具8.8 總結(jié)8.9 練習 第9章 違例差錯控制9.1 基本違例9.1.1 違例自變量9.2 違例的捕獲9.2.1 try塊9.2.2 違例控制器9.2.3 違例規(guī)范9.2.4 捕獲所有違例9.2.5 重新“擲”出違例9.3 標準Java違例9.3.1 RuntimeException的特殊情況9.4 創(chuàng)建自己的違例9.5 違例的限制9.6 用finally清除9.6.1 用finally做什么9.6.2 缺點:丟失的違例9.7 構(gòu)建器9.8 違例匹配9.8.1 違例準則9.9 總結(jié)9.10 練習 第10章 Java IO系統(tǒng)10.1 輸入和輸出10.1.1 InputStream的類型10.1.2 OutputStream的類型10.2 增添屬性和有用的接口10.2.1 通過FilterInputStream從InputStream里讀入數(shù)據(jù)10.2.2 通過FilterOutputStream向OutputStream里寫入數(shù)據(jù)10.3 本身的缺陷:RandomAccessFile10.4 File類10.4.1 目錄列表器10.4.2 檢查與創(chuàng)建目錄10.5 IO流的典型應(yīng)用10.5.1 輸入流10.5.2 輸出流10.5.3 快捷文件處理10.5.4 從標準輸入中讀取數(shù)據(jù)10.5.5 管道數(shù)據(jù)流10.6 StreamTokenizer10.6.1 StringTokenizer10.7 Java 1.1的IO流10.7.1 數(shù)據(jù)的發(fā)起與接收10.7.2 修改數(shù)據(jù)流的行為10.7.3 未改變的類10.7.4 一個例子10.7.5 重定向標準IO10.8 壓縮10.8.1 用GZIP進行簡單壓縮10.8.2 用Zip進行多文件保存10.8.3 Java歸檔(jar)實用程序10.9 對象串聯(lián)10.9.1 尋找類10.9.2 序列化的控制10.9.3 利用“持久性”10.10 總結(jié)10.11 練習 第11章 運行期類型鑒定11.1 對RTTI的需要11.1.1 Class對象11.1.2 造型前的檢查11.2 RTTI語法11.3 反射:運行期類信息11.3.1 一個類方法提取器11.4 總結(jié)11.5 練習 第12章 傳遞和返回對象12.1 傳遞句柄12.1.1 別名問題12.2 制作本地副本12.2.1 按值傳遞12.2.2 克隆對象12.2.3 使類具有克隆能力12.2.4 成功的克隆12.2.5 Object.clone()的效果12.2.6 克隆合成對象12.2.7 用Vector進行深層復制12.2.8 通過序。
對于Java開發(fā)學習者來說,基礎(chǔ)掌握的知識點有以下幾種:
1. Java面向?qū)ο蟮膬?yōu)點:易維護、易復用、易擴展,由于面向?qū)ο笥蟹庋b、繼承、多態(tài)性的特性,可以設(shè)計出低耦合的系統(tǒng),使系統(tǒng)更加靈活、更加易于維護。
2. Java虛擬機的概念,任何一種可以運行Java字節(jié)碼的軟件均可看成是Java的虛擬機(JVM)
3. JDK顧名思義它是給開發(fā)者提供的開發(fā)工具箱,是給程序開發(fā)者用的。它除了包括完整的JRE(Java Runtime Environment),Java運行環(huán)境,還包含了其他供開發(fā)者使用的工具包。
4. JRE的概念,普通用戶而只需要安裝JRE(Java Runtime Environment)來運行Java程序。而程序開發(fā)者必須安裝JDK來編譯、調(diào)試程序。
5. Java中覆蓋(Override)是指子類對父類方法的一種重寫,子類只能拋出比父類更少的異常,且訪問權(quán)限不能比父類的小。被覆蓋的方法不能是 private 的,否則只是在子類中重新定義了一個方法。
Java中重載(Overload)表示同一個類中可以有多個名稱相同的方法,但這些方法的參數(shù)列表各不相同。
總的說來,Java API中所用的集合類,都是實現(xiàn)了Collection接口,他的一個類繼承結(jié)構(gòu)如下:
Collection<--List<--Vector
Collection<--List<--ArrayList
Collection<--List<--LinkedList
Collection<--Set<--HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet
Vector : 基于Array的List,其實就是封裝了Array所不具備的一些功能方便我們使用,它不可能走入Array的限制。性能也就不可能超越Array。所以,在可能的情況下,我們要多運用Array。另外很重要的一點就是Vector“sychronized”的,這個也是Vector和ArrayList的唯一的區(qū)別。
ArrayList:同Vector一樣是一個基于Array上的鏈表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector優(yōu)越一些,但是當運行到多線程環(huán)境中時,可需要自己在管理線程的同步問題。
LinkedList:LinkedList不同于前面兩種List,它不是基于Array的,所以不受Array性能的限制。它每一個節(jié)點(Node)都包含兩方面的內(nèi)容:1.節(jié)點本身的數(shù)據(jù)(data);2.下一個節(jié)點的信息(nextNode)。所以當對LinkedList做添加,刪除動作的時候就不用像基于Array的List一樣,必須進行大量的數(shù)據(jù)移動。只要更改nextNode的相關(guān)信息就可以實現(xiàn)了。這就是LinkedList的優(yōu)勢。
List總結(jié):
1. 所有的List中只能容納單個不同類型的對象組成的表,而不是Key-Value鍵值對。例如:[ tom,1,c ];
2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];
3. 所有的List中可以有null元素,例如[ tom,null,1 ];
4. 基于Array的List(Vector,ArrayList)適合查詢,而LinkedList(鏈表)適合添加,刪除操作。
HashSet:雖然Set同List都實現(xiàn)了Collection接口,但是他們的實現(xiàn)方式卻大不一樣。List基本上都是以Array為基礎(chǔ)。但是Set則是在HashMap的基礎(chǔ)上來實現(xiàn)的,這個就是Set和List的根本區(qū)別。HashSet的存儲方式是把HashMap中的Key作為Set的對應(yīng)存儲項。看看HashSet的add(Object obj)方法的實現(xiàn)就可以一目了然了。
public boolean add(Object obj)
{
return map.put(obj, PRESENT) == null;
}
這個也是為什么在Set中不能像在List中一樣有重復的項的根本原因,因為HashMap的key是不能有重復的。
LinkedHashSet:HashSet的一個子類,一個鏈表。
TreeSet:SortedSet的子類,它不同于HashSet的根本就是TreeSet是有序的。它是通過SortedMap來實現(xiàn)的。
Set總結(jié):
1. Set實現(xiàn)的基礎(chǔ)是Map(HashMap);
2. Set中的元素是不能重復的,如果使用add(Object obj)方法添加已經(jīng)存在的對象,則會覆蓋前面的對象;
根據(jù)大家在Java開發(fā)過程中容易混淆的知識點,下面進行一個總結(jié)。
1.Java語言的三種技術(shù)架構(gòu)J2EE:企業(yè)版是為開發(fā)企業(yè)環(huán)境下的應(yīng)用程序提供的一套解決方案。該技術(shù)體系中包含的技術(shù)如 Servlet、Jsp等,主要針對于Web應(yīng)用程序開發(fā)。
J2SE:標準版是為開發(fā)普通桌面和商務(wù)應(yīng)用程序提供的解決方案。該技術(shù)體系是其他兩者的基礎(chǔ),可以完成一些桌面應(yīng)用程序的開發(fā)。
J2ME:小型版是為開發(fā)電子消費產(chǎn)品和嵌入式設(shè)備提供的解決方案。該技術(shù)體系主要應(yīng)用于小型電子消費類產(chǎn)品,如手機中的應(yīng)用程序等。
2.Java的跨平臺性指通過Java語言編寫的應(yīng)用程序在不同的系統(tǒng)平臺上都可以運行。 實現(xiàn)步驟只需要在運行Java應(yīng)用程序的操作系統(tǒng)上,先安裝一個Java虛擬機(JVM Java Virtual Machine)即可。
3.函數(shù)就是定義在類中的具有特定功能的一段獨立小程序。通過定義函數(shù)可以將功能代碼進行封裝,提高了代碼的復用性。
4.重載指在同一個類中,允許存在一個以上的同名函數(shù),只要它們的參數(shù)個數(shù)或者參數(shù)類型不同即可。 5.數(shù)組:概念:同一種數(shù)據(jù)類型的集合。
好處:可以自動給數(shù)組中的元素從0開始編號,方便操作這些元素。
—、面向?qū)ο蟮奶卣髅嫦驅(qū)ο蟮娜齻€基本特征是:封裝、繼承、多態(tài)。
1、封裝封裝最好理解了。封裝是面向?qū)ο蟮奶卣髦唬菍ο蠛皖惛拍畹闹饕匦浴?/p>
封裝,也就是把客觀事物封裝成抽象的類,并且類可以把自己的數(shù)據(jù)和方法只讓 可信的類或者對象操作,對不可信的進行信息隱藏。2、繼承面向?qū)ο缶幊蹋∣OP)語言的一個主要功能就是“繼承”。
繼承是指這樣一種能力: 它可以使用現(xiàn)有類的所有功能,并在無需重新編寫原來的類的情況下對這些功能 進行擴展。3、多態(tài)多態(tài)性(polymorphism是允許你將父對象設(shè)置成為和一個或更多的他的子對象 相等的技術(shù),賦值之后,父對象就可以根據(jù)當前賦值給它的子對象的特性以不同 的方式運作。
簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的 指針。 實現(xiàn)多態(tài),有二種方式,重寫,重載。
詳見如下:網(wǎng)頁鏈接。
數(shù)組是集合的一種,是集合的一個子集,你理解了數(shù)組就理解了集合. 理解集合類 集合類存放于java.util包中。
集合類存放的都是對象的引用,而非對象本身,出于表達上的便利,我們稱集合中的對象就是指集合中對象的引用(reference)。 集合類型主要有3種:set(集)、list(列表)和map(映射)。
(1)集 集(set)是最簡單的一種集合,它的對象不按特定方式排序,只是簡單的把對象加入集合中,就像往口袋里放東西。 對集中成員的訪問和操作是通過集中對象的引用進行的,所以集中不能有重復對象。
集也有多種變體,可以實現(xiàn)排序等功能,如TreeSet,它把對象添加到集中的操作將變?yōu)榘凑漳撤N比較規(guī)則將其插入到有序的對象序列中。它實現(xiàn)的是SortedSet接口,也就是加入了對象比較的方法。
通過對集中的對象迭代,我們可以得到一個升序的對象集合。 (2)列表 列表的主要特征是其對象以線性方式存儲,沒有特定順序,只有一個開頭和一個結(jié)尾,當然,它與根本沒有順序的集是不同的。
列表在數(shù)據(jù)結(jié)構(gòu)中分別表現(xiàn)為:數(shù)組和向量、鏈表、堆棧、隊列。 關(guān)于實現(xiàn)列表的集合類,是我們?nèi)粘9ぷ髦薪?jīng)常用到的,將在后邊的筆記詳細介紹。
(3)映射 映射與集或列表有明顯區(qū)別,映射中每個項都是成對的。映射中存儲的每個對象都有一個相關(guān)的關(guān)鍵字(Key)對象,關(guān)鍵字決定了對象在映射中的存儲位置,檢索對象時必須提供相應(yīng)的關(guān)鍵字,就像在字典中查單詞一樣。
關(guān)鍵字應(yīng)該是唯一的。 關(guān)鍵字本身并不能決定對象的存儲位置,它需要對過一種散列(hashing)技術(shù)來處理,產(chǎn)生一個被稱作散列碼(hash code)的整數(shù)值,散列碼通常用作一個偏置量,該偏置量是相對于分配給映射的內(nèi)存區(qū)域起始位置的,由此確定關(guān)鍵字/對象對的存儲位置。
理想情況下,散列處理應(yīng)該產(chǎn)生給定范圍內(nèi)均勻分布的值,而且每個關(guān)鍵字應(yīng)得到不同的散列碼。 集合類簡介 java.util中共有13個類可用于管理集合對象,它們支持集、列表或映射等集合,以下是這些類的簡單介紹 集: HashSet: 使用HashMap的一個集的實現(xiàn)。
雖然集定義成無序,但必須存在某種方法能相當高效地找到一個對象。使用一個HashMap對象實現(xiàn)集的存儲和檢索操作是在固定時間內(nèi)實現(xiàn)的. TreeSet: 在集中以升序?qū)ο笈判虻募膶崿F(xiàn)。
這意味著從一個TreeSet對象獲得第一個迭代器將按升序提供對象。TreeSet類使用了一個TreeMap. 列表: Vector: 實現(xiàn)一個類似數(shù)組一樣的表,自動增加容量來容納你所需的元素。
使用下標存儲和檢索對象就象在一個標準的數(shù)組中一樣。你也可以用一個迭代器從一個Vector中檢索對象。
Vector是唯一的同步容器類??當兩個或多個線程同時訪問時也是性能良好的。 Stack: 這個類從Vector派生而來,并且增加了方法實現(xiàn)棧??一種后進先出的存儲結(jié)構(gòu)。
LinkedList: 實現(xiàn)一個鏈表。由這個類定義的鏈表也可以像棧或隊列一樣被使用。
ArrayList: 實現(xiàn)一個數(shù)組,它的規(guī)模可變并且能像鏈表一樣被訪問。它提供的功能類似Vector類但不同步。
映射: HashTable: 實現(xiàn)一個映象,所有的鍵必須非空。為了能高效的工作,定義鍵的類必須實現(xiàn)hashcode()方法和equal()方法。
這個類是前面java實現(xiàn)的一個繼承,并且通常能在實現(xiàn)映象的其他類中更好的使用。 HashMap: 實現(xiàn)一個映象,允許存儲空對象,而且允許鍵是空(由于鍵必須是唯一的,當然只能有一個)。
WeakHashMap: 實現(xiàn)這樣一個映象:通常如果一個鍵對一個對象而言不再被引用,鍵/對象對將被舍棄。這與HashMap形成對照,映象中的鍵維持鍵/對象對的生命周期,盡管使用映象的程序不再有對鍵的引用,并且因此不能檢索對象。
TreeMap: 實現(xiàn)這樣一個映象,對象是按鍵升序排列的。 Set和List都是由公共接口Collection擴展而來,所以它們都可以使用一個類型為Collection的變量來引用。
這就意味著任何列表或集構(gòu)成的集合都可以用這種方式引用,只有映射類除外(但也不是完全排除在外,因為可以從映射獲得一個列表。)所以說,把一個列表或集傳遞給方法的標準途徑是使用Collection類型的參數(shù)。
建議你看本書《Think in java》。上邊的講解很容易懂。
學java:
先把基本語法搞懂,你學過C++,java的語法和C++很像。你只要著重把他們不同的地方學清楚就行。
然后搞懂類。java純面向?qū)ο蟮摹K械拇a都在類中。所以你要把java中重要的類學一遍。比如流類,集合類,數(shù)據(jù)庫操作類,網(wǎng)絡(luò)編程的類等。當然,在這之前你要把java面向?qū)ο蟮乃枷肱虲++有什么區(qū)別。這樣你學習類的時候就容易多了。
最后多實踐點,學了類之后,就用你學的類寫點小程序,加深理解。
API說白了就是別人寫好的類。像上邊說的流類,集合類等都是API。API都有相應(yīng)的文檔供我們學習。你學java基礎(chǔ),一般在下載JDK時會同時下載下相應(yīng)的文檔。沒有的話你可以到官方網(wǎng)站上去下載。
1、對象的初始化(1) 非靜態(tài)對象的初始化 在創(chuàng)建對象時,對象所在類的所有數(shù)據(jù)成員會首先進行初始化。
基本類型:int型,初始化為0。 如果為對象:這些對象會按順序初始化。
※在所有類成員初始化完成之后,才調(diào)用本類的構(gòu)造方法創(chuàng)建對象。 構(gòu)造方法的作用就是初始化。
(2) 靜態(tài)對象的初始化 程序中主類的靜態(tài)變量會在main方法執(zhí)行前初始化。 不僅第一次創(chuàng)建對象時,類中的所有靜態(tài)變量都初始化,并且第一次訪問某類(注意此時 未創(chuàng)建此類對象)的靜態(tài)對象時,所有的靜態(tài)變量也要按它們在類中的順序初始化。
2、繼承時,對象的初始化過程 (1) 主類的超類由高到低按順序初始化靜態(tài)成員,無論靜態(tài)成員是否為private。 (2) 主類靜態(tài)成員的初始化。
(3) 主類的超類由高到低進行默認構(gòu)造方法的調(diào)用。注意,在調(diào)用每一個超類的默認構(gòu)造 方法前,先進行對此超類進行非靜態(tài)對象的初始化。
(4) 主類非靜態(tài)成員的初始化。 (5) 調(diào)用主類的構(gòu)造方法。
3、關(guān)于構(gòu)造方法 (1) 類可以沒有構(gòu)造方法,但如果有多個構(gòu)造方法,就應(yīng)該要有默認的構(gòu)造方法,否則在繼承此類時,需要在子類中顯式調(diào)用父類的某一個非默認的構(gòu)造方法了。 (2) 在一個構(gòu)造方法中,只能調(diào)用一次其他的構(gòu)造方法,并且調(diào)用構(gòu)造方法的語句必須是 第一條語句。
4、有關(guān)public、private和protected (1) 無public修飾的類,可以被其他類訪問的條件是:a.兩個類在同一文件中,b.兩個類 在同一文件夾中,c.兩個類在同一軟件包中。 (2) protected:繼承類和同一軟件包的類可訪問。
(3) 如果構(gòu)造方法為private,那么在其他類中不能創(chuàng)建該類的對象。 5、抽象類 (1) 抽象類不能創(chuàng)建對象。
(2) 如果一個類中一個方法為抽象方法,則這個類必須為abstract抽象類。 (3) 繼承抽象類的類在類中必須實現(xiàn)抽象類中的抽象方法。
(4) 抽象類中可以有抽象方法,也可有非抽象方法。抽象方法不能為private。
(5) 間接繼承抽象類的類可以不給出抽象方法的定義。 6、final關(guān)鍵字 (1) 一個對象是常量,不代表不能轉(zhuǎn)變對象的成員,仍可以其成員進行操作。
(2) 常量在使用前必須賦值,但除了在聲明的同時初始化外,就只能在構(gòu)造方法中初始化 。 (3) final修飾的方法不能被重置(在子類中不能出現(xiàn)同名方法)。
(4) 如果聲明一個類為final,則所有的方法均為final,無論其是否被final修飾,但數(shù)據(jù) 成員可為final也可不是。 7、接口interface (用implements來實現(xiàn)接口) (1) 接口中的所有數(shù)據(jù)均為 static和final即靜態(tài)常量。
盡管可以不用這兩個關(guān)鍵字修飾 ,但必須給常量賦初值。 (2) 接口中的方法均為public,在實現(xiàn)接口類中,實現(xiàn)方法必須可public關(guān)鍵字。
(3) 如果使用public來修飾接口,則接口必須與文件名相同。 8、多重繼承 (1) 一個類繼承了一個類和接口,那么必須將類寫在前面,接口寫在后面,接口之間用逗 號分隔。
(2) 接口之間可多重繼承,注意使用關(guān)鍵字extends。 (3) 一個類雖只實現(xiàn)了一個接口,但不僅要實現(xiàn)這個接口的所有方法,還要實現(xiàn)這個接口 繼承的接口的方法,接口中的所有方法均須在類中實現(xiàn)。
9、接口的嵌入 (1) 接口嵌入類中,可以使用private修飾。此時,接口只能在所在的類中實現(xiàn),其他類不 能訪問。
(2) 嵌入接口中的接口一定要為public。 10、類的嵌入 (1) 類可以嵌入另一個類中,但不能嵌入接口中。
(2) 在靜態(tài)方法或其他方法中,不能直接創(chuàng)建內(nèi)部類對象,需通過手段來取得。 手段有兩種: class A { class B {} B getB() { B b = new B(); return b; } } static void m() { A a = new A(); A.B ab = a.getB(); // 或者是 A.B ab = a.new B(); } (3) 一個類繼承了另一個類的內(nèi)部類,因為超類是內(nèi)部類,而內(nèi)部類的構(gòu)造方法不能自動 被調(diào)用,這樣就需要在子類的構(gòu)造方法中明確的調(diào)用超類的構(gòu)造方法。
接上例: class C extends A.B { C() { new A().super(); // 這一句就實現(xiàn)了對內(nèi)部類構(gòu)造方法的調(diào)用。 } } 構(gòu)造方法也可這樣寫: C(A a) { a.super(); } // 使用這個構(gòu)造方法創(chuàng)建對象,要寫成C c = new C(a); a是A的對象。
11、異常類 JAVA中除了RunTimeException 類,其他異常均須捕獲或拋出。至于數(shù)據(jù)庫,WEB,JSP,JS之類的那是高級部分了。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請在一個月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學習鳥. 頁面生成時間:2.817秒