Java語言程序設(shè)計(jì)課件_第1頁
Java語言程序設(shè)計(jì)課件_第2頁
Java語言程序設(shè)計(jì)課件_第3頁
Java語言程序設(shè)計(jì)課件_第4頁
Java語言程序設(shè)計(jì)課件_第5頁
已閱讀5頁,還剩101頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1Java語言程序設(shè)計(jì)—Java語言基礎(chǔ)王卓崢wangzhuozheng@2Java語言基礎(chǔ)標(biāo)識(shí)符與數(shù)據(jù)類型表達(dá)式與語句程序控制語句數(shù)組3標(biāo)識(shí)符與數(shù)據(jù)類型注釋分號(hào)、塊和空白標(biāo)識(shí)符基本java類型4注釋三種允許的Java技術(shù)程序注釋風(fēng)格//commentononeline/*commentonone ormoreline*//**documentingcomment*/5分號(hào)、塊和空白一個(gè)語句是一行用分號(hào)(;)終止的代碼totals=a+b+c+d+e+f;一個(gè)塊是以上括號(hào)和下括號(hào)為邊界的語句集合{ x=y+1; y=x+1; }一個(gè)塊可被用在一個(gè)類的定義中

publicclassDate{intday; intmonth;intyear;}塊語句可被嵌套Java程序中允許任意多的空白6區(qū)塊的形式//ablockstatement{x=y+1;y=x+1;}//ablockusedinaclassdefinitionpublicclassMyDate{intday;intmonth;intyear;}//anexampleofablockstatementnestedwithin//anotherblockstatementwhile(i<large){a=a+i;if(a==max){b=b+a;//nestedblockisherea=0;}}7空白在源代碼元素之間允許空白,空白的數(shù)量不限??瞻?包括空格、tabs和新行)可以改善你的對(duì)源代碼的視覺感受。{intx;x=23*54;}

intx;x=23+54;}8標(biāo)識(shí)符是賦予變量、類和方法的名稱可從一個(gè)字母、下劃線(_)或美元符號(hào)($)開始是大小寫區(qū)別對(duì)待的,且無最大長(zhǎng)度[舉例]identifieruserNameUser_name_sys_varl$change9Java關(guān)鍵字abstractdoimplementsprivatethrowbooleandoubleimportprotectedthrowsbreakelseinstanceofpublictransientbyteextendsintreturntruecasefalseinterfaceshorttrycatchfinallongstaticvoidcharfinallynativesupervolatileclassfloatnewswitchwhilecontinuefornullsynchronizeddefaultifpackagethis10關(guān)鍵字—幾點(diǎn)注意true、false和null為小寫無sizeof運(yùn)算符goto和const不是Java編程語言中使用的關(guān)鍵字11基本Java類型Java編程語言定義了八個(gè)原始類型邏輯類boolean文本類char整數(shù)類byte,short,int,long浮點(diǎn)類double,float12文本類──char和Stringchar代表一個(gè)16-bitUnicode字符必須包含用單引號(hào)(’’)引用的文字使用下列符號(hào):‘a(chǎn)’‘\t’一個(gè)制表符‘\u????’一個(gè)特殊的Unicode字符,????應(yīng)嚴(yán)格使用四個(gè)16進(jìn)制數(shù)進(jìn)行替換[舉例]Chap02_1.javaString(StringBuffer:可對(duì)字符串的值進(jìn)行修改)不是一個(gè)原始數(shù)據(jù)類型,它是一個(gè)類具有用雙引號(hào)引用的文字可按如下情形使用:Stringgreeting=“GoodMorning!!\n”;Stringerr_meg=“recordnotfound!”;13整數(shù)類──byte,short,int,long采用三種進(jìn)制─十進(jìn)制、八進(jìn)制和16進(jìn)制具有缺省int用字母“L”和“l(fā)”定義long14浮點(diǎn)─float和double缺省為double浮點(diǎn)文字包括小數(shù)點(diǎn)或下列各項(xiàng)之一E或e(增加指數(shù)值)F或f(float)D或d(double)舉例:3.14一個(gè)簡(jiǎn)單的浮點(diǎn)值(adouble)4.02E23一個(gè)大浮點(diǎn)值2.718F一個(gè)簡(jiǎn)單的float長(zhǎng)度值123.4E+306D一個(gè)大的帶冗余D的double值P42

