Java语言程序设计课件_第1页
Java语言程序设计课件_第2页
Java语言程序设计课件_第3页
Java语言程序设计课件_第4页
Java语言程序设计课件_第5页
已阅读5页,还剩260页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

模組1─起步

第1章面向對象程式設計概論一、面向對象思想的產生背景軟體開發對程式設計的需求:1、提高生產能力2、擴大處理範圍3、面向新的環境二、面向對象思想的由來對象表示現實世界中某個具體的事物。事物可分為兩大部分:物質:表達具體的事物意識:描述抽象的概念利用面向對象思想解決問題現實問題空間

面向對象解空間物質對象(客觀存在的)

意識類(抽象的概念)OO

Object-Oriented三、為什麼需要面向對象方法?追求軟體系統對現實系統的直接模擬,儘量實現將現實世界中的事物直接映射到軟體系統的解空間中。四、面向對象中的主要概念1、抽象:是從特定的實例中抽取共同的性質以形成一般化概念的過程。面向對象的抽象原理【數據抽象】它為程式員提供了一種對數據和操作這些數據所需要的演算法的抽象。主要包含兩個概念:模組化和資訊隱蔽。模組化:將一個複雜的系統分解為若干個模組,有特定關係的資訊盡可能在一個模組中。資訊隱蔽:將模組的細節部分對用戶隱藏起來,用戶只通過受保護的介面訪問某個模組。【行為共用】指許多實體具有相同的介面,從而增加系統的靈活性。【擴展性】*需求的進化;

*進化式問題求解。【確定性】指用於描述一個系統確定的行為。2、對象(object)對象具有兩方面的含義:在現實世界中:是客觀世界中的一個實體在電腦世界中:是一個可標識的存儲區域對象(object)封裝的實體=數據+方法(行為)數據:屬性或狀態方法:作用於數據上的操作封裝:屬性的訪問和變化通過方法完成每個對象由對象識別字唯一標識3、類(class)具有共同屬性和行為的對象集合類與對象的關係類是對象的抽象對象是類的實例類具有層次關係4、方法(methods)方法是對象的行為方式(操作)對象與外界的介面作用改變對象的屬性返回對象的屬性object1object25、消息(message)消息

對象之間相互請求或相互協作的途徑,是要求某個對象執行某項操作的規格說明消息內容

通常包含接收方及請求接收方完成的功能資訊發送方

發出消息,請求接收方回應接收方

收到消息後,經過解釋,啟動方法,予以回應消息的性質同一對象可接收不同形式的多個消息,產生不同的回應;同一個消息可以發給不同的對象,所做出的回應可以截然不同;發送方不需要知道接受方如何對請求予以回應的。6、繼承性(inheritance)繼承性是父類和子類之間共用數據和方法的機制;繼承性具有傳遞性;繼承性包括單繼承和多重繼承。

子類繼承部分個性部分父類共性部分繼承性(inheritance)單繼承多重繼承設備輸出設備I/O設備輸入設備繼承性作用使軟體系統具有開放性更好地進行抽象與分類增強代碼的重用率提高可維護性7、多態性(polymorphism)不同的對象收到同一個消息可產生完全不同的效果,這一現象叫做多態。多態的效果

用戶發送一個通用的消息,而實現的細節則由接收對象自行決定。多態性的作用增強了操作的透明性、可理解性和可擴展性;增強了軟體的靈活性和重用性。面向對象的特徵抽象性封閉性繼承性多態性公式化描述程式=對象+消息面向對象=對象+類+繼承+通信五、程式設計範型指設計程式的規範、模型和風格。

程式設計範型

語言支持

過程式

Pascal、C

面向對象C++、Java過程式程式設計範型過程式程式設計範型的主要特徵是:程式由過程定義與過程調用組成,即:程式=過程+過程調用過程式程式設計範型和功能分解方法構成了結構化軟體開發方法的基礎。功能分解方法將一個大型的問題用逐步求精的方法,將其按照功能分解成一系列子問題,每個子問題對應一個模組,最後依照模組的介面規則及用戶的功能需求,將整個系統組裝起來。模組的劃分在程式設計語言中,模組可以用過程或函數實現。假設C(x)表示x的複雜度,E(x)表示解決問題x的工作量,則一般認為:

C(p1)>C(p2)

E(p1)>E(p2)

