經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院程序設(shè)計基礎(chǔ)電商java_第1頁
經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院程序設(shè)計基礎(chǔ)電商java_第2頁
經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院程序設(shè)計基礎(chǔ)電商java_第3頁
經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院程序設(shè)計基礎(chǔ)電商java_第4頁
經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院程序設(shè)計基礎(chǔ)電商java_第5頁
已閱讀5頁,還剩476頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Java開發(fā)環(huán)境和程序設(shè)計初步

聯(lián)系方式金浩俠

tel有問題一定要問主要內(nèi)容1.1Java語言發(fā)展歷史1.2Java語言的特點(diǎn)1.3Java的工作原理1.4Java運(yùn)行環(huán)境JDK1.5構(gòu)建Java程序1.6開發(fā)工具1.人物JamesGosling-Java之父-戴著眼睛的蜘蛛-Sun副總裁

BillJoy-Sun創(chuàng)始人之一

-軟件業(yè)的愛迪生-2003年離開Sun2.關(guān)鍵詞綠色計劃Green與平臺無關(guān)Java最初的名字:橡樹Oak一杯飄香的咖啡Java網(wǎng)絡(luò)與Java現(xiàn)在請觀看java+youSun硅谷總部圖片Sun硅谷總部圖片Sun硅谷總部圖片Sun硅谷總部圖片Sun硅谷總部圖片TheNetwork

istheComputerSun董事會主席:ScottMcNealy

SunCEO(任期1982-2006)ScottMcNealySun公司CEO:

JoanthanSchwartz

2006-2010任職JoanthanSchwartzSun和Oracle介紹Sun和Oracle

2009.4Oracle收購SunIBM、Sun、Oracle三家公司比較Oracle主頁

Oracle目標(biāo)Jonathan宣布辭職

Java應(yīng)用:Google地圖Java應(yīng)用:小游戲3.Java開發(fā)平臺J2SE(

Java

2

Standard

Edition),Java的標(biāo)準(zhǔn)版,針對普通PC應(yīng)用。J2EE(

Java

2

Enterprise

Edition),Java的企業(yè)版,針對企業(yè)網(wǎng)應(yīng)用。J2ME(Java2MicroEdition),針對嵌入式設(shè)備和消費(fèi)類電器,如手機(jī)等。

1.2Java的特點(diǎn)Java是一種具有簡單、面向?qū)ο?、分布式、解釋性、健壯性、安全、平臺無關(guān)、可移植、高性能、多線程和動態(tài)執(zhí)行等特性的語言。特點(diǎn)簡單并面向?qū)ο篝敯舨踩Y(jié)構(gòu)中立并可以移植高性能解釋執(zhí)行、多線程并且是動態(tài)的解釋性Java語言分兩步執(zhí)行1)由編譯器將用戶程序編譯成字節(jié)碼2)由Java虛擬機(jī)(JavaVirtualMachine)解釋執(zhí)行字節(jié)碼可以在不同的硬件平臺上實(shí)現(xiàn)不同的Java虛擬機(jī),保證了Java語言的平臺無關(guān)性和可移植性。1.3Java的工作原理JavaApplicationJavaAppletServlets(JSP)JavaAPIWebServer字節(jié)碼BytecodesJavaVirtualMachine(JVM)HardwarePlatformJava虛擬機(jī)軟件模擬的計算機(jī)執(zhí)行字節(jié)碼文件(*.class)不同的軟硬件平臺需要對Java虛擬機(jī)做專門的實(shí)現(xiàn)Java程序執(zhí)行過程1Java程序執(zhí)行過程2Java程序執(zhí)行過程21.4Java運(yùn)行環(huán)境JDKJDK:Java開發(fā)工具包Java

DevelopmentKit——面向開發(fā)人員JRE:Java運(yùn)行時環(huán)境JavaRuntimeEnvironment——面向Java程序的使用者

JDK安裝及環(huán)境設(shè)置對于WIN

2000\WIN

XP系統(tǒng),具體步驟如下:

控制面板/系統(tǒng)/高級/環(huán)境變量,在系統(tǒng)變量中雙擊path選項,在對話框中“變量值”中插入C:\ProgramFiles\Java\jdk1.6.0_16\bin1.5

構(gòu)建Java程序Java程序分成兩大類:Java應(yīng)用程序Application控制臺程序:在DOS窗口運(yùn)行,程序入口是main()方法窗口程序:有圖形界面,程序入口是main()方法Java小應(yīng)用程序Applet:嵌入在HTML文件中,在瀏覽器中運(yùn)行,沒有main()方法HelloWorld程序//Example1//ThisisasimpleinstanceofjavaapplicationpublicclassHelloWorld{publicstaticvoidmain(Stringargs[]){System.out.println(“HelloWorld!”);}}程序分析類定義

Java程序的基本組成部分是類(class),如本例中的HelloWorld類。main()方法

JavaApplication程序的入口是main()方法。它有固定的書寫格式:

publicstaticvoidmain(Stringargs[]){ …… }程序分析程序內(nèi)容

由方法體實(shí)現(xiàn)程序要完成的功能,方法的實(shí)現(xiàn)由一個個語句組成注釋