例3-315表達(dá)式與語句變量、聲明和賦值Java編碼約定理解對(duì)象運(yùn)算符表達(dá)式變量及作用域16變量、聲明和賦值1.publicclassAssign{2.publicstaticvoidmain(Stringargs[]){3.intx,y;//declareintvariables4.floatz=3.414f;//declareandassignfloat5.doublew=3.1415;//declareandassigndouble6.booleantruth=true;//declareandassignboolean7.charc;//declarecharactervariable8.Stringstr;//declareString9.Stringstr1="bye";//declareandassign//Stringvariable10.c='A';//assignvaluetocharvariable11.str="Hioutthere!";//assignvaluetoStringvariable12.x=6;13.y=1000;//assignvaluestointvariables14....15.}16.}17非法賦值舉例y=3.1415926;//3.1415926isnotanint.//Requirescastinganddecimalwill//betruncated.w=175,000;//thecommasymbol(,)cannotappeartruth=1;//acommonmistakemadebyex-C/C++programmers.18Java編碼約定-1classes─類名應(yīng)該是名詞,大小寫可混用,但首字母應(yīng)大寫classAccountBookclassComplexVariableinterface──界面名大小寫規(guī)則與類名相同interfaceAccountmethod──方法名應(yīng)該是動(dòng)詞,大小寫可混用,但首字母應(yīng)小寫。在每個(gè)方法名內(nèi),大寫字母將詞分隔并限制使用下劃線。balanceAccount()addComplex()Variables──所有變量都可大小寫混用,但首字符應(yīng)小寫。詞由大寫字母分隔,限制用下劃線,限制使用美元符號(hào)($),因?yàn)檫@個(gè)字符對(duì)內(nèi)部類有特殊的含義。currentCustomer變量應(yīng)該代表一定的含義,通過它可傳達(dá)給讀者使用它的意圖。盡量避免使用單個(gè)字符,除非是臨時(shí)“即用即扔”的變量(例如,用i,j,k作為循環(huán)控制變量)19Java編碼約定-2spacing──每行只寫一個(gè)語句并使用四個(gè)縮進(jìn)的空格使你的代碼更易讀。comments──用注釋來說明那些不明顯的代碼段落;對(duì)一般注釋使用//分隔符,而大段的代碼可使用/*???*/分隔符。使用/**???*/將注釋形成文檔,并輸入給javadoc以生成HTML代碼文檔舉例://Acommentthattakesuponlyoneline./*Commentsthatcontinuepastonelineandtakeupspaceonmultiplelines...*//**Acommentfordocumentationpurposes.20理解對(duì)象回顧對(duì)象的歷史創(chuàng)建一個(gè)新類型創(chuàng)建一個(gè)對(duì)象—存儲(chǔ)器分配或布局21表達(dá)式變量和作用域變量初始化運(yùn)算符邏輯表達(dá)式位運(yùn)算布爾邏輯運(yùn)算符用加號(hào)(+)進(jìn)行串鏈接右移位運(yùn)算符左移位運(yùn)算符類型轉(zhuǎn)換升級(jí)和表達(dá)式的類型轉(zhuǎn)換22變量及作用域局部變量方法或塊內(nèi)有效類成員變量static:類內(nèi)有效非static:對(duì)象內(nèi)有效方法參數(shù)方法內(nèi)有效異常處理參數(shù)catch語句后{}內(nèi)有效P48

圖3-6、例3-423運(yùn)算符與表達(dá)式算術(shù)運(yùn)算符P50

算術(shù)運(yùn)算符優(yōu)先級(jí)與自動(dòng)轉(zhuǎn)換規(guī)則23:java.lang.Math.pow(2,3);關(guān)系運(yùn)算符邏輯運(yùn)算符P53

邏輯運(yùn)算符表位操作符賦值操作符24位操作符位邏輯運(yùn)算符按位與&按位或|按位異或^按位取反~位移位運(yùn)算符P55[注意]右移運(yùn)算符>>左移運(yùn)算符<<無符號(hào)右移運(yùn)算符>>>25賦值操作符擴(kuò)展賦值運(yùn)算符:P56

表3-16自動(dòng)類型轉(zhuǎn)換與強(qiáng)制類型轉(zhuǎn)換其它運(yùn)算符?:[].()Newinstanceof運(yùn)算符的優(yōu)先級(jí):P57

表3-1826強(qiáng)制類型轉(zhuǎn)換語法(type)expression舉例longbigValue=99L; intintValue=(int)bigValue;[注意]原始類型和數(shù)組、對(duì)象等引用類型變量間不能相互轉(zhuǎn)換27程序控制語句循環(huán)語句分支語句跳轉(zhuǎn)語句異常處理語句28循環(huán)語句whiledo…while[舉例]Chap02_2.javafor[舉例]P61

例3-829分支語句If/else語句P62

例3-9switch語句P62

例3-1030Applet基礎(chǔ)與高級(jí)編程Applet基本概念A(yù)pplet的編寫Applet中的圖形化用戶界面GUIApplet的多媒體支持Applet的安全控制Applet與外界的通信Applet與Application31Applet基本概念什么是Applet小應(yīng)用程序:web上的java依靠web瀏覽器或javaappletviewer運(yùn)行Applet開發(fā)過程編寫Applet源文件并編譯編寫插入Applet的HTML源文件輸入:appletviewerxxx.html或雙擊xxx.html[舉例]

Chap06_1.java,applet.htmlApplet的運(yùn)行過程瀏覽器加載指定URL的HTML文件瀏覽器解析HTML文件瀏覽器加載HTML文件中指定URL的Applet類瀏覽器中的Java運(yùn)行環(huán)境運(yùn)行該Applet類32Applet的類層次結(jié)構(gòu)每一個(gè)Applet都繼承自java.applet.Applet類,并且每個(gè)Applet都有一個(gè)主程序類,之前必須加上public33Applet的生命周期-1生命周期:加載->創(chuàng)建->運(yùn)行->消亡initstartstopdestroy裝載Applet時(shí)調(diào)用,初始化操作初始化后,訪問時(shí)調(diào)用Applet停止時(shí)調(diào)用,一般發(fā)生在頁面重定向或關(guān)閉前在瀏覽器完全關(guān)閉之前調(diào)用重新裝入或改變?yōu)g覽器大小或返回web頁面34Applet的生命周期-2Applet中沒有main()方法。當(dāng)Applet被瀏覽器運(yùn)行時(shí),init()、start()、stop()、destroy()方法等自動(dòng)執(zhí)行:init()方法:初始化,自動(dòng)調(diào)用,只執(zhí)行一次。本方法主要完成一些在Applet構(gòu)造方法所不能完成的工作。start()方法:初始化后,重入等都將自動(dòng)調(diào)用。本方法是Applet的主體,在其中可以執(zhí)行一些任務(wù)或啟動(dòng)相關(guān)的線程來執(zhí)行任務(wù)。stop()方法:離開Applet所在頁面時(shí)調(diào)用,以停止消耗系統(tǒng)資源。destroy()方法:瀏覽器關(guān)閉時(shí)自動(dòng)調(diào)用,以清除Applet所用的所有資源。35Applet的生命周期-3除了四個(gè)Applet生命周期控制的方法外,Applet類還提供了一些其他有用的方法:

publicAppletContext

getAppletContext()返回AppletContext實(shí)例

publicString

getAppletInfo()報(bào)告關(guān)于Applet的作者、版權(quán)、版號(hào)等信息

publicURL

getDocumentBase()返回包含Applet的HTML文件的URLpublicURL

getCodeBase()

返回Applet主類的URLpublicString

getParameter(String

name)

返回定義在HTML文件的</PARAM>標(biāo)記中指定參數(shù)的值,如果參數(shù)不存在,返回null36Applet的顯示-1AWTThreadrepaintupdatepaint程序調(diào)用初次顯示、遮蓋、調(diào)整大小、最大化、最小化等37Applet的顯示-2paint()Update()Repaint()Graphics類:相當(dāng)于畫筆drawLine()drawRect();fillRect()draw3Drect();fill3Drect()drawRoundRect();fillRoundRect()drawOval();fillOval()drawArc();fillArc()drawPolygon();drawPolyline();fillPolygon()drawBytes();drawChars();drawString()38Applet的編寫導(dǎo)入類包importjava.applet.Applet;importjava.awt.Graphics;定義Applet的主類實(shí)現(xiàn)Applet類的關(guān)鍵方法至少實(shí)現(xiàn)init()、start()、paint()中的一個(gè)方法將Applet嵌入HTML頁面中運(yùn)行至少指定Applet主類的位置及瀏覽器中的顯示尺寸39

HTML中Applet標(biāo)記的使用-1<APPLET[ARCHIVE=archiveList][CODEBASE=codebaseURL]CODE=appletFile

[ALT=alternateText][NAME=appletInstanceName]WIDTH=pixelsHEIGHT=pixels

[ALIGN=alignment][VSPACE=pixels][HSPACE=pixels]>[<PARAMNAME=appletParameter1VALUE=value>][<PARAMNAME=appletParameter2VALUE=value>]...[alternateHTML]</APPLET>40

HTML中Applet標(biāo)記的使用-2ARCHIVE=

archiveList[File1,File2,…]給出了Applet類及其運(yùn)行時(shí)所需的類所在的卷文件名。CODEBASE=

codebaseURL

指明Applet類文件所在URL基址,在Applet類中,方法getCodeBase()可以獲取該屬性。如果這個(gè)屬性沒有指明,那么Applet類文件必須與包含它的HTML頁面在同一個(gè)地方,方法getCodeBase()返回的值與getDocumentBase()相同。CODE=

appletFile

指明需要運(yùn)行的Applet類文件(.class文件),該文件是與codebaseURL相關(guān)的。NAME=

appletInstanceName

給出了Applet類運(yùn)行時(shí)的實(shí)例名,這使得同處于一個(gè)頁面的不同Applet之間能夠相互通信。方法getAppletContext()可以得到同一個(gè)方頁面中其它Applet類。41

HTML中Applet標(biāo)記的使用-3ALT=

alternateText

如果瀏覽器支持Applet但不能運(yùn)行它,就顯示alternateText中所給出的文字。否則就忽略它。WIDTH=

pixelsHEIGHT=

pixels

Applet在瀏覽器中所顯示的高度和寬度(以象素為單位)。ALIGN=

alignment

Applet在瀏覽器中顯示時(shí)的對(duì)齊方式,其含義與效果與圖片在HTML中的一樣。其取值有:left,right,top,texttop,middle,absmiddle,baseline,bottom,absbottom。VSPACE=

pixels

HSPACE=

pixels

Applet在瀏覽器中顯示時(shí)上下、左右要預(yù)留的高度和寬度,其含義與效果與圖片在HTML中的一樣。42

HTML中Applet標(biāo)記的使用-4<PARAMNAME=

appletParameter1

VALUE=

value

>

<PARAM>屬性可以使得Applet能夠從頁面中獲取所需的參數(shù)。Applet可以用其方法getParameter()獲取<PARAM>屬性指定的參數(shù)。<PARAM>屬性的作用與應(yīng)用程序中main()方法里參數(shù)Stringargs[]的作用是一樣的。一個(gè)好的小應(yīng)用程序,應(yīng)該提供用戶能夠設(shè)置外部參數(shù)的功能,以使得用戶能夠根據(jù)自己的需要來應(yīng)用它。方法getParameterInfo()可以得到有關(guān)<PARAM>屬性的說明信息。alternateHTML如果瀏覽器不支持Applet,就解釋alternateHTML所給出的HTML代碼。否則就忽略它。43回顧前兩章緒論面向?qū)ο蟪绦蛟O(shè)計(jì)思想java語言基礎(chǔ)重點(diǎn)習(xí)題:Test.java44java中的數(shù)據(jù)類型轉(zhuǎn)換-1如何將字串String轉(zhuǎn)換成整數(shù)intinti=Integer.parseInt(<String>);