C(p1+p2)>C(p1)+C(p2)E(p1+p2)>E(p1)+E(p2)當模組數目增加時,每個模組的規模將減小,開發單個模組的工作量也將隨之減小,但要注意:設計介面的工作量將會加大。模組的劃分原則模組的耦合度:指不同的模組之間相互依賴的緊密程度。模組的內聚度:指在一個模組內部各個元素彼此結合的緊密程度。模組的劃分原則:耦合度越小越好;內聚度越大越好。面向對象程式設計範型面向對象程式設計範型的主要特徵是:程式=對象+消息程式的基本元素是對象。程式中的一切操作都是通過向對象發送相應的消息來實現。面向對象設計思想的要點認為客觀世界由各種對象組成,任何事物都是對象,複雜的對象可以由比較簡單的對象以某種方式組合而成。把所有對象都劃分成各種對象類,每個對象類都定義了一組數據和一組方法。按照子類與父類的關係,把若干個對象類組成一個層次結構的系統。對象彼此之間僅能通過傳遞消息互相聯繫。面向對象方法的主要優點與人類習慣的思維方法一致可重用性性可擴展性可管理性六、OOPL(OOP-Language)面向對象程式設計語言是能夠支持面向對象程式設計的電腦語言。分類支持對象支持類支持繼承面向對象的語言基於類的語言基於對象的語言OOPL的基本特徵類和對象的描述定義採用消息傳遞實現對象通訊支持類的繼承支持多態性Smalltalk是一集成化程式設計環境有類、方法、實例、消息等概念支持單繼承和動態聯編具有豐富的類庫及類庫流覽器Object-C將Smalltalk的主要概念嫁接到C中的產物類定義由兩個檔組成介面檔:類定義部分實現檔:類實現部分C++是C的超集抽象性

類封裝性

對象繼承性

派生類多態性

重載及動態聯編豐富的類庫Java面向對象的編程語言,最早由Sun公司推出,適用於企業網路和Internet環境。主要特點:與環境無關、可靠性好,是一種完全面向對象的語言。模組2─識別字、關鍵字和類型

第2章Java語言基礎Java語言由語法規則和類庫兩部分組成。語法規則確定Java程式的書寫規範;類庫則提供了一系列開發人員或軟體供應商編寫的Java程式模組(類)。在編寫Java程式的時候,可以直接利用這些類,從而提高軟體開發的效率。因此學習Java程式設計包含兩部分內容:一是語法規則;二是類庫的使用。而後者往往是更好地使用Java語言編程的關鍵。一、Java程式的運行環境編譯型根源程式位元組碼程式Java根源程式可執行程式EXE裸機操作系統解釋器編譯連接編譯運行解釋運行.java.classJava是解釋型的高級編程語言Java虛擬機運行Java程式的基本過程1、利用編輯器編寫Java根源程式原始檔案名:主類名.java2、利用編譯器將根源程式編譯成位元組碼位元組碼檔案名:原始檔案名.class3、利用虛擬機(解釋器)運行工作過程:載入、代碼校驗、解釋執行常見的Java開發環境從網路上直接下載JDK(JavaDeveloperKit),並利用命令行方式操作javac(編譯器);java(解釋器)Java集成開發環境(IDE)VisualJ++、VisualCafe、JBuilderJava教學集成開發環境BlueJ(需要JDK1.3以上版本的支持)二、Applet和

ApplicationJavaApplet(小應用程式):不是一個完整的應用程式,而是框架程式中的一個模組,所以只能在WWW流覽器環境下運行。JavaApplication(Java應用程式):是一個完整的應用程式,可以獨立地運行。JavaApplet舉例importjava.applet.*;importjava.awt.*;publicclassMyFirstJavaAppletextendsApplet{publicvoidpaint(Graphicsg){g.drawString(“HelloWorld.”);}}JavaApplet小應用程式基本結構importjava.applet.*;importjava.awt.*;class

extendsApplet{

}類名稱類成員聲明<HTML><HEAD><TITLE>MyFirstJavaApplet</TITLE></HEAD><BODY><HR><APPLETCODE=MyFirstMyApplet

