Java語言程序設計_第1頁
Java語言程序設計_第2頁
Java語言程序設計_第3頁
Java語言程序設計_第4頁
Java語言程序設計_第5頁
已閱讀5頁,還剩81頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Java語言簡介主要內容:Java是什么?Java的特點、Java開發(fā)環(huán)境Java是什么?Java是面向對象的程序設計語言。Java跨平臺,適合于網絡計算環(huán)境。是網絡上的世界語。Java是一種編程環(huán)境。Java是一種操作環(huán)境。Java語言在Java虛擬機(Javavirtualmachine)上運行,通過JVM,Java可以在不同的機器上運行,而不用重新編譯。*.java*.classJVMhostmachineJava與c++Java語言的基礎是c++,但除去了c++中容易出錯的部分。(全局變量、goto語句、指針、內存管理、對數據類型的支持……)成功的原因:1象用戶熟悉的其他一些語言C,C++,Smlltalk2Web,網絡編程語言,出現(xiàn)的恰到好處3免費獲得Java的特點簡單性面向對象分布性編譯和解釋性魯棒性安全性中性的體系結構可移植性高性能多線程性動態(tài)性Java開發(fā)環(huán)境JDK(JavaDevelopersKit,Java開發(fā)工具)1996年1月,Sun公司推出JDK1.0,它是命令行工具,包括:(1)javac:Java編譯器,其作用是生成包含字節(jié)碼的.class文件。(2)java:Java解釋器/虛擬機/字節(jié)碼解釋器/Java運行環(huán)境。(3)jdb:Java調試器。(4)javadoc:API文檔生成器,將Java源程序轉換成HTML文檔。(5)appletviewer:Applet小程序瀏覽器。(6)javah:頭文件生成器。(7)javap:Java反匯編器/Java字節(jié)碼反匯編器。JavaWorkShop它是基于Web的Java快速開發(fā)環(huán)境,可開發(fā)和發(fā)布Javaapplets和應用程序。它是由一套Java語言編寫的集成開發(fā)工具組成的。VisualCafe它是美國Symantec公司推出的可視化Java語言集成開發(fā)環(huán)境。可在該環(huán)境中完成Java語言程序的建立、調試、修改和運行等全過程,大大提高了Java語言程序的開發(fā)效率,縮短了開發(fā)周期。VisualJ++。它是Microsoft公司推出可視化Java語言集成開發(fā)環(huán)境。繼承了微軟公司集成開發(fā)環(huán)境(IDE)的一貫傳統(tǒng)。一個Java應用程序的例子例1.1:該程序的作用是輸出HelloWorld!//一個應用程序(application)publicclassHelloWorldApp{publicstaticvoidmain(Stringargs[]){System.out.println("HelloWorld!");}}運行該程序。首先把它放到一個名為HelloWorldApp.java的文件中,這里,文件名應和類名相同,然后對它進行編譯。具體操作如下:C>javacHelloWorldApp.java//編譯結果是生成字節(jié)碼文件HelloWorldApp.class。C>javaHelloWorldApp//用Java解釋器來運行該字節(jié)碼文件例1.2importjava.awt.*;importjava.applet.*;//一個Applet(小應用程序)publicclassHelloWorldAppletextendsApplet{publicvoidpaint(Graphicsg){g.drawString("HelloWorld!",20,20);}}運行該程序,首先把它放在文件HelloWorldApplet.java中,然后對它進行編譯:C>javacHelloWorldApplet.java編譯的結果是得到字節(jié)碼文件HelloWorldApplet.class。它的HTML文件如下:<HTML><HEAD><TITLE>AnApplet</TITLE></HEAD><BODY><appletcode="HelloWorldApplet.class"width=200height=40></applet></BODY></HTML>把這個HTML文件存入Example.html,然后運行:C>appleviewerExample.html這時屏幕上彈出一個窗口,其中顯示HelloWorld!第二章數據類型主要內容:Java語言標識符、關鍵字、注釋、數據類型Java語言標識符標識符是一個唯一標識一個變量,方法和類的名字。Unicode編碼字符集Java語言使用Unicode字符集,共包含65535個字符。每個字符用2個字節(jié),即16位來表示。Unicode只用在Java平臺內部。標識符的命名以字母、下劃線或美元符“$”開始的,并包含這些字符和數字的字符序列。標識符是大小寫相關的,且可以任意長,但長度要合適。關鍵字不能作標識符。避免用下劃線或美元符“$”開頭。否則,在向程序中導入C語言程序庫時可能會造成名字沖突和混亂。為使標識符具有較好的可讀性,應遵守一定的命名規(guī)范:標識符類型常規(guī)示例類每個單詞的首字母都大寫Mammal,SeaMammal函數第一個字母小寫,其它單詞的首字母大寫getAge變量第一個字母小寫,其它單詞的首字母大寫brainSize常量所有字母大小,單詞之間使用下劃線分開MAX_HEIGHTJava語言關鍵字關鍵字是預定義的標識符,它對于Java語言編譯器有特殊意義,不能重新定義。Java語言的關鍵字abstractbooleanbreakbytecasecatchcharclasscontinuedefaultdodoubleelseextendsfalsefinalfinallyfloatforifimplementsimportinstanceofintinterfacelongnativenewnullpackageprivateprotectedpublicreturnshortstaticsuperswitchsynchronizedthisthrowstransienttruetryvoidvolatilewhile分類數據聲明關鍵字(boolean,float,int)循環(huán)關鍵字(continue,while,for)條件關鍵字(if,else,switch)異常關鍵字(try,throws,catch)結構關鍵字(class,extends,implements)修飾符和訪問關鍵字(private,public,transient)其它關鍵字(true,null,super)注釋語句(1)Java語言中的三種注釋方式://用于單行注釋。注釋從∥開始,終止于行尾。/*…*/用于多行注釋。這種注釋不能互相嵌套。/**…*/是Java語言所特有的doc注釋。通常用在創(chuàng)建web頁面的HTML文件中。主要是為支持JDK工具Javadoc而采用的。(2)程序段數據類型(1)整型數據byte、short、int、long整型常量①十進制整數。例如123,-456,0②八進制整數,以0開頭。③十六進制整數,以0x或0X開頭。例如:0123表示十進制數83,-011表示十進制數-9,0x123表示十進制數291,-0X12表示十進制數-18。對于long型值,則要在數字后加L或l,如123L表示一個長整數。整型變量數據長度整數類型表示范圍8位byte-27——27-116位short-215——215-132位int-231——231-164位long-263——263-1整型變量的聲明,例如:byteb;//聲明變量b為byte型(2)浮點型(實型)數據float、doubledouble比float具有更高的精度和更大表示范圍,常常使用。實型常量①十進制數形式:由數字和小數點組成,且必須有小數點。如0.123,.123,123.,123.0②科學計數法形式:如:123e3或123E3,其中e或E之前必須有數,且e或E后面的指數必須為整數。實型變量數據長度整數類型表示范圍32float3.4e-038~3.4e+03864double1.7e-308~1.7e+308(3)字符型數據char、String字符常量用單引號括起來的一個字符。Java也提供轉義字符,以\開頭,將其后的字符轉變?yōu)榱硗獾暮x。Java語言中的字符型數據是16位無符號型數據,它表示Unicode集,而不僅僅是ASCII集。Java語言中的轉義字符:\'\\\r\n\f\t\b\ddd\uxxxx例如:\071是ASCII碼為八進制數71(十進制數57)的字符。\u0041是Unicode碼為十六進制數41(十進制數65)的字符。字符型變量類型為char,在機器中占16位,其范圍為0~65535。與C++不同,Java語言中的字符型數據不能用作整數。如:Intthree=3;charone='1';charfour=(char)(three+one);//four='4'字符串常量用雙引號(“”)括起來的一串字符。Java語言中的字符串常量是作為String類的一個對象來處理,而不是一個數據。(4)布爾型數據布爾型數據只有兩個值,true和false,且它們不對應于任何整數值。在流程控制中常用到它。沒有初始化的布爾型變量自動設定為false。常量和變量與C、C++不同,Java語言中不能通過#define命令把一個標識符定義為常量,而是用關鍵字final來實現(xiàn),如:finaldoublePI=3.14159。Java語言中的變量必須遵循“先定義,后使用”的原則,即變量必須先聲名,再使用。Java語言程序中常常需要對一些變量預先設置初值。Java語言規(guī)定,可以在定義變量的同時對變量進行初始化。除了基本的數據類型外,Java語言變量的數據類型也可以是一個內置或用戶自定義的類,還可以是一個數組。一些Java語言數據類型的示例:floatx;//float是一個基本數據類型Floatx;//Float是一個內置類Marqueex;//Marquee是一個用戶自定義的類String[]x;//String[]是一個String數組例2.1publicclassSimpleTypes{publicstaticvoidmain(Stringargs[]){byteb=0x55;shorts=0x55ff;inti=1000000;longl=0xfffL;charc='c';floatf=0.23F;doubled=0.7E-3;booleanbool=true;System.out.println("b="+b);System.out.println("s="+s);System.out.println("i="+i);System.out.println("l="+l);System.out.println("c="+c);System.out.println("f="+f);System.out.println("d="+d);System.out.println("bool="+bool);}}編譯并運行該程序,輸出結果為:C>javaSimpleTypesb=85s=22015i=1000000l=4095c=cf=0.23d=0.0007bool=true各類數值型數據間的混合運算(1)自動類型轉換整型、實型、字符型數據可以混合運算。運算中,不同類型的數據先轉化為同一類型,然后進行運算。轉換從低級到高級,轉換規(guī)則如下:(byte或short)opint→int(byte或short或int)oplong→long(byte或short或int或long)opfloat→float(byte或short或int或long或float)opdouble→doublecharopint→int例2.2publicclassPromotion{publicstaticvoidmain(Stringargs[]){byteb=10;charc='a';inti=90;longl=555L;floatf=3.5f;doubled=1.234;floatf1=f*b;//float*byte——>floatinti1=c+i;//char+int——>intlongl1=l+i1;//long+int——>longdoubled1=f1/i1-d;//float/int——>float//float-double——>double}}(2)強制類型轉換高級數據要轉換成低級數據,需用到強制類型轉換,如:inti;byteb=(byte)i;//把int型變量i強制轉換為byte型intk;floaty=5.5;k=(int)y;第三章運算符主要內容:算術運算符、關系運算符、布爾邏輯運算符、位運算符、賦值運算符及條件運算符運算符和優(yōu)先級按操作數的數目來分,分為一元,二元和三元運算符。按照運算符功能來分,基本的運算符有下面幾類:(1)算術運算符(+,-,*,/,%,++,--)(2)關系運算符(>,<,>=,<=,==,!=)(3)布爾邏輯運算符(!,&&,||)(4)位運算符(>>,<<,>>>,&,|,^,~)(5)賦值運算符(=,及其擴展賦值運算符,例如+=)(6)條件運算符(?:)(7)其它(包括分量運算符·、下標運算符[]、實例運算符instanceof、內存分配運算符new、強制類型轉換運算符(類型)、方法調用運算符()等。)優(yōu)先級算術運算符算術運算符作用于整型或浮點型數據,用于完成算術運算。(1)一元算術運算符++op//正值--op//負值++++op,op++//加1----op,op--//減1(2)二元算術運算符[注]op1,op2分別表示兩個操作數(整型或浮點型數據)。+op1+op2加-op1-op2減*op1*op2乘/op1/op2除%op1%op2取模(求余)例3.1說明算術運算符的使用publicclassArithmaticOp{publicstaticvoidmain(Stringargs[]){inta=5+4;//a=9intb=a*2;//b=18intc=b/4;//c=4intd=b-c;//d=14inte=-d;//e=-14intf=e%4;//f=-2doubleg=18.4;doubleh=g%4;//h=2.4inti=3;intj=i++;//i=4,j=3intk=++i;//i=5,k=5System.out.println("a="+a);……System.out.println("k="+k);}}其結果為:C>javaArithmaticOpa=9,b=18,c=4,d=14,e=-14,f=-2,g=18.4,h=2.4,i=5,j=3,k=5關系運算符(二元運算符)用來比較兩個值,返回的值是布爾類型true或false。關系運算符及返回true的情況:>op1>op2//op1大于op2>=op1>=op2//op1大于或等于op2<op1<op2//op1小于op2<=op1<=op2//op1小于或等于op2==op1==op2//op1與op2相等!=op1!=op2//op1與op2不等Java語言中,任何數據類型的數據都可以通過==或!=來比較是否相等。關系運算符(==)可以比較兩個相同類型的變量。如果是對象,就只有在兩個變量指向同一個對象時,比較的結果才會是真。舉例m1=newMammal();m2=newMammal();booleanb1=m1==m2;//b1=falsem1=m2;booleanb2=m1==m2;//b2=true大多數時候,可以使用equals()方法來比較對象。這個方法是在Object中定義的,但是必須要在Object的子類中實現(xiàn),才能用來比較對象。布爾邏輯運算符布爾邏輯運算符有一元(?。┖投\算符(&&、||)。布爾邏輯運算如下所示:op1op2op1&&op2op1||op2!op1falsefalsefalsefalsetruefalsetruefalsetruetruetruefalsefalsetruefalsetruetruetruetruefalse對于布爾邏輯運算,一般是先求出運算符左邊的表達式的值,對或運算,如果為true,則整個表達式的結果為true,不必對運算符右邊的表達式再進行運算;同樣,對與運算,如果左邊表達式的值為false,則不必對右邊的表達式求值,整個表達式的結果為false。位運算符位運算符用來對二進制位進行操作,位運算的操作數只能是整型和字符型數據。Java語言中提供了如下位運算符:~//非(位求補)<<,>>//左移,右移>>>//無符號右移(C,C++無)&//位與^//位異或|//位或例如:shorti=13;//i=0000000000001101i=i<<2;//i=0000000000110100i=i>>3;//i=0000000000000110賦值運算符賦值運算符就是一個等號,用來為變量賦值。其左邊必須是一個變量,不能是其它內容。例如:a=5;或a=b+c*5;擴展賦值運算符,即先進行某種運算,然后再用運算的結果進行賦值。具體包括:+=,-=,*=,%=,&=,|=,^=,<<=,>>=,>>>=。條件運算符(?:)?:是三元運算符,其語法是:expression1?expression2:expression3;例如:intx=5,y=4,max;max=(x>y)?x:y;其它操作符“()”用于實現(xiàn)強制類型轉換,其功能是將一表達式的類型強制轉換為某一指定類型。它的一般格式為:(type)express例如:Floatx;(double)x/100;Java語言規(guī)定,強制類型轉換只能在數字型數據間進行。操作符“[]”是數組運算符,用它來指定數組的下標,引用數組元素。例如S[3]表示數組S的下標為3的元素。操作符“”是引用對象成員。例如://引用對象的變量,即要訪問對象的某個變量objectReference.variable//調用對象的方法,即要調用對象的某個方法objectReference.MethodName([paramlist)操作符“instanceof”是比較對象的類型。第四章控制流主要內容:順序語句分支語句(if-else,break,switch,return)、循環(huán)語句(while,do-while,for,continue)分支語句分支語句提供了一種控制機制,使程序的執(zhí)行跳過某些語句不執(zhí)行,而轉去執(zhí)行特定的語句。條件語句if-else格式1:if(expression)statement1;[elsestatement2;]格式2:if(expression1){statement1;}elseif(expression2){statement2;}……elseif(expressionM){statementM;}else{statementN;}說明:邏輯表達式的值必須是布爾類型。每個單一的語句后都必須有分號。當statementi為復合語句時,要用大括號{}括起。建議對單一的語句也用{}括起,這樣可增強程序的可讀性,且利于程序的擴充。{}外面不加分號。(2)多分支語句switchswitch根據表達式的值來執(zhí)行多個操作中的一個。格式如下:switch(expression){casevalue1:statement1;break;casevalue2:statement2;break;…………casevalueN:statementN;break;[default:defaultStatement;]}說明:expression的值只能是整型或字符型。case子句中的值valuei必須是常量,具有和expression相同的數據類型,且所有case子句中的值是不同的。break用來在執(zhí)行完一個case后,使程序跳出switch語句。case分支中包括多個執(zhí)行語句時,可以不用{}括起。switch的功能可用if-else實現(xiàn)。在某些情況下,switch更簡煉,可讀性強,且程序的執(zhí)行效率高。例如:switch(month){case1:System.out.println("January");break;case2:System.out.println("February");break;……case12:System.out.println("December");break;}用if語句來實現(xiàn)如下所示:if(month==1)System.out.println("January");elseif(month==2)System.out.println("February");……elseif(month==12)System.out.println("December");在特殊情況下,多個不同的case值要執(zhí)行一組相同的操作,這時可不用break。例如計算每月有多少天的例子。intdaysNumswitch(month){case1:case3:case5:case7:case8:case10:case12:daysNum=31;break;case4:case6:case9:case11:daysNum=30;break;case2:if((year%4)==0&&(year%100)!=0)daysNum=29;elsedaysNum=28;break;}循環(huán)語句一個循環(huán)一般應包括四部分內容:初始化部分(initialization)循環(huán)體部分(body)迭代部分(iteration)終止部分(termination)(1)while語句while語句實現(xiàn)“當型”循環(huán),它的一般格式為:[initialization]while(termination){body;[iteration;]}(2)do-while語句實現(xiàn)“直到型”循環(huán)。一般格式為:[initialization]do{body;[iteration;]}while(termination);說明:首先執(zhí)行循環(huán)體,然后計算終止條件,若結果為true,則循環(huán)執(zhí)行大括號中的語句,直到布爾表達式的結果為false。與while語句不同的,do-while語句的循環(huán)體至少執(zhí)行一次。例:用do-while語句求階乘i=1;sum=1;do{sum=sum*i;i++;}while(i<=100);system.out.println(sum);(3)for語句for語句也用來實現(xiàn)“當型”循環(huán),它的一般格式為:for(initialization;termination;iteration){body;}說明:可在for語句的初始化部分聲明一個變量,它的作用域為整個for語句。for語句常用來循環(huán)次數確定的情況(如對數組元素操作)。在初始化部分和迭代部分可用逗號語句進行多個操作。逗號語句是用逗號分隔的語句序列。例如:for(i=0,j=10;i<j;i++,j--){……}初始化、終止以及迭代部分都可以為空語句(但分號不能丟),三者均為空時,相當于一個無限循環(huán)。和其它循環(huán)相比,for循環(huán)是唯一能夠減少代碼行數,提高循環(huán)效率的途徑。例:intx=1,z=0;while(x<=20){z+=x;x++;}相應的for循環(huán)是:intz=0;for(intx=1;x<=20;x++){z+=x;}break、return、continue語句break語句break語句總是和switch、for、while、do-while語句一起使用。break的作用是直接中斷當前正執(zhí)行的語句,跳出switch或循環(huán)語句。在switch語句中,break用來終止switch的執(zhí)行,使程序從switch語句后的第一個語句開始執(zhí)行。在循環(huán)中,break語句用來終止當前循環(huán)體語句的執(zhí)行,使程序轉移到下一個語句。例如:intx=0;while(x<10){System.out.println("Loopingx="+x);x++;if(x==5)break;else//dosomethingelse}在多重循環(huán)中,不帶標號的break語句將只退出它所在的內循環(huán)。例:for(inti=0;i<200;i++){for(intj=0;j<10;j++){j+=2;if(i<20)break;}system.out.println(i);}對于帶標號的break語句,其格式為:breakBlockLabel;例如:

i=5;outer:whilei>0{for(intj=0;j<10;j++){if(j>i)breakouter;}}……Java語言用break來實現(xiàn)goto語句所特有的一些優(yōu)點。如果break語句后所指定的標號是一個語句的標號,這時break完全實現(xiàn)goto功能。return語句從當前方法中退出,返回到調用該方法的語句處,繼續(xù)程序的執(zhí)行。return語句有兩種格式:格式1:returnexpression//返回一個值給調用該方法的語句,返回值的數據類型,必須與方法聲明中的返回值類型一致??墒褂脧娭祁愋娃D換。格式2:return//當方法說明用void聲明時,返回類型為空,該格式不返回任何值。一般通過把return語句嵌入某些語句中(如if-else),來使程序在未執(zhí)行完方法中的所有語句時退出,例如:intmethod(intnum){if(num>0)returnnum;……∥mayormaynotbeexecuted∥dependingonthevalueofnum}continue語句該語句用來結束本次循環(huán),跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行終止條件的判斷,以決定是否繼續(xù)循環(huán)。對于for語句,在進行終止條件判斷前,還要先執(zhí)行迭代語句。有兩種格式:格式1:continue;格式2:continueouterLable;例:outer:for(inti=0;i<10;i++){for(intj=0;j<20;j++){if(j>i){……continueouter;}……}……}異常處理語句try、catch、finally以及throw語句