與C++相同,一行中‘//’后的內(nèi)容為注釋,‘/*’和‘*/’中的內(nèi)容也是注釋Java程序的編譯運(yùn)行javacHelloWorld.java

源文件名為HelloWorld.java,注意:文件名必須與公共類名相同;由javac編譯器編譯源程序,產(chǎn)生字節(jié)碼文件(HelloWorld.class)javaHelloWorld

由java解釋器解釋執(zhí)行1.6開發(fā)工具

EclipseMyEclipseEclipse——一個集成開發(fā)環(huán)境IDE(IntegratedDevelopingEnvironment),IBM公司,開源。

目前主要用作JavaIDE。MyEclipse——Genuitec公司,Eclipse的插件,不免費(fèi)。第2章Java程序設(shè)計基礎(chǔ)

2.1標(biāo)識符與關(guān)鍵字Java的符號集采用Unicode字符集——一個字符占兩個字節(jié),不論中文、英文還是其他字符標(biāo)識符為變量、類或方法起的一個名稱以字母、下劃線或$符號開頭由字母、下劃線、$符號和數(shù)字組成區(qū)分大小寫,沒有最大長度限制,不能使用關(guān)鍵字示例:identifier、userName、user_name、_sys_varl、$change2.2.1數(shù)據(jù)類型Java編程語言定義了8種基本數(shù)據(jù)類型布爾——boolean字符——char整數(shù)——byte、short、int和long浮點(diǎn)——double和float布爾類型——booleanboolean數(shù)據(jù)類型有兩個值:true和false例如:語句booleantruth=true;

聲明變量truth為boolean類型,并將其賦值為true。字符類型——char與Stringchar代表16位的Unicode字符字符必須在單引號(‘’)內(nèi)使用:

‘a(chǎn)’

字母a

‘\t’

制表符

‘\u????’

特定的Unicode字符,????用4個確切的16位數(shù)字代替字符類型——char與Stringcharch=‘A’;//聲明并初始化一個char變量charch1,ch2;//聲明兩個char變量字符類型——char與StringString不是基本數(shù)據(jù)類型,而是一個類字符在雙引號(“”)內(nèi)

“Hello,World!”使用如下:Stringstr1,str2;//聲明兩個String變量Stringgreeting=“GoodMorning!!\n”;StringerrorMessage=“RecordNotFound!”;//聲明兩個String變量并且初始化它們整數(shù)類型——byte(8位)、short(16位)、int(32位)和long(64位)三種形式使用——十進(jìn)制、八進(jìn)制或十六進(jìn)制2十進(jìn)制整數(shù)2077以0開頭表示八進(jìn)制值0xBAAC以0x開頭表示十六進(jìn)制值默認(rèn)是int類型使用字母L或l定義long類型浮點(diǎn)類型

——float(32位)和double(64位)浮點(diǎn)數(shù)包括十進(jìn)制浮點(diǎn)或者下列所示之一:E或e(加指數(shù)值)F或f(float)D或d(double)3.14一個簡單的浮點(diǎn)值(一個double類型)6.02E23一個大浮點(diǎn)值2.718F一個簡單的float值123.4E+306D一個帶有D(多余)的大的double值默認(rèn)類型是double例子publicclassAssign{publicstaticvoidmain(Stringargs[]){intx,y;floatz=3.414f;doublew=3.1415;booleantruth=true;charc;Stringstr;Stringstr1=“bye”;c=‘A’;str=“Hioutthere!”;x=6;y=1000;}}y=3.1415926;w=175,000;truth=1;z=3.14156;為什么不合法2.2.2變量變量:聲明變量必須在類的定義內(nèi),可以在方法內(nèi)或者方法外在方法內(nèi)定義的變量稱為局部變量,需要顯式的對其初始化成員變量和類變量自動初始化數(shù)字型初始值為0對象型初始值為null2.2.3常量常量:在程序運(yùn)行中其值保持不變的量。文字常量:在程序中直接寫出量值的常量,

如:37,2.1,true等。符號常量:用標(biāo)識符代表的常量,

如:finalintx=100;2.2.4基本數(shù)據(jù)類型間的轉(zhuǎn)換一般形式:(類型)(表達(dá)式)作用:將表達(dá)式的結(jié)果強(qiáng)制轉(zhuǎn)換為另一種類型低存儲位可以自動轉(zhuǎn)換為高存儲位數(shù)據(jù)類型高存儲位則必須通過強(qiáng)制類型轉(zhuǎn)換才能轉(zhuǎn)換為低存儲位數(shù)據(jù)類型2.2.5封裝類(Wrapper類)基本數(shù)據(jù)類型Wrapper類booleanBooleanbyteBytecharCharactershortShortintIntegerlongLongfloatFloatdoubleDoubleWrapper類通過將值傳遞給相應(yīng)的構(gòu)造器,可以構(gòu)建Wrapper類對象例如:intpInt=500;IntegerwInt=newInteger(pInt);intp2=wIValue();Wrapper類當(dāng)轉(zhuǎn)換基本數(shù)據(jù)類型時Wrapper類很有用,因為可以使用很多Wrapper類方法。例如:Stringstr=“365”;intx=Integer.parseInt(str);