WIDTH=500HEIGHT=500></APPLET></BODY></HTML>JavaApplet工作原理HTML檔嵌入Appletwww伺服器www伺服器www流覽器請求HTML檔下載HTML檔請求Applet位元組碼下載Applet位元組碼解釋執行Applet位元組碼JavaApplication舉例importjava.io.*;publicclassMyFirstJavaProgram{publicstaticvoidmain(Stringargs[]){System.out.println(“HelloWorld!”);}}JavaApplication程式基本結構import語句class{publicstaticvoidmain(String[]args){}}主類名稱方法體編寫Java程式需要注意的幾點Java區分大小寫類定義不能嵌套一個程式中可以有一個或多個類,但其中只能有一個主類根源程式編寫完畢,應該用主類名作為檔案名,再加尾碼.java存儲成磁片檔三、Java程式的基本輸入輸出JavaApplet的輸入輸出輸入:利用圖形用戶介面的控件接收用戶資訊輸出:利用圖形或圖像的形式輸出結果JavaApplication字元介面:利用System.in和System.print、System.println輸入輸出圖形用戶介面:同JavaAplplet

類似importjava.applet;importjava.awt.*;publicclassSimpleGraphicsInOutextendsApplet{Labelprompt;

TextFieldinput;Labeloutput;

publicvoidinit(){prompt=newLabel(“Enteracharacterplease:”);input=newTextField(3);output=newLabel(““);add(prompt);add(input);add(output);}

publicbooleanaction(Evente,Objecto){output.setText(“You’veenteredcharacter“+o.toString());returntrue;}}Applet舉例importjava.io.*;publicclassSimpleCharInOut{publicstaticvoidmain(Stringargs[]){charc=‘‘;System.out.print(“Enteracharacterplease:”);try{c=(char)System.in.read();}catch(IOExceptione){};

System.out.println(“You’veenteredcharacter”+c);}}Application字元介面舉例importjava.awt.*;publicclassGraphicsAppletInOut{publicstaticvoidmain(Stringargs[]){

AppletFrame

MyFrame=newAppletFrame();}}Application圖形用戶介面舉例classAppletFrameextendsFrame{Labelprompt;

TextFieldinput;Labeloutput;

AppletFrame(){super(“ApplicationGraphicsFrame”);

setLayout(newFlowLayout());prompt=newLabel(“Enteracharacterplease:“);input=newTextField(4);output=newLabel(““);add(prompt);add(input);add(output);pack();show();}Application圖形用戶介面舉例publicbooleanaction(Evente,Objecto){output.setText(“You’veenteredcharacter“+o.toString());returntrue;}

publicboolean

handleEvent(Evente){if(e.id==Event.WINDOW_DESTROY)System.exit(0);returnsuper.handleEvent(e);}}Application圖形用戶介面舉例四、基本符號1、識別字Java的識別字由字母、數字、_和$組成,長度不限。其中字母可以是大寫或小寫的英文字母,數字為0到9。識別字的第一個字元必須為字母、(_)或($)符號。識別字區分大小寫。識別字用來命名變數、符號常量、數組、方法、類、對象、介面、包等。為了提高程式的可讀性,識別字最好“見名知義”,而且規範大小寫的使用方式。2、關鍵字又稱保留字,是Java語言規定了特定含義的識別字。用戶只能按照系統規定的方式使用,不能自行定義。關鍵字一律用小寫字母表示。Java中的關鍵字有50個,按用途劃分為:數據類型、語句、修飾、方法、類、介面、包,並保留了const和goto

3、分隔符號分隔符號被用來區分Java根源程式中的基本成分(識別字、關鍵字、分隔符號、運算符和常量),分隔符號分為注釋、空白符和普通三種。注釋是為根源程式增加必要的解釋說明的內容,其目的是提高程式的可讀性,書寫注釋是編寫程式的良好習慣。Java中有三種形式的注釋:

/*注釋部分*//**注釋部分*/

//注釋部分

第二種分隔符號是空白符,包括空格、回車、換行和跳位字元(Tab鍵)。各種Java基本成分之間的多個空白符與一個空白符的作用相同。第三種是普通分隔符號,具有確定的語法含義,不能用錯。它包括四種分隔符號:{}

大括弧,用來定義類體、方法體、複合語句和數組的初始化。

;分號,是語句結束標誌。

,逗號,分隔方法的參數,分隔變數說明的各個變數。

