学习笔记之Java程序设计实用教程
生活随笔
收集整理的這篇文章主要介紹了
学习笔记之Java程序设计实用教程
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Java程序設(shè)計實用教程 by 朱戰(zhàn)立 & 沈偉
學(xué)習(xí)筆記之JAVA多線程(http://www.cnblogs.com/pegasus923/p/3995855.html)
國慶休假前學(xué)習(xí)了多線程,休假花了兩天時間把整本書學(xué)完了。看書還就得一鼓作氣。
?第一章 概述
- 1995年SUN正式發(fā)布Java,前身是Oak。
- 1998年發(fā)布帶有JDK1.2的Java 2。
- JDK(JAVA DEVELOPMENT KIT),也稱作JAVA SDK(JAVA SOFTWARE DEVELOPMENT KIT)。
- J2ME(JAVA 2 MICRO EDITION)
- J2SE(JAVA 2 STANDARD EDITION)
- J2EE(JAVA 2 ENTERPRISE EDITION)
- 簡單、面向?qū)ο蠛团c現(xiàn)有高級語言形式類似。
- 魯棒性和安全性。可靠性依靠JAVA的編譯時檢查和運行時檢查兩層檢查機制實現(xiàn)。主要用于分布式的網(wǎng)絡(luò)環(huán)境。
- 結(jié)構(gòu)中立。JAVA先編譯產(chǎn)生字節(jié)碼(不依賴于任何硬件和操作系統(tǒng)的中間代碼),然后用解釋的方法產(chǎn)生最終在具體計算機上運行的機器碼。
- 高性能。解釋性程序設(shè)計語言運行速度慢,JAVA是半解釋型,但JAVA的解釋執(zhí)行能全速進(jìn)行,不用檢查運行時的環(huán)境(因該環(huán)境已在編譯時保證)。自動垃圾回收線程定義成優(yōu)先級很低的后臺線程,只在系統(tǒng)空閑時啟動執(zhí)行,也保證了運行速度。
- 解釋型、多線程和動態(tài)性。只要安裝JAVA解釋器,JAVA字節(jié)碼就能在任何計算機上解釋執(zhí)行。JAVA的多線程機制可提高復(fù)雜應(yīng)用程序的運行速度,并且有系統(tǒng)提供的同步功能做安全保證。JAVA的對象綁定是動態(tài)的,類在被要求的時候才被從指定任意位置導(dǎo)入。
- 和C++等相比,JAVA是純面向?qū)ο蟮母呒壵Z言。
- 獨立于各種操作平臺。先按編譯方式翻譯到字節(jié)碼,然后把字節(jié)碼按解釋方式翻譯到具體機器的機器語言。這種半編譯、半解釋的高級語言翻譯方式,使獨立于硬件環(huán)境和操作系統(tǒng)平臺。
- 安全性好。
- 多線程。操作系統(tǒng)多任何和分時,允許同一時間運行多個程序。主要有多進(jìn)程和多線程兩種方式,多線程效率更高。同步機制能保證多線程正確運行。
- 字節(jié)碼(BYTECODE)是和任何具體機器環(huán)境無關(guān)的中間代碼。
- JAVA程序文件為.JAVA,字節(jié)碼文件.CLASS。
- JAVA虛擬機(JAVA VIRTUAL MACHINE, JVM)上有JAVA解釋器。
- JAVA一次編寫,任意運行(WRITE ONCE, RUN ANYWHERE),解決了硬件環(huán)境和操作系統(tǒng)平臺的異構(gòu)問題。
- 網(wǎng)絡(luò)環(huán)境下應(yīng)用軟件的開發(fā)模式多是B/S(BROWSE/SERVER)模式,即應(yīng)用軟件放在服務(wù)器端,客戶端通過瀏覽器來進(jìn)行應(yīng)用。B/S模式的應(yīng)用系統(tǒng)特別需要異構(gòu)環(huán)境的支持。
- 嵌入HTML的JAVA程序稱作APPLET程序(小程序)。
- 如果把JAVA源程序在瀏覽器上按解釋方式運行,客戶計算機的運行速度將非常慢。
- 當(dāng)JAVA虛擬機采用硬件直接實現(xiàn)時,運行速度將大大快于目前的運行速度。
- JDK的文件夾結(jié)構(gòu):BIN,包含編譯器、解釋器等可執(zhí)行文件;DEMO,程序示例;INCLUDE,頭文件,用于本地機的C語言;INCLUDE-OLD,頭文件,用于兼容支持舊接口;JRE,JAVA運行時環(huán)境的根路徑;LIB,可執(zhí)行程序使用的包文件。
- set path設(shè)置了JAVA編譯運行程序的路徑。
- set classpath設(shè)置了JAVA包的路徑,最前面的“.”表示在當(dāng)前工作路徑下可執(zhí)行JAVA程序。
- JAVA源程序文件名必須和類名完全一樣;JAVA文件名的命名也是大小寫敏感;JAVA源程序文件名后綴必須為.JAVA。
- 編譯命令JAVAC將編譯.JAVA,若編譯正確,產(chǎn)生相應(yīng)字節(jié)碼文件(類文件).CLASS。
- 運行命令JAVA可運行.CLASS。
- JAVA程序主要有兩種:JAVA APPLICATION(應(yīng)用程序)和JAVA APPLET(小程序)。
- JAVA APPLET是嵌入在網(wǎng)頁中、用瀏覽器加載后才能解釋執(zhí)行的程序。
?第二章 JAVA語言基礎(chǔ)
- JAVA語言的字符使用UNICODE編碼標(biāo)準(zhǔn)。
- 標(biāo)識符由字母數(shù)字下劃線_和美元符$組成,必須以字母_或$開頭,字符個數(shù)有限的字符序列。字母符號大小寫敏感,區(qū)分大小寫。
- JAVA有47個固定含義的標(biāo)識符,關(guān)鍵字。
- 變量必須先定義(聲明),才能賦值。
- 變量定義是指示編譯器為特定數(shù)據(jù)類型的數(shù)值保存在內(nèi)存中分配適當(dāng)?shù)膬?nèi)存空間。
- 變量的使用范圍稱作變量的作用域。
- 常見的程序塊形式是if、while、for等后面跟隨的一對花括號。
- 整個程序運行期間保持不變的變量稱為常量。
- 定義常量用關(guān)鍵字final。
- 常量名通常全大寫字母。
- 數(shù)據(jù)類型規(guī)定一類數(shù)據(jù)的數(shù)據(jù)位長度(字符個數(shù)),取值范圍,以及對該類數(shù)據(jù)所能進(jìn)行的操作。
- JAVA定義了8種基本數(shù)據(jù)類型:整型,byte/short/int/long;浮點型,float/double;邏輯型,boolean;字符型,char。
- byte 8 bits, short 16 bits, int 32 bits, long 64 bits.
- 十進(jìn)制首位不能為0;八進(jìn)制以0打頭;十六進(jìn)制以0x或0X打頭。
- 字面值是程序中用到的顯示數(shù)據(jù)值。所有整型字面值都隱含為int型。若要表示為long型時,在后面加L或l,如12345L。
- 浮點型由整數(shù)部分和小數(shù)部分組成。兩種表示方式標(biāo)準(zhǔn)記數(shù)法和科學(xué)記數(shù)法,指數(shù)部分由e(E)后跟帶正負(fù)號的整數(shù)表示。
- float 32 bits, double 64 bits.
- 所有浮點型數(shù)的字面值隱含為double。若要表示為float,需加F或f,如123.123F。
- 邏輯型用來定義保存邏輯值的變量,也稱布爾型。
- 一個UNICODE標(biāo)準(zhǔn)下的編碼稱作一個字符。
- 字符型字面值用一對單引號括起來。
- 轉(zhuǎn)義字符:\r 回車,\\ 反斜杠,\' 單引號,\“ 雙引號。
- JAVA是強類型語言。強類型語言是指對數(shù)據(jù)類型的匹配要求十分嚴(yán)格。如果表達(dá)式的數(shù)據(jù)類型不一致,則編譯器給出類型不一致的出錯信息。
- 賦值語句的類型匹配有兩種:類型相同和類型兼容。類型兼容是指賦值號左端的數(shù)據(jù)類型比賦值號右端的數(shù)據(jù)類型長。數(shù)據(jù)類型長,是指數(shù)據(jù)類型的位數(shù)長。
- 類型不兼容時,可以重新定義賦值號,或用強制類型轉(zhuǎn)換。強制類型轉(zhuǎn)換可能丟失數(shù)據(jù)或損失數(shù)據(jù)的精度。
- JAVA在基本關(guān)鍵字、運算符、表達(dá)式、賦值語句、流程控制語句等方面,是和C/C++基本相同的。
- JAVA運算符分為四類:算術(shù)運算符、關(guān)系運算符、邏輯運算符和位運算符。
- 算術(shù)運算符分為一元和二元,操作數(shù)必須是數(shù)值類型。
- 一元運算符:+/-/++/--。一元運算符與其前后的操作數(shù)之間不允許有空格,否則編譯出錯。
- 二元運算符:+/-/×///%。取余運算符可用于整數(shù)和浮點數(shù)的情況。
- 二元運算的所得結(jié)果的數(shù)據(jù)類型與精度較高(位數(shù)更長)的那種數(shù)據(jù)類型一致。
- 關(guān)系運算符:==/!=/>/>=/</<=。
- 邏輯運算符:&&/||/!/^/&/|。
- &和|運算是把邏輯表達(dá)式全部計算完,而&&和||運算具有短路計算功能。短路計算,指系統(tǒng)從左至右進(jìn)行邏輯表達(dá)式的計算,一旦出現(xiàn)計算結(jié)果已經(jīng)確定的情況,則計算過程即被終止。短路計算功能可以提高程序的運算速度。在程序設(shè)計時使用&&和||運算符,而不使用&和|。
- 位運算是以二進(jìn)制位為單位進(jìn)行的運算,其操作數(shù)和運算結(jié)果都是整型值。
- 位運算符:&/|/~/^/>>/<</>>>。位運算相應(yīng)的操作數(shù)和運算結(jié)果都是二進(jìn)制整數(shù),而邏輯運算相應(yīng)的操作數(shù)和運算結(jié)果都是邏輯值。
- 右移是將一個二進(jìn)制數(shù)按指定位數(shù)向右移位,移掉的被丟棄,左邊移進(jìn)的部分補0(該數(shù)為正時),或者補1(該數(shù)為負(fù)時)。整數(shù)在機器內(nèi)部采用補碼表示法,正數(shù)符號位為0,負(fù)數(shù)的符號位為1。
- 0填充的右移>>>:不論正負(fù),左邊移進(jìn)的部分一律補0。
- 賦值運算符還可以與二元算術(shù)運算符、邏輯運算符和位運算符組合成簡捷運算符,如 +=。
- []是數(shù)組運算符,其中數(shù)值為數(shù)組下標(biāo)。
- ()用于改變表達(dá)式中運算符的優(yōu)先級。
- 操作數(shù)是字符串時,+運算符用來合并兩個字符串;當(dāng)一邊是字符串,一邊是數(shù)值時,機器自動將數(shù)值轉(zhuǎn)換為字符串。
- 條件運算符(?:)
- 對象運算符instanceof用來測試一個指定對象是否是指定類(或其子類)的實例。
- 點運算符(.)功能:一是引用類中成員;二是指示包的層次等級。
- 用運算符和圓括號把運算對象連接起來的、符合JAVA語言語法規(guī)則的式子稱作表達(dá)式。
- 表達(dá)式按照運算符優(yōu)先級高的先運算;同一優(yōu)先級的運算符,按照運算符的結(jié)合性(從左向右還是從右向左)的次序進(jìn)行運算。大多數(shù)從左向右,少數(shù)(賦值、條件運算等)是從右向左。
- 表達(dá)式還可以是某個類的方法調(diào)用。
- 流程控制語句用來控制程序的執(zhí)行流程:條件選擇,循環(huán),和轉(zhuǎn)移語句。
- 基本結(jié)構(gòu):順序結(jié)構(gòu),分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。
- 一個以;結(jié)束的符號串稱為語句。
- JAVA流程控制語句有:分支語句,if, switch;循環(huán)語句,for, while, do-while;轉(zhuǎn)移語句,break, continue。
- 函數(shù)或類的成員函數(shù)運行結(jié)束后需要返回原調(diào)用處,并可能需要帶回返回值的流程控制用return語句。
- if實現(xiàn)二路分支,switch多路分支。
- if-else中,else語句是任選的。
- JAVA規(guī)定:else總是與最近的一個if語句匹配。
- switch, case, default是關(guān)鍵字,default語句是可選的。
- switch表達(dá)式和case常量值的類型可以是byte,short,int,long和char,但不能為boolean,并且要求兩者的數(shù)據(jù)類型必須一致。
- switch語句中的break語句結(jié)束switch語句的執(zhí)行。
- for語句中的循環(huán)初始化,循環(huán)條件判斷和循環(huán)變量修改都可以任選,即for (;;)。
- 循環(huán)過程永不結(jié)束,為死循環(huán)。
- do-while至少執(zhí)行一次循環(huán)體,while可以一次也不執(zhí)行。
- break通常和switch或循環(huán)語句配合使用;continue通常和循環(huán)語句配合使用。
- continue語句僅跳過當(dāng)前層中循環(huán)體的剩余語句。
- 若函數(shù)為void類型,則return語句后沒有返回值;若為非void,則return語句后需要有返回值,且返回值的累心個必須和函數(shù)的類型一致。
- 當(dāng)return語句不帶返回值,并且位于函數(shù)的最后時,它可以省略。
- 單行注釋以//開頭,至行尾;多行注釋以/*開頭,以*/結(jié)束;文件注釋用來自動生成一個HTML文檔,為程序自動提供網(wǎng)絡(luò)環(huán)境下的文檔說明,以/**開頭,以*/結(jié)束。
- 數(shù)組是連續(xù)內(nèi)存單元中一組名字和數(shù)據(jù)類型相同的數(shù)據(jù)元素的有限集合。數(shù)組中每個數(shù)據(jù)元素稱作數(shù)組元素。JAVA還可以構(gòu)造不規(guī)則數(shù)組。
- JAVA使用一維數(shù)組分三步:定義一堆數(shù)組變量、為數(shù)組分配內(nèi)存單元和使用數(shù)組元素。
- 數(shù)組定義后,系統(tǒng)將給數(shù)組標(biāo)識符分配一個內(nèi)存單元,用于指示數(shù)組在內(nèi)存中的實際存放位置。由于數(shù)組變量定義時,數(shù)組元素本身在內(nèi)存中的實際存放位置還沒給出,所以此時該數(shù)組名的值為空NULL。
- new運算符:向系統(tǒng)申請指定數(shù)據(jù)類型所需的內(nèi)存單元空間。new運算符返回所申請內(nèi)存單元的首地址。
- JAVA規(guī)定,在數(shù)組分配內(nèi)存單元后,系統(tǒng)將自動給每個數(shù)組元素賦初值,數(shù)值型為0,邏輯型為false,類類型為null。
- 數(shù)組下標(biāo)由0開始。
- 數(shù)組名是指向內(nèi)存中存放數(shù)組元素的一片連續(xù)內(nèi)存單元的首地址。
- 數(shù)組名的類型是引用類型。引用類型是指該類型的標(biāo)識符所表示的是一片內(nèi)存連續(xù)地址的首地址。字符串名和數(shù)組名,所有對象名都是引用類型。
- 數(shù)組的定義和為數(shù)組分配內(nèi)存空間兩步可以結(jié)合起來。數(shù)組元素的初始化賦值也可以結(jié)合一起。
- JAVA提供了length成員變量返回數(shù)組元素的個數(shù)。
- 如果一維數(shù)組的每個數(shù)組元素都是一個一維數(shù)組,則構(gòu)成二維數(shù)組。若二維數(shù)組中的每個一維數(shù)組定義為不同的元素個數(shù),就構(gòu)成不規(guī)則的二維數(shù)組。
- 字符串是N(N>=0)個字符組成的序列。JAVA中字符串用雙引號括起來,字符個數(shù)稱作字符串長度。
- JAVA字符串變量用String來定義。String是JAVA API中定義的一個類。
- 一對雙引號括起來的任何字符序列都是一個字符串常量。
- 把一片連續(xù)內(nèi)存單元的首地址賦給字符串變量名,是讓字符串變量指向存放字符串的內(nèi)存單元的首地址。
- JAVA提供了特殊的字符串運算符+,把兩個字符串連接起來。
- System.out.print()和Sytem.out.println()要求的參數(shù)是字符串或字符串表達(dá)式。
第三章 類和對象
- 類是對具有相同屬性和方法的一組相似對象的抽象。對象是類的實例。包是JAVA組織和管理類的一種方法。
- 類的封裝性、多態(tài)性和繼承性是OOP的重要特點。
- 類的設(shè)計分為類聲明和類主體設(shè)計兩部分。
- 接口名多于一個時用逗號分隔開。
- 類聲明的修飾符分為訪問控制符和類型說明符兩部分。一起使用時,訪問控制符在前,類型說明符在后。
- 訪問控制符為public,被定義為公共類,能被任何類訪問。包中的類能互相訪問,不在一個包中的類不能直接訪問,必須用import導(dǎo)入到該包中。被導(dǎo)入的類必須是public。
- 沒有public時,即是默認(rèn)類(缺省類)。默認(rèn)類表示該類只能被同一個包中的類訪問,不能被其他包的類訪問。JAVA文件中可以有很多類,但最多只能有一個公共類,其他為默認(rèn)類。
- 類說明符為abstract時,為抽象類。抽象類不能用來定義對象,通常被設(shè)計成一些具有類似成員變量和方法的子類的父類。
- 類說明符為final時,為最終類,不能用來再派生子類。
- 由于JAVA中所有方法必定屬于某個類,即方法一定是成員方法,所以成員方法簡稱方法。
- 聲明成員變量的修飾符有private, public和protected。private成員變量只能被該類本身訪問。不加任何修飾符,定義為默認(rèn)修飾符,該成員變量只能被該類本身和同一個包的類訪問。protected除可以被該類本身和同一個包的類訪問外,還可以被它的子類(包括同一個包中的子類和不同包中的子類)訪問。public可以被所有類訪問。
- static指明是類成員變量,final指明該成員變量是常量,transient為臨時變量,很少使用。
- 聲明成員方法的修飾符有private, public和protected。static指明該方法是一個類方法。
- 方法聲明中必須給出方法名和方法的返回值類型,如果沒有返回值,用關(guān)鍵字void標(biāo)記。方法名后的()是必須的,即使參數(shù)列表為空,也要加上。
- 方法體是方法的具體實現(xiàn)。
- 定義在類中的都是成員變量,定義在方法內(nèi)的都是變量,還有定義在方法參數(shù)中的虛參變量。成員變量和變量的類型既可以是基本數(shù)據(jù)類型,也可以是已定義的類。
- 專門用來進(jìn)行對象初始化的方法稱為構(gòu)造方法(構(gòu)造函數(shù))。一個類中至少要有一個構(gòu)造方法。
- 構(gòu)造方法的名字必須與類名完全相同,沒有返回值,連表示空類型void的返回值都沒有。一般應(yīng)定義為public。
- 創(chuàng)建對象時,將調(diào)用類中的構(gòu)造方法為對象的成員變量進(jìn)行初始化賦值。
- 一個類對應(yīng)一個.CLASS文件,一個程序文件中可以有一個或多個類,但只允許一個類被定義成public。類中可以沒有main方法。但要運行的類必須有main方法。程序就是從main方法開始執(zhí)行。
- 對象和數(shù)組一樣也是引用類型,即對象定義后,系統(tǒng)將給對象標(biāo)識符分配一個內(nèi)存單元,用于存放實際對象在內(nèi)存中的存放位置。
- new運算符申請對象所需的內(nèi)存空間,返回所申請的內(nèi)存空間的首地址。賦值語句把new運算符分配的連續(xù)地址的首地址賦給對象名。
- 程序設(shè)計時最經(jīng)常使用的方法,是在定義對象的同時為對象分配內(nèi)存空間和進(jìn)行初始化賦值。
- 對象可以像變量一樣賦值。不同的是,對象賦值不是把取值賦給另一個對象,而是讓另一個對象名存儲的對象的首地址和這個對象名存儲的對象的首地址相同,即對象的賦值是對象的首地址的賦值。
- 對象也可以像變量一樣,作為方法的參數(shù)使用。不同的是,變量作為實參時,系統(tǒng)把實參的數(shù)值復(fù)制給虛參;對象作為實參時,系統(tǒng)把實參對象名(該對象必須已創(chuàng)建)指示的對象的首地址賦給虛參對象名。
- 變量的內(nèi)存空間是系統(tǒng)在變量定義時自動分配的;當(dāng)變量超出作用范圍時,系統(tǒng)將自動回收該變量的內(nèi)存空間。
- 對象的內(nèi)存空間是用new創(chuàng)建的。對象也有作用范圍,超出作用范圍的對象(不再使用的對象)為垃圾對象。JAVA中,收集和釋放內(nèi)存由自動垃圾回收線程負(fù)責(zé)。自動垃圾回收線程在系統(tǒng)空閑時自動運行,這個線程監(jiān)視用戶程序中所以對象的有效作用范圍;當(dāng)某個對象超出其作用范圍時,該線程就對這樣的對象做上垃圾對象標(biāo)識,并在適當(dāng)?shù)臅r候一次性回收這些垃圾對象。
- 類有實例成員變量與類成員變量。類成員變量也稱作靜態(tài)成員變量。
- 類定義中沒用關(guān)鍵字static的成員變量就是實例成員變量,不同對象的實例成員變量的值不相同。
- 用static的成員變量稱為類成員變量。一個類的所以對象共享該類的類成員變量,類成員變量可以用來保存和類相關(guān)的信息,或用來在一個類的對象間交流信息。
- 類有實例方法與類方法。類方法稱作靜態(tài)方法。
- 沒用static的方法就是實例方法。它只能通過對象來調(diào)用。實例方法可以訪問類成員變量和類變量。
- 用static的方法是類方法。類方法通過類名來調(diào)用,也可以用對象,但類名調(diào)用類方法程序的可讀性更好。類方法只能訪問類變量,不能訪問實例變量。類防范主要用來處理和整個類相關(guān)的數(shù)據(jù)。
- 類的各種方法(包括構(gòu)造方法)都允許重寫(重載)。方法重寫overloading,指一個方法名定義多個方法實現(xiàn)。不同的方法,其參數(shù)類型或參數(shù)個數(shù)要有所不同。這就是C++提到的函數(shù)簽名。
- 方法重寫必須要么參數(shù)個數(shù)不同,要么參數(shù)類型不同,僅返回值類型的不同則是不允許的。
- OOP一個特點是公共類資源可以重用。
- 包package是JAVA提供的文件(公共類)的組織方式。一個包對應(yīng)一個文件夾,一個包可以有很多類文件。包中還可以有子包,稱為包等級。
- JAVA可以把類文件存放在可以有包等級的不同的包中。
- 同一個包中的文件名必須唯一,不同包中的文件名可以相同。
- package指出該語句所在文件所有的類屬于哪個包。
- 如果一個JAVA文件中有package語句,則必須寫在源文件的第一行。
- 當(dāng)多個JAVA源文件中都有package語句,且包名相同時,說明這些類同屬一個包。
- 包中存放的是編譯后的類文件.CLASS。通過import,可以導(dǎo)入某個包中的某個類,也可以導(dǎo)入某個包中的全部類,但不包含其子包。
- Windows文件用\表示一條路徑下的子路徑,JAVA用.表示一個包的子包。
- JDK規(guī)定:在一個樹形結(jié)構(gòu)的包中,上層包可以導(dǎo)入下層包,而下層包不可以導(dǎo)入上層包。下層包的類要使用上層包的類時,要在類前面加上包名。
- 圖形用戶界面設(shè)計,需要導(dǎo)入系統(tǒng)包java.awt中的所有類;事件處理,需要導(dǎo)入事件處理包java.awt.event中的所有類。
- 一個類被嵌套定義在另一個類中,稱為內(nèi)部類INNER CLASSES或內(nèi)隱類。包含內(nèi)部類的類稱為外部類。
- 當(dāng)一個類只在某個類中使用,并且不允許除外部類外的其他類訪問時,可考慮設(shè)計成內(nèi)部類。
- 在外部類中,一般通過一個內(nèi)部類的對象來訪問內(nèi)部類的成員變量或方法;在內(nèi)部類中,可以直接訪問外部類的所有成員變量和方法。
- 當(dāng)外部類引用內(nèi)部類時,必須給出完整的名稱,且內(nèi)部類的類名不能與外部類的類名相同。
- 內(nèi)部類主要用來實現(xiàn)接口。
- JAVA是按類劃分程序模塊的,很好的實現(xiàn)了類的封裝性。
- OOP中,保證模塊正確性的基本方法是類的封裝性。類的封裝性是指類把成員變量和方法封裝為一個整體,這就劃分了模塊的界限。
- 保證模塊正確性的措施是由信息的隱藏性實現(xiàn)的。允許其他包程序訪問修改的成員變量/方法定義為public,只允許同一包中的其他類以及該類的子類訪問修改的成員變量/方法定義為protected,不允許其他類(內(nèi)部類除外)訪問修改的成員變量/方法定義為private。
- 和其他OOP語言C++相比,JAVA增加了包的概念。這樣同一包中類之間的信息傳遞就比較方便。
?第四章 類與繼承
- 繼承就是一個新類擁有全部被繼承類的成員變量和方法,它使得大型應(yīng)用程序的維護(hù)和設(shè)計變得更加簡單。
- OOP的繼承機制提供了一種重復(fù)利用原有程序模塊資源的途徑。通過新類對原有類的繼承,既可以擴充舊的程序模塊功能以適應(yīng)新用戶需求,也可以滿足新的應(yīng)用系統(tǒng)的功能要求。
- 由繼承而得到的新類為子類,被繼承的類為父類超類。子類直接的上層父類為直接父類,簡稱父類。一個子類只能有一個直接父類。
- JAVA所有類都是由OBJECT類繼承派生而來。
- 繼承有兩種:多繼承和單繼承。JAVA只支持單繼承,但接口使JAVA實際上實現(xiàn)了多繼承。
- JAVA所有類構(gòu)成一顆類的層次樹結(jié)構(gòu)。
- 定義類有兩種:不指明父類和顯示的指明父類。若定義時不指明父類,則其父類是OBJECT類。顯示指明父類,用extends。
- 子類繼承原則:能繼承public和protected的成員變量方法,不能繼承private和默認(rèn)的成員變量方法。若子類聲明一個與父類同名的成員變量方法,則不能繼承,稱子類的成員變量隱藏了父類的同名成員變量,子類方法重寫了父類的同名方法。子類不能繼承父類的構(gòu)造方法。
- JAVA中,每個對象都有對自身引用的訪問權(quán),為this引用。
- super可以引用被子類隱藏的父類的成員變量方法,為super引用。經(jīng)常用在子類的構(gòu)造方法中。
- 子類隱藏父類的成員變量,不提倡,很少見;父類的某個方法不適合子類時,子類可以重定義它,為子類對父類方法的覆蓋overriding,這是OOP常用的設(shè)計方法。
- 方法的重寫overloading和方法的覆蓋overriding是不同的概念,實現(xiàn)的功能也不同。
- 子類覆蓋父類方法時,參數(shù)個數(shù)和參數(shù)類型必須相同。
- 子類對父類方法繼承有:完全繼承、完全覆蓋和修改繼承。
- JAVA以及所有OOP語言中,對象訪問方法的匹配原則是:從對象定義的類開始,逐層向上匹配尋找對象要訪問的方法。
- 繼承一方面可以大大簡化程序設(shè)計的代碼,另一方面使得大型軟件的功能修改和功能擴充較傳統(tǒng)的軟件設(shè)計方法容易許多。
- 方法的多態(tài)polymorphism指若以父類定義對象,并動態(tài)綁定對象,則該對象的方法隨綁定對象不同而不同。
- 對象名和實際對象的這種聯(lián)系稱作對象的綁定binding。
- 對象的動態(tài)綁定,指定一位類樹上層的對象名,可以綁定為所定義層類以及下層類的對象。對象的動態(tài)綁定和類的繼承相結(jié)合使對象的方法有多態(tài)性。
- 方法的多態(tài)性支持Vector類的copyInto()方法用Object類參數(shù)(Object []anArrary)定義一次,就可以適合于所有類的對象。
- 構(gòu)造方法不能被聲明為抽象的。
- 不能有abstract static方法。
- 任何包含抽象方法的類必須被聲明為抽象類。抽象類不能直接用來定義對象。抽象類主要用于定義為若干個功能類同的類的父類。
- 抽象類一定是某個類或某些類的父類。若干個抽象類的子類要實現(xiàn)一些同名的方法。
- 用final指明不能被子類覆蓋的方法,為最終方法。
- 最終類可以保證一些關(guān)鍵類的所有方法,不會再以后的程序維護(hù)中,由于不經(jīng)意的定義子類而被修改;最終方法可以保證一些類的關(guān)鍵方法,不會在以后的程序維護(hù)中,由于不經(jīng)意的定義子類和覆蓋子類的方法而被修改。
- abstract和final不能合用。習(xí)慣上,public放在abstract/final的前面。
- 單繼承有結(jié)構(gòu)簡單,層次清楚,易于管理,安全可靠的特點。多繼承則功能強大。
- 接口和抽象類非常相似,都是只定義了類中的方法,沒有給出方法的實現(xiàn)。
- 接口定義修飾符為缺省時,只能被同一包中的方法訪問;public時,接口被任何類的方法訪問。
- 若接口定義為默認(rèn)型訪問權(quán)限,則接口中的成員變量全部隱含為final static型。意味著它們不能被實現(xiàn)接口方法的類改變,并且為默認(rèn)訪問權(quán)限。
- 接口中定義的所有成員變量必須設(shè)置初值。
- 接口定義為public時,接口中的所有方法和成員變量全部隱含為public型。
- 保存接口的文件名必須與接口名相同。一個文件可以包含若干個接口,但最多只能有一個public,其他必須為默認(rèn)。
- 為了實現(xiàn)接口,類必須實現(xiàn)定義在接口中的所有方法。若要實現(xiàn)多個接口,則用逗號分隔開接口名。
- JAVA API中定義了許多接口。
?第五章 JAVA API基礎(chǔ)
- JAVA語言的內(nèi)核非常小,僅包含基本數(shù)據(jù)類型和語句,強大功能主要體現(xiàn)在JAVA完備豐富、功能強大的JAVA API上。
- JAVA API(JAVA APPLICATION PROGRAMMING INTERFACE, JAVA應(yīng)用程序接口),是JAVA提供的組織成包結(jié)構(gòu)的許多類和接口的集合。
- JAVA API包含在JDK中。
- JAVA API語言包java.lang,包括Object類、Class類、Runtime類、Float類、String類和Math類;實用包java.util包括Arrays類、Vector類、Data類和Enumeration接口。
- java.lang包是使用最頻繁的包。為了簡化編程,系統(tǒng)固定的默認(rèn)導(dǎo)入java.lang包,所以使用它時不用import。
- Object類是JAVA總所有類的根,在Object類中定義的成員變量和方法,在其他類中都可以使用。
- 當(dāng)兩個值比較、對象或變量與值比較、兩個變量比較時,使用==;當(dāng)兩個對象比較時,使用Object.equal()方法。
- System類提供了許多獲取或重新設(shè)置系統(tǒng)資源的靜態(tài)方法。
- System類中定義了三個和輸入輸出流有關(guān)的靜態(tài)成員變量in, out和err。
- Class類的實例代表一個正在運行的JAVA應(yīng)用程序的類或接口。JAVA的基本數(shù)據(jù)類型,數(shù)組和關(guān)鍵字void都是由Class對象來表達(dá)。
- Class類沒有公共的構(gòu)造方法,Class對象由Java虛擬機自動構(gòu)造。
- Class類的forName()方法可用于安裝驅(qū)動程序。
- 每個JAVA應(yīng)用程序都有一個Runtime類的實例,從而允許應(yīng)用程序與其運行的環(huán)境進(jìn)行交互。可利用Runtime類直接訪問運行時環(huán)境資源。
- 語言包中提供了8個數(shù)據(jù)類型包裝類的類,把JAVA語言的8個基本數(shù)據(jù)類型(byte/short/int/long/float/double/char/boolean)包裝成相應(yīng)的類:Byte, Short, Integer, Long, Float, Double, Character, Boolean。
- Math類包含了一組基本的數(shù)學(xué)運算的方法和常數(shù)。Math類中所有方法都定義為靜態(tài)的。還把E和PI定義為類的靜態(tài)成員變量。
- Math類是最終類final,所有不能從Math類中派生其他的新類。
- random()方法非常有用。把random()的返回值乘上一個整數(shù),可以得到任意區(qū)間的double類型的隨機數(shù);若轉(zhuǎn)換成int類型,可以得到任意區(qū)間的int類型的隨機數(shù)。
- java.util包主要包含集合框架、事件模型、日期和時間機制、國際化等的類和接口。
- Arrays類中包含有數(shù)組操作的一些常用方法,如排序和查找。
- 在使用binarySearch()方法時,要求數(shù)組a中的元素已經(jīng)有序排列,否則返回值未定義。
- Vector類稱作向量類,實現(xiàn)了動態(tài)的數(shù)組,用于元素數(shù)量變化的對象數(shù)組。Vector類也用從0開始的下標(biāo),但和數(shù)組不同的是,當(dāng)Vector對象創(chuàng)建后,數(shù)組的元素個數(shù)會隨著Vector對象元素個數(shù)的增大和縮小變化。
- Date類提供了獲取當(dāng)前精確到毫秒時間的方法,并提供許多方法截取當(dāng)前時間的年月日等數(shù)值。
- Calendar類定義了許多如YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, DAY_OF_WEEK等成員變量,get()方法可以獲取這些成員變量的值。
- Enumeration接口主要用于集合類對象的序列化。所謂對象是序列化,就是說可以依次取出該對象中的元素。
- 任何一個類,只要實現(xiàn)了Enumeration接口,其對象就是序列化的。
?第六章 圖形用戶界面
- 圖形用戶界面是計算機程序和用戶交流的圖形接口。
- 圖形用戶界面是由各種不同的組件按照一定的布局模式排列組成的。GUI中的組件一般包括菜單、按鈕、標(biāo)簽、文本編輯行等。同時與這些組件配合工作的還有一些相關(guān)的事件。
- JAVA中,GUI所用到的類和接口都是有AWT ABSTRACT WINDOW TOOLKIT提供。AWT是JAVA API的一部分。
- java.swing包可以根據(jù)換進(jìn)過來調(diào)整GUI的外觀和感覺,使得一個程序可以使用各種不同的環(huán)境。
- Component類是一個抽象類,是AWT中所有圖形組件類的父類。
- add方法可用于在任何組件類對象中添加任何組件類對象。
- Container類主要用來防止其他組件,所以稱作容器。它繼承自Component類。容器類的派生子類有:框架Frame、面板Panel、窗口Window、對話框Dialog等。
- Panel類是一個放置其他圖形組件(包括其他Panel)的容器。
- Frame類是Window的子類,主要用來放置其他組件。Frame類提供了設(shè)置標(biāo)題、改變窗口大小等方法。
- Frame類對象是一個可在Window中獨立運行的窗口,而Panel類對象不能單獨運行,只能放在容器中(可以放在Frame中,也可以嵌入另一個Panel中)。
- Component類的子類除Container類外,還有Label標(biāo)簽類、Button按鈕類、TextField文本輸入行類、TextArea多行文本輸入?yún)^(qū)類、Checkbox復(fù)選框類、List列表類、Choice下拉列表類等。任何一個容器類對象本身也可以放置在任何一個容器類對象中。
- Label類是用來顯示文本text的類。
- TextField類用來創(chuàng)建允許用戶編輯的單行文本組件。TextField可以獲得焦點,而Lable不能。所以TextField可編輯,而Label不可編輯。TextField一般用作程序的輸入。
- TextArea類用來創(chuàng)建允許用戶編輯的多行文本輸入組件,組件中的字符串可設(shè)定為可編輯的或只讀的。TextArea類還提供水平或垂直的滾動條。
- FlowLayout布局管理器的功能是:在此框架中加入的組件將自上而下、自左而右安排放置。
- Checkbox類用來創(chuàng)建復(fù)選框組件。將幾個Checkbox對象組成一組需用到CheckboxGroup類。
- 框架中組件的位置由setBounds方法來確定(不使用任何布局管理器)。
- List組件給用戶提供了一個滾動的文本項清單,用戶可以選中其中一項或多項文本。
- Choice是一個下拉式的數(shù)據(jù)選項,當(dāng)前的選項會顯示在選中列表框中。
- 列表只能顯示當(dāng)前選擇的項目,而下拉列表可以顯示多個項目。
- MenuComponent類直接繼承自O(shè)bject的菜單組件的基本類,它及其子類是專門用來創(chuàng)建菜單類組件。
- MenuBar是放置菜單的容器。可以通過Frame類的setMenuBar()方法把MenuBar對象加入一個框架中。
- Menu是菜單欄上放置的菜單。每個菜單由一些菜單項組成。
- 所以菜單中的菜單項都是MenuItem類或者它的子類的對象。
- 一般在這幾種情況下系統(tǒng)會調(diào)用paint()方法繪制圖形:當(dāng)一個組件第一次顯示時;當(dāng)容器容器重新調(diào)整大小時;當(dāng)容器從非作用窗口變?yōu)樽饔么翱跁r。
- 當(dāng)程序運行在較慢的平臺上或計算機較忙時,應(yīng)該考慮指定在多長時間內(nèi)必須執(zhí)行repaint()方法,否則就放棄。
- AWT調(diào)用update()方法來響應(yīng)對repaint()方法的調(diào)用。調(diào)用update()或paint()之前,圖形的外觀將不會發(fā)生改變。update()更新圖形的步驟:先通過填充組件的背景色來清除該圖形,再設(shè)置圖形的顏色為該圖形的前景色,最后調(diào)用paint()方法完整的重新繪制該圖形。
- Color類用來設(shè)置文本或圖形的顏色。
- JAVA中顏色定義有兩種方法:Color類有很多表示顏色的常量;用RGB值設(shè)置,每種顏色的色值范圍在0~255之間,可以靈活的定義非標(biāo)準(zhǔn)色。
- Font類用來定義文字的字體、風(fēng)格和大小等特性。
- Graphics類用來繪制各種圖形和字符串。雖然Graphics類提供的方法是抽象方法,但編程時可以直接使用,因為系統(tǒng)內(nèi)部已經(jīng)實現(xiàn)了這些抽象方法。
- 當(dāng)沒有設(shè)置顏色時,組件會使用黑色(默認(rèn)色)。
- main()方法中不需要調(diào)用paint()方法,但程序設(shè)計者需要重定義paint()方法來告訴系統(tǒng)需要繪制的圖形。
- 組件在容器中的擺放方式為布局。JAVA中不使用坐標(biāo)這種絕對定位的方法,而是用布局管理器進(jìn)行相對定位。優(yōu)點是顯示界面能夠自動適應(yīng)不同分辨率的屏幕。
- FlowLayout布局管理器從左到右排列組件,一行放滿后,再從第二行開始。它是容器類組件Panel的默認(rèn)布局管理器。當(dāng)容器大小發(fā)生變化時,容器上組建的排放位置會發(fā)生變化,規(guī)律是組件的大小不變,但是相對位置會發(fā)生變化。
- FlowLayout構(gòu)造方法后兩個參數(shù)的單位都是像素。
- BorderLayout布局管理器按照東西南北中五個區(qū)域放置容器中的組件。它是容器類組件Window、Frame和Dialog等的默認(rèn)布局管理器。當(dāng)容器大小發(fā)生變化時,規(guī)律是組件的相對位置不變,大小發(fā)生變化。
- GridLayout布局管理器可以將容器分為若干個大小相等的矩形。
- 對于復(fù)雜的布局,有時還需要用到容器Panel組件。
- 事件源是產(chǎn)生事件的圖形組件。用戶對事件源進(jìn)行的操作叫做事件。事件的屬性信息包含事件的名稱、來源、產(chǎn)生時間等。
- 事件處理過程包括事件的接收和事件的處理兩部分。事件的接收由系統(tǒng)負(fù)責(zé)。
- 事件發(fā)生后,系統(tǒng)把時間傳遞給事件處理程序的方式稱為事件模型。
- 層次事件模型首先傳遞給直接相關(guān)的組件;若組件沒對事件進(jìn)行處理,則向上傳遞給組件所在的容器;若容器沒處理,則繼續(xù)向上傳遞給容器所在的容器。直至頂層容器。
- 委托事件模型中事件的傳遞由事件監(jiān)聽器進(jìn)行管理。任何事件處理程序首先向事件監(jiān)聽器注冊,系統(tǒng)監(jiān)聽到后就委托給事件監(jiān)聽器。事件監(jiān)聽器通過分析時間的屬性信息,把事件交給已注冊的相應(yīng)事件處理器來處理。JDK1.1以后的版本都采用這個。
- ActionListener接口中只定義了一個處理按鈕單擊事件的方法actionPerformed()。
- JAVA中的組件就是事件源,它可以產(chǎn)生一個或多個事件。java.awt.AWTEvent類是所有事件類的父類,所以事件類都由它派生出來。
- 一個事件類對應(yīng)一個事件監(jiān)聽器接口,命名方法是:去掉事件類后邊的Event,換成Listener。不同的監(jiān)聽器接口中定義了不同的處理方法。
- 一個事件處理器創(chuàng)建了以后,需要在程序中用語句來注冊。addListener()是Component類提供的方法。
- 與鍵盤事件KeyEvent相對應(yīng)的鍵盤事件監(jiān)聽器接口是KeyListener。當(dāng)鍵盤剛按下去時,調(diào)用keyPressed()方法;鍵盤抬起來時,調(diào)用keyReleased()方法;鍵盤單擊一次時,調(diào)用keyTyped()方法。
- 程序可以有幾種方式實現(xiàn)事件監(jiān)聽器接口中方法:類定義時加上implements,然后再類中實現(xiàn)接口中的方法;用內(nèi)部類定義和實現(xiàn)事件監(jiān)聽器接口。
- 若暫時不處理某個窗口操作(事件),可以用一個空語句實現(xiàn)相應(yīng)的方法。
- 若要實現(xiàn)某個事件監(jiān)聽器接口,就必須實現(xiàn)該事件監(jiān)聽器接口中所以的方法,即使有些方法為空,也必須實現(xiàn)。為了簡化設(shè)計,JAVA為一些事件的Listener(監(jiān)聽器)接口提供了事件適配器Adapter類。WindowAdapter類實現(xiàn)了WindowListener接口的所有方法(內(nèi)容為空)。需要實現(xiàn)WindowListener接口時,只需要繼承WindowAdapter類,并覆蓋相應(yīng)方法即可。
?
轉(zhuǎn)載于:https://www.cnblogs.com/pegasus923/p/4006500.html
總結(jié)
以上是生活随笔為你收集整理的学习笔记之Java程序设计实用教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信入坑第二弹 如何申请第二个微信号 微
- 下一篇: 电视挂墙支架怎么安装