或intx=Integer.valueOf(str).intValue();2.3操作運(yùn)算符與表達(dá)式1.邏輯運(yùn)算符邏輯運(yùn)算符是(在C語言里用的很多,JAVA里少)!一元邏輯非&二元邏輯與^二元邏輯異或|二元邏輯或短路邏輯運(yùn)算符是&&二元條件邏輯與||二元條件邏輯或邏輯運(yùn)算符0值不能自動解釋為false,

非0值不能自動解釋為true。如:inti=1;if(i)//generatesacompileerrorif(i!=0)//correct邏輯運(yùn)算符短路邏輯操作符MyDated;if((d!=null)&&(d.day>31)){//dosomethingwithd}

當(dāng)?shù)谝粋€子表達(dá)式(d!=null)為假時,第二個子表達(dá)式就被跳過,全部表達(dá)式總是假的。

同樣,使用||操作符,如果第一個表達(dá)式返回為真,則不必計算第二個表達(dá)式,因為整個表達(dá)式必定為真。2.引用操作符“點(diǎn)”符號:<對象>.<成員>用于訪問對象成員,包括屬性和方法。說明點(diǎn)的操作可使您訪問類的非私有屬性和方法在方法的定義內(nèi),訪問本地成員不需要使用點(diǎn)符號3.對象運(yùn)算符AinstanceofB用來判定對象A是否為類B的對象4.字符串運(yùn)算符+操作符執(zhí)行String連接產(chǎn)生新的String一個參數(shù)必須是String對象非字符串對象會自動轉(zhuǎn)換為String對象,如要轉(zhuǎn)換為等價的字符串時,使用toString()成員方法字符串運(yùn)算符Stringfirst=“James”,last=“Gosling”;Stringname=first+last;結(jié)果:name的值是JamesGosling條件分支與循環(huán)控制語句順序結(jié)構(gòu)分支結(jié)構(gòu)

if、switch循環(huán)結(jié)構(gòu)

for、while、do-while練習(xí):輸入小寫字符串,轉(zhuǎn)換成小寫字符串書面作業(yè)將給定的數(shù)字轉(zhuǎn)換為大寫,如12345.67轉(zhuǎn)換為壹萬貳仟叁佰肆拾伍圓陸角柒分班級-學(xué)號-姓名-作業(yè)2.rar發(fā)送至第4章Java面向?qū)ο缶幊?/p>

——類和對象4.2.2類的定義Java類的基本語法:<修飾符>class<類名>{[<屬性聲明>][<構(gòu)造器聲明>][<方法聲明>]}<類名>可以是任何合法的標(biāo)識符,并且是所聲明類的名字。有幾種可使用的<修飾符>,但現(xiàn)在只使用public,聲明類可被任意訪問。類的正文聲明了與類相關(guān)的數(shù)據(jù)屬性、構(gòu)造器和方法的集合。示例例4.1定義一個類來描述圓的特征和行為。類名:Circle成員變量:nCenterXnCenterYnRadius成員方法:setRadius(int):voidgetRadius():intgetArea():float4.2.3成員變量變量聲明的一般格式:<修飾符><類型><名稱>;例如:privateintx;<名稱>可以是任何合法的標(biāo)識符,它是所聲明屬性的名字。有幾種可用的<修飾符>,但現(xiàn)在只使用public或private。private聲明該屬性只能由該類的方法訪問。屬性的<類型>可以是任何基本類型(int,boolean等)或任何類。修飾符final:聲明常量,如:finalintCONSTANT=50;

常量的值不能被修改。static:聲明靜態(tài)變量(類變量),如:staticintnCounter;4.3聲明方法方法的基本語法:<修飾符><返回類型><名稱>([<參數(shù)表>]){[<語句>]}<名稱>可以是任何合法的標(biāo)識符,但限制使用那些已經(jīng)在使用的名稱。<修飾符>是可選項,并可有很多不同的修飾符,包括public、protected和private等。public訪問修飾符表明可從其他代碼調(diào)用該方法。private表明方法只能在由該類中其他方法調(diào)用。示例例4-3定義一個人類,描述人類的姓名、年齡、身高、體重,定義一個方法用來檢驗人的體重是否在正常范圍之內(nèi),定義一個方法用于輸出個人資料。

4.3.3方法參數(shù)的傳遞方式形參:方法的聲明中的參數(shù)

聲明形參的類型和名稱實(shí)參:調(diào)用方法語句中的參數(shù)

有具體值例4-5

按值傳遞swap_value(intn1,intn2){intn0;n0=n1;n1=n2;n2=n0;System.out.println(n1);System.out.println(n2);}例4-5