:冒號,用於語句標號。五、基本數據類型六、運算式與運算符算術運算:+、-、*、/、%、++、--邏輯運算:&、|、!、^、&&、||關係運算:==、!=、>、<、>=、<=位運算:~、&、|、^、>>、<<、>>>其他運算:?:、賦值運算符、()、[]、instanceof(測定一個對象是否屬於某個類)《賦值操作中的類型轉換》Java是強類型語言,因此,在進行賦值操作時要對類型進行檢查;當將占位數少的類型賦值給占位數多的類型時,Java自動使用隱式類型轉換;當將占位數多的類型賦值給占位數少的類型時,需要由用戶使用顯式的強制類型轉換。packagejava.lang;importjava.util.Random;publicfinalclassMath{privateMath(){}publicstaticfinaldoubleE=2.7182818284590452354;publicstaticfinaldoublePI=3.14159265358979323846;publicstaticnativedoublesin(doublea);publicstaticnativedoublecos(doublea);publicstaticnativedoubletan(doublea);publicstaticnativedoubleasin(doublea);publicstaticnativedoubleacos(doublea);publicstaticnativedoubleatan(doublea);publicstaticnativedoubleexp(doublea);publicstaticnativedoublelog(doublea);publicstaticnativedoublesqrt(doublea);publicstaticnativedoubleIEEEremainder(doublef1,doublef2);publicstaticnativedoubleceil(doublea);publicstaticnativedoublefloor(doublea);publicstaticnativedoublerint(doublea);Math類(importjava.lang)publicstaticnativedoubleatan2(doublea,doubleb);publicstaticnativedoublepow(doublea,doubleb);publicstaticintround(floata)publicstaticlonground(doublea)privatestaticRandomrandomNumberGenerator;publicstaticdoublerandom()publicstaticintabs(inta)publicstaticlongabs(longa)publicstaticfloatabs(floata)publicstaticdoubleabs(doublea)publicstaticintmax(inta,intb)publicstaticlongmax(longa,longb)publicstaticfloatmax(floata,floatb)publicstaticdoublemax(doublea,doubleb)publicstaticintmin(inta,intb)publicstaticlongmin(longa,longb)publicstaticfloatmin(floata,floatb)publicstaticdoublemin(doublea,doubleb)}七、常量和變數整型常量:十進位、八進制和十六進制實型常量:double(雙精度)、float字元常量:單引號括起來布爾常量:true和false字串常量:雙引號括起來《變數的定義》在Java語言中,所有的變數必須先定義後使用。其格式為:數據類型識別字1[=初值],[識別字2...];如果是基本數據類型,變數在聲明時就為其分配記憶體空間,否則,還需要用new為聲明的變數分配空間。importjava.io.*publicclassCharInLineOut{publicstaticvoidmain(Stringargs[]){charc;System.out.print(“請輸入一個字元”);try{

c=(char)System.in.read();}catch(IOExceptione){};System.out.println(c+“”+c+“”+c);}}importjava.applet.Applet;importjava.awt.*;publicclassSimpleGraphicsInOutextendsApplet{Labelprompt;

TextField

input;Labeloutput;publicvoidinit(){prompt=newLabel(“請輸入字元”);

input=newTextField(3);

output=newLabel(“”);add(prompt);add(input);add(output);}publicbooleanaction(Evente,Objecto){output.setText(o.toString()+“”+o.toString()+“”+o.toString());returntrue;}}《變數的作用域》在類體中聲明的類成員變數,可在該類的各個成員方法中使用;在某個方法體中或參數表中聲明的變數只能在該方法體中使用;在某個語句塊中聲明的變數,只能在該語句塊中使用。publicclassVariableScope{publicstaticvoidmain(Stringarge[]){intx;

x=10;if(x==10){inty=20;System.out.println("x="+x);System.out.println("y="+y);}System.out.println("x="+x);System.out.println(“y=”+y);//y沒有定義

}}publicclassVariableLifeTime{publicstaticvoidmain(Stringarge[]){int

sum=0,A=10;for(intx=1;x<=5;x++){inty=0;y=y+A;sum=sum+y;System.out.print("x="+x);System.out.print("y="+y);System.out.println("sum="+sum);}System.out.println("sum="+sum);}}在Java語言中,嵌套的程式塊的內層與外層,不允許定義相同的變數名,否則將導致編譯錯誤。publicclassScopeError{publicstaticvoidmain(Stringarge[]){int

E=999;{int

E=999;

System.out.println("E="+E);}}}《final變數》在Java語言中,可以利用關鍵字final將一個變數定義為常量識別字。