或i=Integer.parseInt(<String>,<index>);inti=Integer.valueOf(my_str).intValue();字符串轉(zhuǎn)成Double,Float,Long的方法大同小異45java中的數(shù)據(jù)類型轉(zhuǎn)換-2如何將整數(shù)int轉(zhuǎn)換成字串StringStrings=String.valueOf(i);Strings=Integer.toString(i);Strings=""+i;Double,Float,Long轉(zhuǎn)成字符串的方法大同小異[舉例]Chap03_1.java46java中的數(shù)據(jù)類型轉(zhuǎn)換-3string->byte BytestaticbyteparseByte(Strings)

byte->string BytestaticStringtoString(byteb)char->string CharacterstaticStringtoString(charc)string->Short ShortstaticShortparseShort(Strings)Short->String ShortstaticStringtoString(Shorts)String->Integer IntegerstaticintparseInt(Strings)Integer->String IntegerstaticStringtostring(inti)String->Long LongstaticlongparseLong(Strings)Long->String LongstaticStringtoString(Longi)String->Float FloatstaticfloatparseFloat(Strings)Float->String FloatstaticStringtoString(floatf)String->Double DoublestaticdoubleparseDouble(Strings)Double->String DoublestaticStringtoString(Double)47Java面向?qū)ο筇匦愿攀鲱惖亩x對(duì)象的生命周期類的繼承與多態(tài)48概述Java語言的OOP特性封裝繼承多態(tài)類和對(duì)象的基本概念例4-149類的定義類的基本結(jié)構(gòu)類的聲明:<modifiers>class<class_name>類體P81圖4-1 [<attributedeclare>] [<constructordeclare>] [<methodsdeclare>]類的封裝與信息隱藏P82例4-2成員變量基本四態(tài):public、protected、private、—成員方法方法聲明:P83[舉例]P84例4-3方法調(diào)用中的參數(shù)傳遞:傳值(包括地址)P85例4-450方法重載Overloading——允許在一個(gè)類的定義中,多個(gè)方法使用相同的方法名(多態(tài):編譯時(shí)多態(tài))舉例publicvoidprintln() publicvoidprintln(inti) publicvoidprintln(floatf) publicvoidprintln(Stringstr) publicvoidprintln(Objectx)P88