按引用傳遞swap(MethodExample1n){intn0;n0=n.n1;n.n1=n.n2;n.n2=n0;System.out.println(n.n1);System.out.println(n.n2);}例4-5publicstaticvoidmain(Stringargs[]){intn1=1,n2=10;MethodExample1numbers=newMethodExample1();numbers.swap_value(1,10);System.out.println(“main()方法中n1=”+n1+”n2=”+n2);numbers.n1=2;numbers.n2=20;numbers.swap(numbers);System.out.println(“main()方法中numbers.n1=”+numbers.n1+”numbers.n2=”+numbers.n2);}4.4構(gòu)造函數(shù)聲明構(gòu)造函數(shù)構(gòu)造函數(shù)的基本語法:<修飾符><類名>([<參數(shù)表>]){[<語句>]}構(gòu)造函數(shù)特點(diǎn)構(gòu)造函數(shù)作用:完成類對象的初始化工作構(gòu)造函數(shù)的名稱必須與類名相同構(gòu)造器沒有返回值并且不可被繼承一般將構(gòu)造函數(shù)的修飾符聲明為public構(gòu)造函數(shù)中不能有return語句構(gòu)造函數(shù)參數(shù)參數(shù)表與方法聲明中的一樣??梢韵蠓椒ㄒ粯酉驑?gòu)造函數(shù)傳遞參數(shù)。構(gòu)造函數(shù)可以有0個、1個或者多個參數(shù)。4.4.1無參數(shù)的構(gòu)造函數(shù)沒有構(gòu)造函數(shù)——使用默認(rèn)的構(gòu)造函數(shù)(沒有參數(shù),沒有方法體)如果使用沒有參數(shù)的構(gòu)造函數(shù),則創(chuàng)建的對象具有相同的初始值例4-7classSameCircle{publicintnOrignX=3;publicintnOrignY=3;publicintnRadius=1;publicSameCircle(){}}顯式初始化在執(zhí)行構(gòu)造函數(shù)方法體之前執(zhí)行例4-7classSameCircle{publicintnOrignX;publicintnOrignY;publicintnRadius;publicSameCircle(){nOrignX=3;nOrignY=3;nRadius=1;}}4.4.2帶參數(shù)的構(gòu)造函數(shù)classSameCircle{publicintnOrignX;publicintnOrignY;publicintnRadius;publicSameCircle(intnOrignX,intnOrignY,intnRadius){this.nOrignX=nOrignX;this.nOrignY=nOrignY;this.nRadius=nRadius;}}this:代表當(dāng)前對象構(gòu)造函數(shù)的重載一個類可以有多個構(gòu)造函數(shù),叫做構(gòu)造函數(shù)的重載。條件(滿足其一)參數(shù)的個數(shù)不同參數(shù)的類型不同例1classSameCircle{publicintnOrignX;publicintnOrignY;publicintnRadius;publicSameCircle(intnOrignX,intnOrignY,intnRadius){this.nOrignX=nOrignX;this.nOrignY=nOrignY;this.nRadius=nRadius;}publicSameCircle(intnOrignX,intnOrignY){this.nOrignX=nOrignX;this.nOrignY=nOrignY;this.nRadius=5;}publicSameCircle(intnRadius){this.nOrignX=3;this.nOrignY=4;this.nRadius=nRadius;}}例1的另一種寫法classSameCircle{publicintnOrignX;publicintnOrignY;publicintnRadius;publicSameCircle(intnOrignX,intnOrignY,intnRadius){this.nOrignX=nOrignX;this.nOrignY=nOrignY;this.nRadius=nRadius;}publicSameCircle(intnOrignX,intnOrignY){this(nOrignX,nOrignY,5);}publicSameCircle(intnRadius){this(3,4,nRadius);}}構(gòu)造函數(shù)的使用不能由編程人員顯式調(diào)用。在創(chuàng)建一個類的新對象的同時,系統(tǒng)會自動調(diào)用該類的構(gòu)造函數(shù)為新對象初始化。構(gòu)造函數(shù)只能和new運(yùn)算符一起使用。格式類名

對象名=new

構(gòu)造函數(shù)名稱(成員變量的初始值)默認(rèn)構(gòu)造函數(shù)每個類至少有一個構(gòu)造函數(shù)。如果不編寫構(gòu)造函數(shù),則自動添加默認(rèn)構(gòu)造函數(shù):默認(rèn)構(gòu)造函數(shù)不帶參數(shù)默認(rèn)構(gòu)造函數(shù)函數(shù)體為空不必編寫構(gòu)造函數(shù)就能使用newXxx()創(chuàng)建

對象實(shí)例示例classSameCircle{publicintnOrignX;publicintnOrignY;publicintnRadius;publicSameCircle(intnOrignX,intnOrignY,intnRadius){this.nOrignX=nOrignX;this.nOrignY=nOrignY;this.nRadius=nRadius;}publicstaticvoidmain(Stringargs[]){SameCirclec1=newSameCircle();SameCirclec2=newSameCircle(3,4,5);}}哪個語句有錯?為什么?4.5對象(類的實(shí)例化)4.5.1對象的生成

(1)對象的聲明格式:<類名><對象名>;如:SameCirclec1,c2;c1和c2是兩個空對象。c1c2(2)創(chuàng)建對象格式:<對象名>=new<類名>(實(shí)參);如:c1=newSameCircle(3,4,5);c2=newSameCircle(6,7,8);345…678…c1c2對象c1的首地址對象c2的首地址4.5.2對象的引用SameCirclec1=newSameCircle(3,4,5);SameCirclec2=c1;345…c1對象c1的首地址c2對象c1的首地址c2是c1的引用,是c1的首地址作業(yè)書面作業(yè):400頁

第1章

二、2、3上機(jī)作業(yè):1.403頁