finaldoublepi=3.1415926;變數pi的值在作用域範圍內,只能被使用,不能被修改。publicclassFinalVariable{privatestaticfinaldoublepi=3.1415926;publicstaticvoidmain(Stringarge[]){

System.out.println("pi="+pi);

System.out.println("area="+3*3*pi);}}八、控制語句運算式語句:運算式後加一個分號a+=a*6;a++;a+3;複合語句:包含在一對大括弧中的語句序列流程控制語句:順序結構、選擇結構和迴圈結構《選擇結構》

if(布爾型運算式)語句1;[else語句2;]switch(運算式){case常量1:語句塊1;

......case常量n:語句塊n;default:語句塊n+1;}《迴圈結構—while》格式:

while(迴圈條件){循環體}含義:當迴圈條件為true時,重複執行循環體。《迴圈結構—do》格式:do{

循環體}while(迴圈條件);含義:重複執行循環體,直到迴圈條件為false。《迴圈結構—for》格式:for(運算式1;運算式2;運算式3)循環體;運算式1:迴圈初值運算式2:布爾型運算式,迴圈條件運算式3:迴圈增量運算式《控制轉移語句》break語句:使程式的流程從一個語句塊內部轉移出去。通常在switch和迴圈語句中使用。continue語句:只能在迴圈語句中使用。其作用是終止當前這一輪的迴圈,直接進入下一輪的迴圈。importjava.awt.Graphics;importjava.applet.Applet;publicclassBreakTestextendsApplet{publicvoidpaint(Graphicsg){

intcount,square,xPos=25;

for(count=1;count<=10;count++){square=count*count;if(square>=70)break;

g.drawString(Integer.toString(square),xPos,25);

xPos+=20;}

g.drawString("Brokeoutofloopatcount="+count,25,40);}}importjava.awt.Graphics;importjava.applet.Applet;publicclassContinueTestextendsApplet{publicvoidpaint(Graphicsg){

int

xPos=25;

for(intcount=1;count<=10;count++){if(count==5)continue;

g.drawString(Integer.toString(count),xPos,25);

xPos+=15;}

g.drawString("skipprinting5",25,40);}}

importjava.awt.Graphics;importjava.applet.Applet;publicclassContinueLabelTestextendsApplet{publicvoidpaint(Graphicsg){int

xPos,yPos=0;

nextRow:for(introw=1;row<=5;row++){xPos=25;yPos+=15;for(intcolumn=1;column<=10;column++){if(column>row)continuenextRow;

g.drawString("#",xPos,yPos);

xPos+=7;}}}}九、數組數組類型屬於複合數據類型,它是由類型相同的元素組成的有順序的數據集合。特點:元素類型相同;元素有順序;所有元素共用一個名稱。《數組的聲明》格式:數組元素類型

數組名[];

數組元素類型[]

數組名;舉例:

intarray_int[];doublearray_double[];String[]str;Point[]P;《數組的創建》與其他的語言不同,在Java語言中,聲明數組時不能指定它的長度,而是利用new來為數組型變數分配記憶體空間,我們將其稱之為創建數組。

array_int=newint[10];array_double=newdouble[1000];