例4-551構(gòu)造方法-1基本格式[public|protected|private]<classname>([<argumentlist>]){ [<statements>] }特點(diǎn)構(gòu)造方法的名稱必須和類名相同構(gòu)造方法不能有返回值用戶不能直接調(diào)用構(gòu)造方法,必須通過關(guān)鍵詞new自動(dòng)調(diào)用[舉例]P90

例4-7類成員變量的賦值:初始化->顯式->構(gòu)造52構(gòu)造方法-2缺省的構(gòu)造方法沒有參數(shù)系統(tǒng)自動(dòng)添加初始化對(duì)象重載構(gòu)造方法一般加上缺省情況[舉例]P91

例4-853對(duì)象的生命周期對(duì)象的創(chuàng)建P94

圖4-4new分配內(nèi)存空間顯式初始化構(gòu)造方法初始化對(duì)象的使用對(duì)象的清除對(duì)象的引用與多個(gè)引用空間finalize();gc();54類的繼承與多態(tài)-1子類定義ClassSubClassextendsSuperClass{…}分析電子商務(wù)售書網(wǎng)站(不同類書、其它類)特性子類繼承父類所有屬性和方法,除了private修飾的屬性和方法構(gòu)造方法只要聲明自己特有的屬性和方法55類的繼承與多態(tài)-2單繼承extends