三、22.編寫一個類模擬銀行賬戶基本屬性和操作(存款、取款、查詢信息等)。4.5.3對象的清除對象為null時,由Java的自動垃圾收集機(jī)制清除對象,釋放對象占用內(nèi)存手動編寫finalize()方法撤銷對象——不提倡使用4.5.4對象的內(nèi)存模型棧內(nèi)存:在方法中定義的變量(基本類型和引用類型)。超過變量的作用域時,自動釋放變量的內(nèi)存堆內(nèi)存:new創(chuàng)建的對象(包括數(shù)組),由Java的自動垃圾收集機(jī)制來清除示例(1)聲明對象Personp;未初始化地址p棧內(nèi)存堆內(nèi)存示例(2)創(chuàng)建對象p=newPerson();未初始化地址p棧內(nèi)存堆內(nèi)存null00.0…0.0nameageweightheight0x30000x3000注意二者的區(qū)別棧stack——連續(xù)的內(nèi)存區(qū)域,大小固定,編譯時確定所需空間大小,效率高堆heap——不連續(xù)的內(nèi)存區(qū)域,運(yùn)行時確定所需空間大小(支持面向?qū)ο蟮亩鄳B(tài)性,如:運(yùn)行時才能確定是哪個類的對象),效率低,但靈活4.6實(shí)例成員和類成員例4-10publicclassClerk{privateintC_ClerkNo;publicstaticintC_NextClerkNo=1000;publicClerk(){C_ClerkNo=++C_NextClerkNo;}}例4-10classTest{publicstaticvoidmain(Stringargs[]){Clerkc1=newClerk();Clerkc2=newClerk();}}例4-10publicclassClerk{privateintC_ClerkNo;publicstaticintC_NextClerkNo=1000;publicClerk(){C_ClerkNo=++C_NextClerkNo;}publicintgetClerkNo(){returnC_ClerkNo;}}例4-10classTest{publicstaticvoidmain(Stringargs[]){Clerkc1=newClerk();Clerkc2=newClerk();System.out.println(“c1:nextClerkNo”);System.out.println(c1.C_NextClerkNo);System.out.println(“c1:clerkNO”);System.out.println(c1.getClerkNo());…}}Clerk+C_NextClerkNo:int=1000-C_ClerkNo:intc1:ClerkC_ClerkNo=1001c2:ClerkC_ClerkNo=1002《實(shí)例》《實(shí)例》在這個示例中,為創(chuàng)建的每個對象分配了一個唯一的序列號,從1000開始向上遞增。變量C_NextClerkNo在所有實(shí)例間共享,因此當(dāng)一個對象的構(gòu)造器增加C_NextClerkNo的值時,下一個創(chuàng)建的對象就可接收到這個增加的值。類屬性說明使用static來標(biāo)記的變量是共享于類的所有實(shí)例的變量。例如:可以使用該變量作為實(shí)例間通信的基礎(chǔ),或者跟蹤已創(chuàng)建的實(shí)例數(shù)。如果static變量未被標(biāo)記為private,那么可從類外訪問它。這樣,不需要類的實(shí)例,就可通過類名引用它。publicclassOtherClass{publicvoidincrementNumber(){Count.counter++;}}類屬性的使用API中:如Math.PI(不用創(chuàng)建Math類的對象就可以使用PI這個類屬性)作為全局變量,即只想用一個存儲區(qū)域來保存特定的數(shù)據(jù)。無論創(chuàng)建多少個對象,甚至不創(chuàng)建對象都可以使用。思考題:1.銀行卡的年費(fèi)2.例4-11銀行卡舉例publicclassBankCard{privateStringCardNO;//卡號…

publicstaticdoubleannual_fee;//年費(fèi)}例4-11publicclassClerk{privateintC_ClerkNo;privatedoubleC_ClerkSalary;publicstaticintC_NextClerkNo=1000;publicstaticdoubleC_LowSalary=280;//最低工資publicClerk(doublesalary){C_ClerkNo=++C_NextClerkNo;C_ClerkSalary=C_LowSalary+salary;}}static方法類方法示例publicclassClerk{privateintC_ClerkNo;publicstaticintC_NextClerkNo=1000;publicstaticintgetNextNo(){returnC_NextClerkNo;}publicClerk(){C_ClerkNo=++C_NextClerkNo;}}使用類名訪問靜態(tài)方法publicclassTest{publicstaticvoidmain(Stringargs[]){System.out.println(“Numberofclerkis”+Clerk.getNextNo());Clerkc1=newClerk();System.out.println(“Numberofclerkis”+Clerk.getNextNo());}}static方法說明main()方法是static方法,因為執(zhí)行main方法時,JVM并不創(chuàng)建類的實(shí)例。因此如果有成員數(shù)據(jù),必須創(chuàng)建對象來訪問它。如:Math類的運(yùn)算方法都定義為static,可以直接通過Math.方法名()來訪問。static方法說明除了局部變量、static屬性及其參數(shù)外,static方法不能訪問任何變量。如果試圖訪問非static屬性會引起編譯器錯誤。非static屬性綁定到一個實(shí)例上并且只有通過實(shí)例引用才能訪問。錯誤的例子publicclassClerk{privateintC_ClerkNo;publicstaticintC_NextClerkNo=1000;publicClerk(){C_ClerkNo=++C_NextClerkNo;}publicstaticintgetNextNo(){returnC_ClerkNo;//編譯錯誤}}判斷哪些語句錯誤?classTest{staticintnum;intc;publicstaticvoidmain(Stringargs[]){num=100;c=100;}staticvoidss(){num=100;c=100;}voidtt(){num=100;c=100;}}正確的寫法classTest{staticintnum;intc;publicstaticvoidmain(Stringargs[]){num=100;Testt=newTest();t.c=100;}}分析書上的例子

錯在哪兒?classInstanceTest{intVariable;staticpublicintmethod(){returnVariable;}staticpublicvoidmethod2(intvariable){this.Variable=variable;}}靜態(tài)初始化器靜態(tài)初始化一個類可以在“靜態(tài)塊”中(而非方法體內(nèi))包含代碼靜態(tài)塊代碼僅在加載類時執(zhí)行一次如果類中包含多個靜態(tài)塊,它們將被按照在類中出現(xiàn)的順序執(zhí)行示例1classCount{publicstaticintcounter;static{counter=10;}}publicclassTest{publicstaticvoidmain(Stringargs[]){System.out.println(“counter=”+Count.counter);}}

示例2classss{static{System.out.println(“hi”);}}publicclassTest{publicstaticvoidmain(Stringargs[]){sst1=newss();sst2=newss();sst3=newss();}}初始化實(shí)例變量的初始化——構(gòu)造函數(shù)類變量(static變量)的初始化——靜態(tài)初始化器4.7應(yīng)用程序的命令行參數(shù)格式一:java類名

參數(shù)1參數(shù)2參數(shù)3…要求:1.參數(shù)之間以空格分隔2.參數(shù)中不能包含空格例4-12if(args.length>0){for(inti=0;i<args.length;i++)System.out.println(args[i]);}應(yīng)用程序的命令行參數(shù)格式二:java類名

“參數(shù)1”

“參數(shù)2”

“參數(shù)3”…要求:參數(shù)中可以包含空格注意:參數(shù)一和參數(shù)二可以混合使用,即帶空格的參數(shù)用雙引號,不帶空格的參數(shù)不必用雙引號例4-15任意輸入五個數(shù),求它們的平均值。注意:接收到的參數(shù)需要進(jìn)行類型轉(zhuǎn)換,將字符串轉(zhuǎn)換為數(shù)值型。例4-15floatsum=0;if(args.length==5){for(inti=0;i<5;i++)sum+=Float.parseFloat(args[i]);}System.out.println(sum);System.out.println((float)sum/args.length);書面作業(yè)403頁

三、4接收鍵盤輸入的方法importjava.io.*;classtest{publicstaticvoidmain(Stringargs[])throwsIOException{Strings;BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));s=in.readLine();System.out.print(s);}}5.1類的繼承Employee類Employee+name:String+salary:double+birthDate:Date+getDetails():StringpublicclassEmployee{publicStringname;publicdoublesalary;publicDatebirthDate;

publicStringgetDetails(){...}}Manager類Manager+name:String+salary:double+birthDate:Date+department:String+getDetails():StringpublicclassManager{publicStringname;publicdoublesalary;publicDatebirthDate;

publicStringdepartment;publicStringgetDetails(){...}}子類化Employee+name:String+salary:double+birthDate:Date+getDetails():StringManager+department:StringpublicclassEmployee{publicStringname;publicdoublesalary;publicDatebirthDate;

publicStringgetDetails(){...}}publicclassManagerextendsEmployee{publicStringdepartment;}單繼承