intString[]str=newString[10];數組創建後,系統自動為數組元素賦初值。數組初值數組元素的默認初值:整型:0實型:0.0f或0.0d字元:‘\0’類對象:nullintarray_int[]={1,2,3,4,5,6,7};String[]str={“Fortran”,“QBasic”,“Pascal”};publicclassMorePrimes{publicstaticvoidmain(String[]args){long[]primes=newlong[20];

intcount=2;longnumber=5;

primes[0]=2;primes[1]=3;

outer:for(;count<primes.length;number+=2){longlimit=(long)Math.ceil(Math.sqrt((double)numebr));for(inti=1;i<count&&primes[i]<=limit;i++)if(number%primes[i]==0)continueouter;

primes[count++]=number;}for(inti=0;i<primes.length;i++)System.out.println(primes[i]);}}簡單類型和引用類型簡單類型的特點:聲明時自動分配空間;賦值操作將拷貝數值。引用類型:聲明時不分配空間,需要利用new完成空間分配(String隱含分配);賦值操作是地址的拷貝。publicclassReference{publicstaticvoidmain(Stringargs[]){

intbasic[]=newint[5];

intby_ref[],by_copy[];

basic[1]=100;basic[3]=1000;

printArray("basic",basic);

by_ref=basic;

printArray("by_ref",by_ref);

by_ref[1]=128;by_ref[4]=1024;

printArray("basic",basic);

by_copy=newint[5];System.arraycopy(basic,0,by_copy,0,basic.length);

printArray("by_copy",by_copy);

}

publicstaticvoidprintArray(Stringstr,intdata[]){System.out.print(str+":");for(inti=0;i<data.length;i++)System.out.print("\t"+data[i]);System.out.println("");}}publicclassWeatherFan{

public[][]temperature=newfloat[10][365];for(inti=0;i<temperature.length;i++)for(intj=0;j<temperature[0].length;j++)

temperature[i][j]=(float)(45.0*Math.random()-10.0);for(inti=0;i<temperature.length;i++){floataverage=0.0f;for(intj=0;j<temperature[0].length;j++)average+=temperature[i][j];System.out.println(“Averagetemperatureatlocation”+(i+1)+“=”+average/(flaot)temperature[0].length);}}}十、方法在類中,屬性是通過數據成員體現的,而操作是用成員函數(又稱為方法)實現的。《方法的定義》[修飾符]返回類型方法名稱([參數表]){//方法體}《方法的調用》方法調用有兩種基本形式:返回類型為void以獨立的運算式語句調用返回類型不是void在運算式中作為一項因數出現publicclassSquareDouble{publicstaticvoidmain(Stringargs[]){doublea;

for(intx=0;x<=10;x++){a=x/10.0;System.out.println("a="+a+"a*a="+square(a));}}

publicstaticdoublesquare(doubley){returny*y;}}《方法的參數形式》方法的參數可以是基本數據類型、數組和類對象。

基本數據類型:值參傳遞

數組:地址傳遞

類對象:地址傳遞importjava.awt.Graphics;publicclassArrayMaxMinextendsjava.applet.Applet{

publicvoidpaint(Graphicsg){doubleMax,Min;doubledata[]={0.2,5.6,7.88,20.3,-0.234,3.22};

Max=ArrayMax(data);g.drawString("Max="+Max,10,20);Min=ArrayMin(data);g.drawString("Min="+Min,10,40);

}doubleArrayMax(doublearray[]){doublemax=array[0];for(inti=1;i<array.length;i++)if(array[i]>max)max=array[i];returnmax;}

doubleArrayMin(doublearray[]){doublemin=array[0];for(inti=1;i<array.length;i++)if(array[i]<min)min=array[i];returnmin;}}publicclassArrayParameters{

publicstaticvoidmain(Stringargs[]){doubledata[]={9.0,56.0,78.0,35.0,36.0};

PrintA(data);ElemSqrt(data);PrintA(data);}

staticvoidPrintA(doublearray[]){for(inti=0;i<array.length;i++)System.out.print("\t"+array[i]);System.out.println("");}

staticvoidElemSqrt(doublearray[]){for(inti=0;i<array.length;i++)array[i]=Math.sqrt(array[i]);}}《方法的返回值》方法的返回值是數組時,調用方法應該利用一個與方法返回值類型相同的數組名,接收方法的返回結果。

long[]Fib(intN){longfibonacci[]=newlong[N];……returnfibonacci;}

也可以寫成:longFibonacci(intN)[]{…}importjava.awt.Graphics;publicclassReturnArrayextendsjava.applet.Applet{

publicvoidpaint(Graphicsg){

intn=25;longFib[]=newlong[n];

Fib=Fibonacci(n);

paintArray(g,Fib,20);

}long[]Fibonacci(intN){longfibonacci[]=newlong[N];

fibonacci[0]=0L;fibonacci[1]=1L;for(intf=2;f<N;f++)

fibonacci[f]=fibonacci[f-1]+fibonacci[f-2];returnfibonacci;}

voidpaintArray(Graphicsg,longdata[],int

yPosition){

int

xPos=20;for(inti=0;i<data.length;i++){g.drawString(""+data[i],xPos,yPosition);

xPos+=50;if((i+1)%7==0){

xPos=20;yPosition+=15;}}}

}《方法的遞歸調用》longfactorial(intn){if(n==1)return1;elsereturnn*factorial(n-1);}《方法的重載》在Java中,同一個方法名可以被定義多次,但要求參數表不能完全一樣。調用方法時,系統是通過方法名和參數確定所調用的具體方法。這種現象叫做方法或函數的重載。importjava.awt.Graphics;importjava.applet.Applet;publicclassMethodOverloadextendsApplet{publicvoidpaint(Graphicsg){g.drawString("Thesquareofinteger17is"+square(17),25,25);g.drawString("Thesquareofdouble17.5is"+square(17.5),25,40);}

intsquare(intx){returnx*x;}

doublesquare(doubley){returny*y;}}《main()方法》在Java的Application程式中,必須有一個且僅有一個主方法main。當一個程式檔中包含一個或多個類時,程式檔的名稱必須與包含main方法的類名相同。main方法是Java程式的起點。publicclassMainTest{publicstaticvoidmain(Stringargs[]){

intn=args.length;if(n==0)System.out.println("noparament!");else{System.out.println("numberofparaments:"+n);for(inti=0;i<n;i++)System.out.println("args["+i+"]="+args[i]);}}}第3章在Java中定義類類類是具有相同屬性和行為的對象集合,它是對客觀世界的實體進行抽象的結果。一、類的定義[修飾符]