后面實(shí)現(xiàn)一個(gè)類名P97

圖4-5多重繼承只能靠接口實(shí)現(xiàn)this與super關(guān)鍵詞P98

例4-9this() //調(diào)用本類的構(gòu)造方法this.someMethod() //調(diào)用本類的方法/屬性super() //調(diào)用父類的構(gòu)造方法super.someMethod() //調(diào)用父類的方法/屬性[討論]

去掉super和thisChap03_2.java56子類對(duì)象的創(chuàng)建與實(shí)例化子類對(duì)象的創(chuàng)建與初始化分配對(duì)象所需要的全部?jī)?nèi)存空間,并初始化按繼承關(guān)系,自頂向下顯式初始化按繼承關(guān)系,自頂向下調(diào)用構(gòu)造方法幾點(diǎn)注意先從各級(jí)父類繼承部分完全初始化顯式初始化構(gòu)造初始化調(diào)用父類構(gòu)造方法(super或默認(rèn))[案例分析]P99

例4-1057方法的重寫(overriding)為什么要方法重寫?隱藏父類成員變量或成員方法怎么實(shí)現(xiàn)方法重寫?子類中重寫方法的返回值類型必須與父類中被重寫方法的返回值類型相同子類中重寫方法的方法名和參數(shù)列表必須與父類中被重寫方法的方法名和參數(shù)列表相同子類中重寫方法的訪問權(quán)限不能縮小子類中重寫方法不能拋出新的異常方法重寫舉例P101例4-1158運(yùn)行時(shí)多態(tài)多態(tài)的本質(zhì)對(duì)外一個(gè)接口,內(nèi)部多種實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)(晚聯(lián)編)P104