(Java只支持單繼承)當(dāng)類只從一個類繼承時,稱為單繼承語法:<修飾符>class<名稱>[extends<父類>]{<聲明>*}實(shí)例importjava.util.Date;classEmployee{publicStringname;publicdoublesalary;publicDatebirthDate;

publicStringgetDetails(){

returnname+salary;

}}classManagerextendsEmployee{publicStringdepartment;}publicclassTest1{publicstaticvoidmain(Stringargs[]){Managerx=newManager();="Jack";x.salary=5000;System.out.println(x.getDetails());}}Date類舉例:

以03-25-2010的形式輸出日期importjava.text.SimpleDateFormat;importjava.util.Date;publicclasstest{publicstaticvoidmain(String[]args){SimpleDateFormatSDF=newSimpleDateFormat("MM-dd-yyyy");Datedate=newDate();System.out.println(SDF.format(date));}}Date類舉例:輸出星期幾importjava.text.SimpleDateFormat;importjava.util.Date;publicclasstest{publicstaticvoidmain(String[]args){SimpleDateFormatSDF1=newSimpleDateFormat("E");Datedate=newDate();System.out.println(SDF1.format(date));}}說明子類可以繼承超類中非private的方法和屬性——不必重新定義子類中可以增加新的屬性和方法繼承的目的:程序代碼重用,減少冗余96頁的例子Vehicle+speed:int+maintanceRecord:String+getSpeed():int+getMaintanceRecord():StringAutomobile-strModel:String-dateOfMade:String+getModel():String+getDateOfMade():String分析子類中有哪些屬性和方法?5.1.2方法的重載(overload)一個類中有多個同名的方法