class類名

[extends父類名][implements介面名]{

類成員變數聲明;類方法聲明;}importjava.awt.Graphics;classBox{doublewidth,height,depth;doublevolume(){returnwidth*height*depth;}

voidBoxMessage(Graphicsg,intx,inty){g.drawString(“寬度”+width,x,y);g.drawString(“高度”+height,x,y+15);g.drawString(“深度”+depth,x,y+30);}}二、對象的定義和使用

類名對象名;

BoxmyBox;注意:類屬於複合數據類型,因此,在聲明對象時,系統並沒有為對象分配空間,用戶需要應用new完成分配空間的任務。

myBox=newbox();publicclassBoxClassextendsApplet{publicvoidpaint(Graphicsg){BoxmyBox=newBox();doublemyBoxVolume,Volume;

myBox.width=10.5;

myBox.height=20.6;

myBox.depth=15.7;

myBoxVolume=myBox.volume();g.drawString(“體積是:”+

myBoxVolume,25,20);

myBox.BoxMessage(g,160,20);}}三、構造函數為類中數據成員賦初值的途徑:定義數據成員時賦初值各種類型的默認值利用構造函數賦初值構造函數是一個特殊的成員函數,它與類名相同。在創建對象空間後,系統自動根據參數調用相應的構造函數。構造函數的主要功能是為數據成員賦初值。對象的生成、使用和清除在Java語言中,創建類對象需要經過聲明、實例化(new)和初始化三個步驟。使用對象包括引用類對象的成員變數和成員方法。格式為類對象名.成員名類對象的清除由系統完成。不需要用戶干預。四、類成員是類對象的操作類成員是類對象時,需要用new為其分配空間classDATE{intyear,month,day;voidsetDATE(inty,intm,intd){year=y;month=m;day=d;}voidshowDATE(){System.out.println("\nYEAR="+year+"\tMOUTH="+month+"\tDAY="+day);}}classPerson{Stringname;

intno;

DATEbirthday=newDATE();voidsetP(Strings,intn,inty1,intm1,intd1){name=s;no=n;

birthday.setDATE(y1,m1,d1);}voidshowP(){System.out.println("NAME="+name+"\tNO.="+no);birthday.showDATE();}staticpublicvoidmain(Stringarg[]){PersonP=newPerson();P.setP("ZhangShan",1234,1980,6,30);P.showP();System.out.println("year="+P.birthday.year);}}五、類對象作為方法參數classA{intx=5;voidchange(Aa){System.out.println("a.x="+a.x);a.x=331;System.out.println("a.x="+a.x);}}classpassObject{staticpublicvoidmain(Stringa[]){Aaa=newA();

aa.change(aa);System.out.println("aa.x="+aa.x);}}六、類對象作為方法的返回值importjava.awt.Graphics;classDemo{inta;Demo(inti){a=i;}DemoincreaseByTen(){Demodemo=newDemo(a+10);returndemo;}}publicclassreturnObjectextendsjava.applet.Applet{publicvoidpaint(Graphicsg){Demodemo1=newDemo(32);Demodemo2;g.drawString("demo1.a:"+demo1.a,30,40);

demo2=demo1.increaseByTen();g.drawString("demo2.a:"+demo2.a,30,60);

demo2=demo2.increaseByTen();g.drawString("demo2.a:"+demo2.a,30,80);}}classT{intx,y;T(){x=0;y=0;}T(inti,intj){x=i;y=j;}voidsetT(inti,intj){x=i;y=j;}}七、對象數組需要用new為其分配空間對象數組需要用new為其分配空間classObjectArray{staticpublicvoidmain(Stringarg[]){Tt1[]=newT[2];t1[0]=newT();t1[1]=newT(33,44);System.out.println(t1[0].x+","+t1[0].y);System.out.println(t1[1].x+","+t1[1].y);t1[0].setT(77,88);t1[1].setT(111,999);System.out.println(t1[0].x+","+t1[0].y);System.out.println(t1[1].x+","+t1[1].y);}}八、訪問控制修飾符訪問控制符是一組起到限定類、屬性或方法被程式裏的其他部分訪問和調用的修飾符。類:public、缺省屬性和方法:public、private、protected、privateprotected、缺省public(公有)若類聲明為public,則表明這個類可以被所有的其他類訪問和引用,即其他類可以創建這個類的對象,並訪問這個類內部的可見的成員變數、調用可見的方法若成員變數聲明為public,其他類的方法可以直接訪問它,但這樣破壞了封閉性若方法聲明為public,其他類可以直接調用這個方法,這樣的方法往往作為操作類對象的介面缺省若沒有設置訪問控制符,則說明該類、屬性或方法具有缺省訪問控制權限。這樣的類、屬性和方法只能被同一個包中的類訪問和引用,因此,我們又將其稱為包訪問性。private用private修飾的屬性和方法只能被類自身訪問和修改,而不能被任何其他類(包括子類)獲取和引用。應該將不希望他人隨意引用或修改的屬性設置成private,以此將它們隱藏起來,從而實現面向對象的程式設計思想。protected用protected修飾的成員變數可以被三種類所引用:該類自身同一個包中的其他類在其他包中的該類的子類============================作用:允許存在其他包中該類的子類訪問privateprotected用privateprotected修飾的成員變數可以被兩種類訪問和引用:該類本身該類的所有子類==========================與protected的區別:用來控制類之間繼承關係的訪問許可權訪問控制權限控制小結訪問控制本類同一包中的類其他包中子類其他包中的類public