與編譯時(shí)多態(tài)上溯造型(upcasting)子類對(duì)象引用轉(zhuǎn)成父類對(duì)象引用從extends到超集(子類是父類的超集)可以創(chuàng)建不同類型對(duì)象的數(shù)組下溯造型(downcasting)父類對(duì)象引用轉(zhuǎn)成子類對(duì)象引用強(qiáng)制類型轉(zhuǎn)換59對(duì)象類型的強(qiáng)制類型轉(zhuǎn)換instanceof運(yùn)算符aObjectVaribleinstanceofSomeClass強(qiáng)制類型轉(zhuǎn)換(SomeClass)aObjectVaribleObject類clone()equals()與==toString()getClass()60Java高級(jí)特性static關(guān)鍵詞final關(guān)鍵詞抽象類接口包訪問控制內(nèi)部類其它類61static關(guān)鍵詞static含義:靜態(tài)的、作用域:所屬類類變量/靜態(tài)變量所屬類的所有實(shí)例變量中都可以訪問private類方法/靜態(tài)方法62靜態(tài)初始化程序語法static{

… }[舉例]P118

例5-363final關(guān)鍵詞作用范圍類的聲明:不能再派生子類成員方法:不能被重寫成員變量:常量[舉例]P119

例5-464抽象類概念包含一個(gè)或多個(gè)抽象方法只有聲明,沒有方法體稱為抽象方法特點(diǎn)abstract修飾除了沒有方法體,其它和class一樣不能創(chuàng)建抽象類實(shí)例抽象類的子類可以創(chuàng)建實(shí)例(非抽象方法)抽象類的含義P121

圖5-165關(guān)于樹狀結(jié)構(gòu)不足之處的例子接口的引出-166卡車、輪船、噴氣機(jī)這些子類都以汽油為動(dòng)力燃料所以具有一些相同的屬性和方法,如每公里耗油量、剩余油量、加油操作、獲取剩余油量等為使程序簡(jiǎn)潔,可把這些公共屬性和方法放在父類交通工具中,然后由子類、子類的子類繼承但必將產(chǎn)生一個(gè)問題:自行車等非燃油交通工具子類也繼承了這些屬性和方法,這很不合理另外,子類層次越下,繼承的無效的方法越多,難以管理和掌握接口的引出-267解決方法把用于完成特定功能的若干屬性和方法組織成相對(duì)獨(dú)立的集合,凡是需要實(shí)現(xiàn)這種特定功能的類,都可以繼承該集合,并在類內(nèi)使用它。上述集合就是接口。在上面的例子中,可以定義一個(gè)用來完成燃油功能的接口“可燃油的”包含相關(guān)屬性功能,卡車、輪船、噴氣機(jī)這些類均可以通過實(shí)現(xiàn)該接口來擁有燃油功能。接口的引出-368接口的引出-469接口概念聲明方法,不定義方法體一組對(duì)外的公共接口語法[public]interfaceInterfaceName[extendsListOfSuperInterface]{ typeNAME=value; returnTypemethodName([paramlist]);

}接口的實(shí)現(xiàn)implementsInterfaceName可以使用接口中定義的常量必須實(shí)現(xiàn)接口定義的所有方法實(shí)現(xiàn)多態(tài):P124

圖5-2例5-570多重繼承[舉例]P127