如:Math類中的min()方法條件(滿足其一):參數(shù)的個數(shù)不同參數(shù)的類型不同如果兩個方法僅返回值不同,不是重載,會報錯思考——錯在哪兒?classtest{publicvoidprinttest(){System.out.println("ss");}publicintprinttest(){return1;}}例5-1:對矩形進(jìn)行初始化

方法1:左上角和右下角坐標(biāo)MyRectbuildRect(intx1,inty1,intx2,inty2){this.x1=x1;this.y1=y1;this.x2=x2;this.y2=y2;returnthis;}例5-1:對矩形進(jìn)行初始化

方法2:左上角和右下角的點(diǎn)MyRectbuildRect(PointtopLeft,PointbottomRight){x1=topLeft.x;y1=topLeft.y;x2=bottomRight.x;y2=bottomRight.y;returnthis;}例5-1:對矩形進(jìn)行初始化

方法3:左上角的點(diǎn)和矩形的寬和高M(jìn)yRectbuildRect(PointtopLeft,intw,inth){x1=topLeft.x;y1=topLeft.y;x2=x1+w;y2=y1-h;returnthis;}5.1.3方法的覆蓋(override)覆蓋方法子類可以修改從父類繼承的行為子類可以創(chuàng)建與父類的方法不同功能的方法,但下面是相同的:方法名返回類型參數(shù)列表實(shí)例importjava.util.Date;classEmployee{publicStringname;publicdoublesalary;publicDatebirthDate;

publicStringgetDetails(){

return“name:”+name+“\n”+“salary:”+salary;

}}classManagerextendsEmployee{publicStringdepartment;publicStringgetDetails(){

return"name:"+name+"\n"+"salary:"+salary+"\n"+"Managerof:"+department;}}實(shí)例publicclassTest1{publicstaticvoidmain(Stringargs[]){Employeee=newEmployee();="Mary";e.salary=3000;System.out.println(e.getDetails());Managerx=newManager();="Jack";x.salary=5000;x.department="Infor";System.out.println(x.getDetails());}}例5-2classCitizen{publicStringpersonID=“000000000000000000”;publicStringname=“無名氏”;publicStringsex=“男”;publicStringbirthday=“1900.1.1”;publicvoiddisplay(){…}}例5-2classStudentextendsCitizen{publicStringstudentID;publicStringregisterTime;publicintinit_result;publicvoiddisplay(){super.display();//執(zhí)行父類的display()方法…//子類中需要顯示的更多的內(nèi)容}}super關(guān)鍵字super關(guān)鍵字往往在覆蓋方法時,真正的目標(biāo)不是代替現(xiàn)有的行為,而是在某些方面擴(kuò)展那個行為類中使用super來指向父類的成員,包括數(shù)據(jù)和方法super的三種使用方式super.方法名([參數(shù)表]);——調(diào)用父類的方法super.成員變量名——訪問父類的成員變量super([參數(shù)表]);——調(diào)用父類的構(gòu)造函數(shù)實(shí)例importjava.util.Date;classEmployee{privateStringname;privatedoublesalary;privateDatebirthDate;

publicStringgetDetails(){

return“name:”+name+“\n”+“salary:”+salary;

}}classManagerextendsEmployee{privateStringdepartment;publicStringgetDetails(){

returnsuper.getDetails()+"\n"+"Managerof:"+department;}}構(gòu)造函數(shù)不能繼承子類從父類繼承所有的方法和變量子類不能繼承父類的構(gòu)造函數(shù)有兩種方法獲得構(gòu)造函數(shù)使用默認(rèn)構(gòu)造函數(shù)編寫一個或多個構(gòu)造函數(shù)調(diào)用父類構(gòu)造函數(shù)要調(diào)用父類構(gòu)造函數(shù),必須在子類構(gòu)造函數(shù)的第一行使用super關(guān)鍵字要調(diào)用特定的父類構(gòu)造函數(shù),必須為super提供參數(shù)如果沒有this或super調(diào)用,編譯器會插入一個對父類無參數(shù)構(gòu)造函數(shù)的隱含調(diào)用:super()classEmployee{privateStringname;privatedoublesalary;publicEmployee(Stringn,doubles){name=n;salary=s;}publicEmployee(Stringn){name=n;}}classManagerextendsEmployee{privateStringdepartment;publicManager(Stringname,doublesalary,Stringdept){super(name,salary);department=dept;}publicManager(Stringname,Stringdept){super(name);department=dept;}

publicManager(Stringdept){department=dept;}}哪兒有問題?實(shí)例publicclassTest1{publicstaticvoidmain(Stringargs[]){Managerx=newManager("ss",4000,"rr");}}上機(jī)作業(yè)定義一個形狀類CShape,在此基礎(chǔ)上派生出矩形類CRectangle和圓類CCircle,兩者都有GetArea()函數(shù)計算對象的面積。試編寫一個完整的程序。上機(jī)發(fā)現(xiàn)的問題

有則改之,無則加勉環(huán)境變量如何設(shè)置?文件保存為*.java編譯:javac*.java,編譯通過后顯示什么?運(yùn)行:javamain方法所在類名main方法寫在哪兒?importjava.io.*是什么?類圖CShape+GetArea():double+GetArea():doubleCRectangle+x:double+y:double+GetArea():doubleCCircle+r:double課時六

2009-9-21變量多態(tài)類型為X的參考變量,其指向的對象類型既可以是X,也可以是X的子類如:Employeex=newManager();Employeey=newEmployee();例1——實(shí)例方法能夠被覆蓋classSuper{Stringname(){return“mother";}}classSubextendsSuper{Stringname(){return“baby";}}

例1——實(shí)例方法能夠被覆蓋classTest{publicstaticvoidmain(String[]args){Supers=newSub();System.out.println(());}}例2——靜態(tài)方法不能被覆蓋classSuper{staticStringname(){return“mother";}}classSubextendsSuper{staticStringname(){return“baby";}}例2——靜態(tài)方法不能被覆蓋classTest{publicstaticvoidmain(String[]args){Supers=newSub();System.out.println(());}}原因靜態(tài)方法在編譯時根據(jù)調(diào)用該方法的類或?qū)ο笏鶎俚念悰Q定實(shí)例方法在運(yùn)行時根據(jù)對象所屬的類決定例如:Supers=newSub();編譯時s是Super類的對象,而運(yùn)行時s指向Sub類的對象例3——屬性的隱藏classBase{intx=1;staticinty=2;}classSubclassextendsBase{intx=4;inty=5;}例3——屬性的隱藏publicclassTest{publicstaticvoidmain(String[]args){Subclasss=newSubclass();System.out.println(s.x+""+s.y);}}輸出什么?修改例3:例3’publicclassTest{publicstaticvoidmain(String[]args){Bases=newSubclass();System.out.println(s.x+""+s.y);}}輸出什么?原因:編譯時根據(jù)類或?qū)ο箢愋蜎Q定總結(jié)父類的實(shí)例方法被子類的同名實(shí)例方法覆蓋父類的靜態(tài)方法被子類的同名靜態(tài)方法隱藏父類的實(shí)例變量和類變量可以被子類的實(shí)例變量和類變量隱藏例4classBase{intx=1;staticinty=2;Stringname(){return"mother";}staticStringstaticname(){return"staticmother";}}classSubclassextendsBase{intx=4;inty=5;Stringname(){return"baby";}staticStringstaticname(){return"staticbaby";}}例4publicclassTest{publicstaticvoidmain(String[]args){Subclasss=newSubclass();System.out.println(s.x+""+s.y);System.out.println(());System.out.println(s.staticname());Basess=s;System.out.println(ss.x+""+ss.y);System.out.println(());System.out.println(ss.staticname());}}隱藏和覆蓋的區(qū)別將子類對象轉(zhuǎn)換為父類對象(直接賦值)后,可以訪問被隱藏的變量和方法(編譯時根據(jù)類型決定),但是不能訪問被覆蓋的變量和方法(運(yùn)行時根據(jù)類型決定)。instanceof操作符