缺省

××private

×××protected

×privateprotected

×

×九、修飾符——

staticstatic可以修飾類中的屬性和方法。靜態屬性在類定義時靜態地分配空間。它屬於類,不屬於某個特定的對象,因此可以通過類進行訪問。往往將屬於類的公共屬性說明成static。用static修飾的方法屬於整個類的方法,其特點為:調用該方法時,首碼應該使用類名該方法在內存中的代碼段隨著類定義分配和加載由於該方法屬於整個類,所以,它不能操縱和處理屬於某個對象的成員變數,而只能處理static成員變數。classA{intx;staticinty=3;voidshowx(){System.out.println("x="+x);}staticvoidshow(){System.out.print("static:");}staticvoidshowy(){System.out.println("y="+y);}staticvoidshow1(){A.show();A.showy();}}classStaticTest{staticpublicvoidmain(Stringarg[]){A.y+=1;A.show1();

Aa1=newA();a1.showx();A.showy();a1.showy();

Aa2=newA();a2.x=6;a2.y=7;a2.showx();a2.show1();a1.show1();A.show1();}}靜態初始化器靜態初始化器是由關鍵字static引導的一對大括弧括起來的語句組。它的任務是對靜態成員變數進行初始化。與構造函數的區別:構造函數靜態初始化器初始化對象初始化類new時系統自動調用加載類時系統調用特殊的方法不是方法classEmployee{privateintm_EmpNo;Stringm_EmpName;charm_EmpGender;privatedoublem_EmpSalary;

staticdoublem_MinSalary;staticintm_NextEmpNo;}static{//靜態初始化器

m_MinSalary=250;m_NextEmpNo=3001;}Employee(Stringname,charsex,doublesal)//構造函數{……}十、抽象類與修飾符abstract用abstract修飾的類被稱為抽象類。所謂抽象類就是沒有具體實例對象的類。它的主要用途是用來描述概念性的內容,這樣可以提高開發效率,更好地統一用戶介面。抽象方法abstract只能修飾方法。表明該方法是一個抽象的方法,即沒有函數體。必須在子類中具體描述方法的實現過程。抽象方法必須存在於抽象類之中。abstractclassA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论