第五章數組主要內容:一維數組和多維數組的有關概念和使用方法5.1數組1.數組是相同類型的元素按順序組成的一種復合數據類型。2.數組作為一種特殊的數據類型,具有以下特點:數組中的所有元素是同一類型數組中的元素是有順序的數組中的元素通過數組名和下標來確定tempvijkperson3.Java中,只有定義數組并建立數組后,數組才能被訪問。4.在建立數組時,Java會使每個數組元素初始化為默認值0。5.若不希望數組的初值為默認值,則要將數組初始化。6.Java并不支持多維數組。對多維數組的定義是通過對一維數組的嵌套式定義來實現(xiàn)的。7.在Java中,所有數組的起始下標都是0。5.2一維數組1.定義一維數組(聲名)格式:typearrayName[];說明:type為Java中任意的數據類型(簡單類型或組合類型)arrayName為一個合法的標識符;[]指明是一數組類型變量。例如:intintArray[];堆棧內存區(qū)堆內存區(qū)nullnullintArrayintArray|

2.建立一維數組格式:arrayName=newtype[arraySize];說明:arraySize指明數組的長度。例如:intArray=newint[3];//為一個整型數組分配3個int型整數所占據的內存空間。堆棧內存區(qū)堆內存區(qū)intArrayintArray.lengthintArrayintArray.lengthintArray[0]intArray[1]intArray[2]33通常,可以將數組的定義和建立合在一起,格式如下:typearrayName=newtype[arraySize];例如:intintArray=newint[3];等價于下面的語句,intintArray[];intArray=newint[3];3.初始化一維數組方法1:在定義數組的同時對數組初始化。例:intintArray[]={2,4,6}//系統(tǒng)自動為數組元素分配內存空間方法2:在定義數組并建立數組后,對數組初始化。例:intArray[0]=2;intArray[1]=4;intArray[2]=6;3.數組元素的引用格式:arrayName[index]說明:index可以是整型常數或表達式。如a[3],c[6*i](i為整型)。下標從0開始,一直到數組的長度減1。如果下標index超出了數組大小的范圍,會產生ArrayIndexOutOfBoundException異常。與C、C++中不同,Java語言對數組元素要進行越界檢查以保證安全性。同時,對于每個數組都有一個屬性length指明它的長度,例如:intArray.length指明數組intArray的長度。例5.1:對數組中的每個元素賦值,然后按逆序輸出。publicclassArrayTest{publicstaticvoidmain(Stringargs[]){inti;inta[]=newint[5];for(i=0;i<5;i++)a[i]=i;for(i=a.length-1;i>=0;i--)System.out.println("a["+i+"]="+a[i]);}}4.數組間的復制Java語言的數組是作為對象來看待,通過引用來操作的。將數組傳遞到方法中時,只傳遞數組的引用,而不是這個數組元素。一個數組變量只是生成了一個存放數組的存儲位置,而未分配數組元素占用的實際內存空間。由于數組是對象,將一個數據變量賦值給另一個數組變量時,只是復制數組的引用。例:intinta[]=intArray;執(zhí)行完該語句后,內存空間為:堆棧內存區(qū)堆內存區(qū)intArrayintArrayintaintArray.lengthintArray[0]intArray[1]intArray[2]3246(5)數組拷貝的另一種方法是采用java.lang.System類中的arraycopy()方法。格式:viodarraycopy(ObjectsourceArray,intsourceArray,ObjectdestinationArray,intdestinationArrayStartPosition,intnumberOfElementsToCopied);說明:從源數組的給定位置,拷貝一定長度的子串到目標數組的給定位置。若拷貝過程中涉及了數組邊界之外的數據,則拋出異常ArrayIndexOutOfBoundsException;若源數組數據由于類型不匹配而無法拷貝到目標數組,則拋出異常ArrayStoreException。在調用arraycopy方法之前,必須先分配目標數組所用的存儲空間。例:intintArray[]={2,4,6};inta[]={1,2,3,4,5};System.arraycopy(intArray,0,a,0,intArray.length);堆棧內存區(qū)堆內存區(qū)intArrayintArrayintArray.lengthintArray[0]intArray[1]intArray[2]aa.lengtha[0]a[1]a[2]a[3]a[4]3246524645|5.3多維數組與C、C++一樣,Java語言中多維數組被看作數組的數組。例如二維數組是一個特殊的一維數組,其每個元素又是一個一維數組。1.二維數組的定義格式:typearrayName[][];例:intintArray[][];2.分配內存空間方法1:直接為每一維分配空間例:inta[][]=newint[2][3];方法2:從最高維開始,分別為每一維分配空間例:inta[][]=newint[2][];a[0]=newint[3];a[1]=newint[3];說明:與C、C++不同,Java在定義和建立多維數組時,不一定要指明每一維的長度。建立數組時,數組最前面的1維或n維必須指定元素個數,只有后面的方括號中可以不指定元素個數。例:inta[][][]=newint[8][][];堆棧內存區(qū)堆內存區(qū)aalengtha[0]a[1]lengtha[0][0]a[0][1]a[0][2]lengtha[1][0]a[1][1]a[1][2]2233|333.二維數組元素的引用格式:arrayName[index1][index2]其中index1、index2可為整型常數或表達式。4.二維數組的初始化方法1:直接對每個元素進行賦值。方法2:在定義數組的同時進行初始化。例:inta[][]={{2,3,5},{1,3,4}};該句定義了一個2×3的數組,并對每個元素賦值。Java字符數組的定義和使用方法與上述內容完全一樣。例:兩個矩陣Am×n、Bn×l相乘得到Cm×l,每個元素Cij=aik*bkjpublicclassMatrixMultiply{publicstaticvoidmain(Stringargs[]){inti,j,k;inta[][]=newint[2][3];intb[][]={{1,5,2,8},{5,9,10,-3},{2,7,-5,-18}};intc[][]=newint[2][4];for(i=0;i<2;i++)for(j=0;j<3;j++)a[i][j]=(i+1)*(j+2);for(i=0;i<2;i++){for(j=0;j<4;j++){c[i][j]=0;for(k=0;k<3;k++)c[i][j]+=a[i][k]*b[k][j];}}第六章面向對象程序設計主要內容:面向對象程序設計的基本概念、Java語言中的類、對象、包、接口和修飾符。6.1面向對象程序設計的發(fā)展Simula67并發(fā)Pascal、Ada和Modula-2Smalltalk-72、Smalltalk80C++、ObjectPasal、Delphi、Java它與傳統(tǒng)的、結構化的程序設計的主要區(qū)別:它將數據和對數據的操作放到了一個數據結構中。后者則將數據和對數據的操作分開,需要向過程和函數傳遞數據結構以便操作它們。它是按照現(xiàn)實世界的特點來管理復雜的事物,把它們抽象為對象,具有自己的狀態(tài)和行為,通過對消息的反應來完成一定的任務。6.2面向對象方法的主要概念1.對象對象是對現(xiàn)實世界中事物的一個抽象表示。一個對象就是變量和相關方法的集合,其中變量表明對象的狀態(tài),方法表明對象所具有的行為。具有靜態(tài)特征和動態(tài)特征。即:屬性(成員變量):描述對象靜態(tài)特征的一個數據項。方法(服務、成員函數):描述對象動態(tài)特征(行為)的一個操作序列。對象的屬性域可以是簡單類型數據,也可以是另一個對象。所有對象屬性可以是簡單類型的數據,也可以是對象引用。2.類類是抽象思想的運用。其內部包括屬性和方法兩個主要部分。類的作用是定義對象,類稱為對象的模板(template)。一個對象又稱作類的一個實例(instance)。類與對象的關系,類似于非面向對象語言中類型(type)和變量(varible)。類型用于定義數據,類用于定義對象。類是一個類型定義,對象是一個變量聲明。一旦建立了類,就可以基于類創(chuàng)建對象。實例化對象/創(chuàng)建類實例(由類創(chuàng)建對象)。通過類的定義可以實現(xiàn)代碼的復用。3封裝封裝是指把對象的屬性和方法結合成一個獨立的系統(tǒng)單位,盡可能隱蔽對象的內部細節(jié),只保留有限的對外接口使之與外部發(fā)生聯(lián)系。其思想是將對象內部的信息屏蔽,人們只能通過對象界面上的允許操作對對象進行動作,改變對象的屬性及狀態(tài)。通過對對象的封裝,實現(xiàn)了模塊化和信息隱藏,有利于程序的可移植性和安全性,同時也利于對復雜對象的管理。4繼承繼承本身就是軟件復用。也是可復用性、可擴充性的體現(xiàn)。特殊類的對象擁有其一般類的全部屬性與方法,這稱作特殊類對一般類的繼承。通過父類和子類,實現(xiàn)了類的的層次,可以從最一般的類開始,逐步特殊化,定義一系列的子類。一個類可以是多個一般類的特殊類,它可從多個一般類中繼承屬性和方法,這種繼承模式叫作多重繼承。Java語言只支持單一繼承,大大降低了復雜度。在Java語言中通過接口可以實現(xiàn)多重繼承。接口不僅限于繼承,它可以使多個不相關的類具有相同的方法。5.消息在面向對象的系統(tǒng)中,對象間的相互作用是通過消息傳送進行。消息就是向對象發(fā)出的服務請求,含有下述信息:提供服務的對象標識、服務標識、輸入信息和回答信息。一個消息包含三個方面的內容:(1)消息的接收者。(2)接收對象應采用的方法。(3)方法所需要的參數。6.多態(tài)性特殊類繼承一般類中定義的屬性或方法后,可以具有不同的數據類型或表現(xiàn)出不同的行為。即,對父類的方法重寫或重新定義實現(xiàn)多態(tài)。使用同名方法所在類的類名來區(qū)分。例:父類Bank中定義方法setRate(),調用時使用Bank.setRate();子類BankAccount中定義了方法setRate(),調用時使用BankAccount.setRate();在同一類中定義多個同名的不同方法。這種多態(tài)稱“重載”。例:同一類Bank中定義了方法:voidsetRate();和voidsetRate(floatrate);則調用時會有兩種情況:(1)Bank.setRate();(2)Bank.setRate(0.225);總結:(1)對象作為事物的抽象表示。(2)事物的靜態(tài)特征用對象的屬性表示,即用一些數據來表達的特征。動態(tài)特征用方法表示。(3)封裝性,把對象的屬性和方法結合成一個獨立的系統(tǒng)單位。(4)分類,具有相同屬性和方法的對象歸為一類。(5)抽象原則,忽略部分差異,得到類、子類,即繼承。(6)消息,對象之間通過消息進行通信。6.3Java的類類是組成Java語言程序的基本要素。它封裝了一類對象的屬性和方法,是這一類對象的原型。一個類的實現(xiàn)包含兩部分的內容:類的說明{類體}1.類聲明(1)一個最簡單的類聲明如下:classclassName{……}(2)類聲明的格式:[modifiers]classClassName[extendsSuperClassName][implementsInterfaceList]其中:modifiers指類的特性。public\private\abstract\finalextends指明此類的父類,SuperClassName是父類名。implements指出本類調用的接口,InterfaceList是一個由逗號隔開的接口名字的表。(3)類體類體是類的主體內容。定義了該類所有的變量和該類所支持的方法。類體包括兩部分內容:變量說明和方法。類的成員變量須在類體中定義,但不能包含在某個方法中。通常變量在方法前定義,Java中沒有獨立的函數和過程,所有的子程序都是作為類方法定義的。如下所示:classclassName{memberVariableDeclarationsmethodDeclarations}例6.1.定義了一個Point類,且聲明了它的兩個變量x、y同時實現(xiàn)init()方法對x、y賦初值。classPonit{intx,y;voidinit(intix,intiy){x=ix;y=iy;}}類中所定義的變量和方法都是類的成員。對類的成員能以一定訪問權限,來限定其它對象對它的訪問。訪問權限有以下幾種:private,protected,public,friendly。同時,對類的成員來說,又可以分為實例成員和類成員兩種。(4)成員變量成員變量的格式:[variableModifier]typevariableName;例:finaldoublePI=3.1415927;staticStringBufferrecentName;//靜態(tài)的成員變量Stringn-name;//非靜態(tài)的成員變量成員變量的類型可以是Java語言中的任意數據類型,包括簡單類型、數組、類和接口。在一個類中,成員變量應該是唯一的,但是成員變量的名字可以和類中某個方法的名字相同。類的成員變量和在方法中所聲明的局部變量是不同的,成員變量的作用域是整個類,而局部變量的作用域只是方法內部。對一個成員變量,可以限定它的訪問權限(見6.8節(jié));可以用static限定它為類變量(見6.5節(jié));可以用修飾符來限定。例如修飾符final。Java的類、變量和方法均可帶有final修飾符。(2)方法方法的結構[modifiers]typemethodName(para1,para2,…){methodBody}其中,modifiers表示訪問權限。Public,private,protected,privateprotected。若方法是默認型方法,則它可以被同一包中的類訪問。type是返回參數類型。若無返回參數,則寫成void。入口參數的個數和類型在圓括號中表示出來。方法的調用調用格式:Object.methodName(para1,para2,…);有關方法的幾點說明:調用方法的入口參數的個數和類型必須與方法中定義的參數的個數和類型相同。在一個類中,允許幾個方法用同一個名字。但要求:這些方法的返回值必須是相同的數據類型,且它們的參數必須不同。this和super在方法中的作用兩者用在方法體中作為特殊的變量前綴和方法前綴。this用來指明當前對象的成員變量或方法,以區(qū)別同名的局部變量和其他同名的方法。super用于指出父類的變量和方法。在子類中,當需要調用父類的同名方法或使用父類的同名變量時,可用關鍵字super作前綴指明父類的成員變量和方法。例1:classThreeColor{inth,s,b;ThreeColor(inth,ints,intb){this.h=h;this.s=h;this.b=b;}}例2:classSuperCa{intx;SuperCa(){X=5;System.out.println(“SuperCax=”+x);}voiddoCa(){System.out.println(“SuperCa.doCa()”);}}classSubCaextendsSuperCa{intx;SubCa(){Super();//調用父類的構造方法X=8;System.out.println(“SubCax=”+x);}voiddoCa(){super.doCa();//調用父類的方法System.out.println(“inSubCa.doCa()”);System.out.println(“super.x=”+super.x);}}(3)多態(tài)Java語言通過方法重寫和方法重載來實現(xiàn)多態(tài)。方法重載,在Java類中可創(chuàng)建名字相同,但參數和返回值不同的幾個方法。Java系統(tǒng)通過參數和返回值來分辨具體是哪一個方法。方法重寫,子類可以重新實現(xiàn)父類的某些方法,使其具有自己的特征。(4)構造方法每個類都包括一個特殊用途的方法,即構造方法(constructor)。它和類名永遠相同,且無返回值。用new建立對象就是在調用構造函數。建完之后,類的成員變量和方法就可以用“.”來訪問。Java中的每個類都有構造方法,用來初始化該類的一個新的對象。即,為對象分配資源,并返回對象的一個實例。在構造方法的實現(xiàn)中,可進行方法重寫。Java語言支持方法重載,所以類可有多個共享同一個名字的構造方法,可以通過參數的類型和數目區(qū)分。構造方法使用它的參數初始化新對象的狀態(tài),當創(chuàng)建對象時,應該選擇其參數最能反映所初始化的新對象的構造方法。例6.4classpoint{intx,y;point(){x=0;y=0;}point(intx,inty){this.x=x;this.y=y;}}用構造方法進行初始化,可避免在生成對象后,每次都要調用對象的初始化方法。若無實現(xiàn)類的構造方法,Java運行時系統(tǒng)會自動提供缺省的構造方法,它沒有任何參數。例在構造方法中用this和super調用其他構造方法classBeeextendsQueen{inta;Bee(inta){this.a=a}Bee(){this(25);}}classBeeextendsQueen{intb;Bee(intb){super(16);this.b=b;}調用構造方法遵循的規(guī)則:從一個類創(chuàng)建對象,可以調用此類的父類的構造方法.一個構造方法用this語句調用本類的另一個構造方法時,若被調用的構造方法又是調用父類的構造方法而沒用super語句,則編譯器自動認為它含有super()語句.若某個類的構造方法第一個語句是:用this來調用本類的另一個構造方法,則Java系統(tǒng),就不再默認該構造方法調用的是父類的構造方法。若某個類的構造方法第一個語句沒有用super,來調用其父類的構造方法,則編譯器也默認為在構造方法中,用super()語句調用父類的不帶參數的構造方法。例:publicclassFirst{inta;publicFirst(){a=12;}}publicclassSecondextendsFirst{intx,y;publicSecond(intx,inty){this.x=x;this.y=y;}publicSecond(){this(2,6);……}……}(5)方法finalize()用來釋放構造函數分配的資源。有時在類不再有用之后,有些無用單元收集機制不能處理的資源需要特殊清理。方法finalize()在類java.lang.Object中實現(xiàn)。不能將時間相關的代碼加入finalize。(6)方法main()Java的每個應用程序一定包含main()。Java解釋器運行字節(jié)碼文件時,首先尋找main(),以此作為程序的入口開始運行。當main()結束時(語句塊的結束或用System.exit語句),程序也運行結束。main()沒有返回參數,其入口參數就是應用程序運行時命令行給出的參數。6.4繼承預先定義一個包含公用變量和公用方法的類作為父類,在此基礎上創(chuàng)建具有專用變量和專用方法的子類。子類將自動繼承父類的所有特性(成員變量)和行為(方法)。此外,子類可以增加父類中沒有的變量和方法,也可以再定義父類中已有的變量和方法。父類中除專用型變量/方法不能被子類調用外,其他均可由子類調用。繼承只能是增加行為和屬性,子類不可能比父類具有更少的行為和屬性。變量隱藏。子類繼承父類中,若子類的成員變量與父類的同名,稱子類隱藏了父類的成員變量。此時,子類使用的是它自己的變量。若要調用父類的變量,必須用關鍵字super。方法置換Java的繼承機制使用extends使用this和super(super()、this()、)例:MammalClass具有DogClass和ManClass的共同特性。packageOOP1;publicclassMammalClass{Stringname,eyeColor;intage;publicMammalClass(){name="TheName";eyeColor="Black";age=0;}}例:重寫DogClass和ManClass,來說明利用繼承的好處:packageOOP1;publicclassDogClassextendsMammalClass{booleanhasTail;publicDogClass(){name="Chase";eyeColor="Black";age=2;hasTail=true;}packageOOP1;publicclassManClassextendsMamalClass{booleanisMarried;publicManClass(){Name="Casey";eyeColor="Blue";age=1;isMarried=true;}}例:publicclassA{intx;voidboy(){System.out.printin(“100”);}}publicclassBextendsA{intx;voidboy(){super.boy();System.out.printin(“200”);}voidtype(){x=super.x–2;//也可寫成this.x=super.x–2;System.out.printin(“inClassA,x=”+super.x);System.out.printin(“inClassB,x=”+this.x);}}6.5Java的對象1.對象的生成(創(chuàng)建)包括聲明、建立和初始化三方面的內容。(1)對象的聲明(定義)格式:typeobjectName,說明:type為類名,指出對象所屬的類例如:PointmyObject;(2)對象的建立(將類進行實例化)通過new調用對應類的構造方法,來完成內存分配,返回對該對象的一個引用(即該對象所在的內存地址)。myObject=newPoint(6,2)myObject=newPoint();(3)對象的初始化執(zhí)行構造方法,進行初始化。由于構造方法可重寫,所以通過給出不同個數或類型的參數會分別調用不同的構造方法。上述三步也可用一步完成:PointmyObject=newPoint();PointmyObject=newPoint(6,2);PointmyObject=newPoint(4,8,5);PointmyObject=newPoint(2.5,3.5,7.5,8.5);例classPoint{intx,y;Stringname="apoint";Point(){x=0;y=0;}Point(intx,inty,Stringname){this.x=x;this.y=y;=name;}intgetX(){returnx;}intgetY(){returny;}voidmove(intnewX,intnewY){x=newX;y=newY;}PointnewPoint(Stringname){PointnewP=newPoint(-x,-y,name);ReturnnewP;}booleanequal(intx,inty){if(this.x==x&&this.y==y)returntrue;elsereturnfalse;}voidprint(){System.out.println(name+":x="+x+"y="+y);}}publicclassUsingObject{publicstaticvoidmain(Stringargs[]){Pointp=newPoint();p.print();//callmethodofanobjectp.move(50,50);System.out.println("**aftermoving**");System.out.println("Getxandydirectly");//accessvariablesofanobjectSystem.out.println("x="+p.x+"y="+p.y);System.out.println("orGetxandybycallingmethod");System.out.println("x="+p.getX()+"y="+p.getY());if(p.equal(50,50))System.out.

溫馨提示

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

評論

0/150

提交評論