修改例4可以根據(jù)對象所屬的類進(jìn)行不同的處理:

publicstaticvoidmain(String[]args){Basess=newSubclass();if(ssinstanceofSubclass){System.out.print(ss.x+""+ss.z);System.out.print(());System.out.print(ss.staticname());}}還存在問題?classBase{intx=1;staticinty=2;}classSubclassextendsBase{intx=4;inty=5;intz=9;}編譯出錯publicstaticvoidmain(String[]args){Basess=newSubclass();if(ssinstanceofSubclass){System.out.print(ss.z);}}解決方法——對象類型轉(zhuǎn)換publicstaticvoidmain(String[]args){Basess=newSubclass();if(ssinstanceofSubclass){System.out.print(((Subclass)ss).z);}}對象類型轉(zhuǎn)換

——對例2的修改classSuper{staticStringname(){return"mother";}}classSubextendsSuper{staticStringname(){return"baby";}}對象類型轉(zhuǎn)換

——對例2的修改classTest{publicstaticvoidmain(String[]args){Supers=newSub();System.out.println(((Sub)s).name());}}對象類型轉(zhuǎn)換

——對例3’的修改classBase{intx=1;staticinty=2;}classSubclassextendsBase{intx=4;inty=5;}對象類型轉(zhuǎn)換

——對例3’的修改publicclassTest{publicstaticvoidmain(String[]args){Bases=newSubclass();System.out.println(((Subclass)s).x+""+((Subclass)s).y);}}多態(tài)的應(yīng)用舉例——例5classAnimal{publicvoideat(){}}classDogextendsAnimal{publicvoideat(){System.out.println("狗吃骨頭");}}classCatextendsAnimal{publicvoideat(){System.out.println("貓吃老鼠");}}classWolfextendsAnimal{publicvoideat(){System.out.println("吃喜羊羊");}}多態(tài)的應(yīng)用舉例——例5classTest{publicstaticvoidmain(Stringargs[]){Animalaa[]=newAnimal[3];aa[0]=newDog();aa[1]=newCat();aa[2]=newWolf();for(inti=0;i<3;i++){aa[i].eat();}}}抽象類抽象類抽象類:只能被繼承,不能實(shí)例化的類。定義格式:abstractclass類名{abstract返回值類型

方法名([參數(shù)表]);…}說明:抽象類中可以包含抽象和非抽象方法,也可以不

溫馨提示

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

評論

0/150

提交評論