圖5-4擴(kuò)展接口創(chuàng)建子接口:extendsInterfaceName接口與抽象類接口與抽象類的所有方法都是抽象的,但抽象類有空方法體一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,而只能繼承一個(gè)抽象父類接口不構(gòu)成類的繼承體系,因此條件比較寬松;抽象類一般位于類的頂層一般使用接口;需要成員變量和完整方法定義時(shí),使用抽象類71包(package)OOP的封裝思想:將相關(guān)功能的接口和類放到同一目錄中,同時(shí)避免命名沖突和限定類的訪問權(quán)限獨(dú)立命名空間相關(guān)類與接口的集合優(yōu)點(diǎn)容易根據(jù)所需功能找到相關(guān)類每個(gè)包創(chuàng)建新的命名空間,不同包相同名允許同一個(gè)包中的類之間有寬松的訪問控制72包的定義和使用包的定義packagepkg1[.pkg2[.pkg3…]]定義類屬于哪個(gè)包除去空格和注釋,包的定義在最前方包名間以“.”分隔默認(rèn):package.//屬于當(dāng)前目錄,默認(rèn)不寫包成員的使用引入(import)包成員或整個(gè)包,使用短名使用長(zhǎng)名(包名.接口名或類名)[舉例]P131

例5-673packagemyclass.graphics;

這條語句指定這個(gè)包中的文件存儲(chǔ)在目錄path/myclass/graphics下。包層次的根目錄path是由環(huán)境變量CLASSPATH來確定的。packagemyclass.graphics;classSquare{…;}classCircle{…;}classTriangle{…;}myclasspathSquareUsingpackage-174如果在程序Test.java中已定義了包p1,編譯時(shí)采用如下方式:javac-ddestpathTest.java

則編譯器會(huì)自動(dòng)在destpath目錄下建立一個(gè)子目錄p1,并將生成的.class文件都放到destpath/p1下。

destpath可以是環(huán)境變量CLASSPATH中的一個(gè)。Usingpackage-275Usingpackage-3為了方便編程和管理,通常把需要在一起工作的類放在一個(gè)包,類似于文件夾的組織文件的模式。通常一個(gè)類只能引用與它在同一個(gè)包中的類。若需要使用其它包中的類,用import語句引入整個(gè)包或所需要的類。

importpackage1[.package2…].(classname|*);

例如:

importmyclass.graphics.*;

importjava.io.File;也可以直接在類的前面添加完整的包名作為前綴。例如,定義一個(gè)日期對(duì)象:

java.util.Datethedate=newDate(2003,10,1);不推薦使用這種辦法。76Howtouseclasspath為了讓程序找到定義的package,需要:程序或者在定義的package上面的目錄下執(zhí)行,或者把classpath設(shè)置為包含有指向定義的package的路徑。classpath的確切效果和設(shè)置一直在隨java的修訂而變化,所以使用時(shí)最好參考sun的最新說明。<舉例>77Usingpackage-4//Ashortpackagedemonstration.packageBookPack;

classBook{privateStringtitle;privateStringauthor;privateintpubDate;

Book(Stringt,Stringa,intd){title=t;author=a;pubDate=d;}

voidshow(){System.out.println(title);System.out.println(author);System.out.println(pubDate);System.out.println();}}

classBookDemo{publicstaticvoidmain(Stringargs[]){Bookbooks[]=newBook[5];

books[0]=newBook("Java:ABeginner'sGuide","Schildt",2005);books[1]=newBook("Java:TheCompleteReference","Schildt",2005);books[2]=newBook("TheArtofJava","SchildtandHolmes",2003);books[3]=newBook("RedStormRising","Clancy",1986);books[4]=newBook("OntheRoad","Kerouac",1955);

for(inti=0;i<books.length;i++)books[i].show();}}78Usingpackage-5//Bookrecodedforpublicaccess.packageBookPack;

