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