publicclassBook{privateStringtitle;privateStringauthor;privateintpubDate;

//Nowpublic.publicBook(Stringt,Stringa,intd){title=t;author=a;pubDate=d;}

//Nowpublic.publicvoidshow(){System.out.println(title);System.out.println(author);System.out.println(pubDate);System.out.println();}}為了使本包中的類可以被其他包中的類所訪問,需要:把本包中的類聲明為public,且這個(gè)類的構(gòu)造函數(shù)也是public的。如果要訪問本包中類的方法,那么這個(gè)方法也需要聲明是public的或者使用包的全名訪問使用import聲明79usingfullnametoaccessapackage//ThisclassisinpackageBookPackB.packageBookPackB;

//UsetheBookClassfromBookPack.classUseBook{publicstaticvoidmain(Stringargs[]){BookPack.Bookbooks[]=newBookPack.Book[5];

books[0]=newBookPack.Book("Java:ABeginner'sGuide","Schildt",2005);books[1]=newBookPack.Book("Java:TheCompleteReference","Schildt",2005);books[2]=newBookPack.Book("TheArtofJava","SchildtandHolmes",2003);books[3]=newBookPack.Book("RedStormRising","Clancy",1986);books[4]=newBookPack.Book("OntheRoad","Kerouac",1955);

for(inti=0;i<books.length;i++)books[i].show();}}80包的綜合舉例P131

例5-6importgraphics.twoD.*;通常會(huì)出現(xiàn)badclass錯(cuò)誤,java編譯器不smartjava與class同一目錄將*細(xì)化

setclasspath不能立即生效調(diào)用的java主文件在”根”目錄,則不需設(shè)置classpath81包的訪問控制成員變量、成員方法、內(nèi)部類private—私有的protected—受保護(hù)的default—默認(rèn)的public—公開的類publicdefault舉例82內(nèi)部類什么是內(nèi)部類內(nèi)部類的使用訪問外包類所有成員外包類語句塊中定義內(nèi)部類外包類外其他類訪問內(nèi)部類內(nèi)部類的特性83內(nèi)部類的特性內(nèi)部類的類名只用于定義它的類或語句塊內(nèi),在外部引用它時(shí)必須給出帶有外包類名的完整名稱,并且內(nèi)部類的名字不允許與外包類名字相同內(nèi)部類可以訪問外包類的靜態(tài)(static)或?qū)嵗蓡T變量?jī)?nèi)部類可以在成員方法中定義,該成員方法的局部變量及參數(shù)必須是final的才能被該內(nèi)部使用內(nèi)部類可以是抽象類或接口。如果是接口,則可以由其他內(nèi)部類實(shí)現(xiàn)內(nèi)部類可以使用public、protected、default或private等四種訪問權(quán)限控制內(nèi)部類可以被聲明為static(普通類不可),這樣的內(nèi)部類變成頂層類,相當(dāng)于把它放在外面,不再是嵌套的內(nèi)部類,且不包含指向外包類的指針只有頂層可以聲明static成員,若內(nèi)部類需定義static成員,須先將內(nèi)部類聲明為static84包裝類BooleanByteCharacterShortIntegerLongFloatDouble85集合類Collection:集合接口樹的根Set:不能包含重復(fù)的元素SortedSetList:有序的集合Map:實(shí)現(xiàn)鍵值到值的映射(不能重復(fù))SortedMap86實(shí)現(xiàn)Set接口的類HashSet對(duì)象中的元素存儲(chǔ)在Hash表中,存取效率高TreeSet實(shí)現(xiàn)SortedSet的接口,有序(升序)樹結(jié)構(gòu)存儲(chǔ)LinkedHashSet采用鏈表和Hash表相結(jié)合的結(jié)構(gòu)存儲(chǔ)[舉例]P146

例5-1287List接口特有屬性按位置存取元素查找遍歷建立List視圖舉例88Map:一種特殊的集合Map接口定義Map三類操作基本操作批操作集合視圖89異常處理異常的概念異常處理方法自定義異常類90異常的概念概念:在程序運(yùn)行時(shí)打斷正常程序流程的任何不正常的情況稱為錯(cuò)誤或異常出現(xiàn)異常試圖打開的文件不存在網(wǎng)絡(luò)連接中斷操作符越界加載的類找不到[舉例]P155

例6-191異常類層次P156Error與Exception不可恢復(fù)與可恢復(fù)不可處理與可處理92異常處理方法捕獲并處理異常好像traptry-catch-finally將方法產(chǎn)生的異常拋出好像transfermethodDeclarationthrowsException93捕獲并處理異常try-catch-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論