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

下載本文檔

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

文檔簡介

模組1─起步

第1章面向?qū)ο蟪淌皆O(shè)計概論一、面向?qū)ο笏枷氲漠a(chǎn)生背景軟體開發(fā)對程式設(shè)計的需求:1、提高生產(chǎn)能力2、擴(kuò)大處理範(fàn)圍3、面向新的環(huán)境二、面向?qū)ο笏枷氲挠蓙韺ο蟊硎粳F(xiàn)實世界中某個具體的事物。事物可分為兩大部分:物質(zhì):表達(dá)具體的事物意識:描述抽象的概念利用面向?qū)ο笏枷虢鉀Q問題現(xiàn)實問題空間

面向?qū)ο蠼饪臻g物質(zhì)對象(客觀存在的)

意識類(抽象的概念)OO

Object-Oriented三、為什麼需要面向?qū)ο蠓椒?追求軟體系統(tǒng)對現(xiàn)實系統(tǒng)的直接模擬,儘量實現(xiàn)將現(xiàn)實世界中的事物直接映射到軟體系統(tǒng)的解空間中。四、面向?qū)ο笾械闹饕拍?、抽象:是從特定的實例中抽取共同的性質(zhì)以形成一般化概念的過程。面向?qū)ο蟮某橄笤怼緮?shù)據(jù)抽象】它為程式員提供了一種對數(shù)據(jù)和操作這些數(shù)據(jù)所需要的演算法的抽象。主要包含兩個概念:模組化和資訊隱蔽。模組化:將一個複雜的系統(tǒng)分解為若干個模組,有特定關(guān)係的資訊盡可能在一個模組中。資訊隱蔽:將模組的細(xì)節(jié)部分對用戶隱藏起來,用戶只通過受保護(hù)的介面訪問某個模組?!拘袨楣灿谩恐冈S多實體具有相同的介面,從而增加系統(tǒng)的靈活性。【擴(kuò)展性】*需求的進(jìn)化;

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

對象之間相互請求或相互協(xié)作的途徑,是要求某個對象執(zhí)行某項操作的規(guī)格說明消息內(nèi)容

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

發(fā)出消息,請求接收方回應(yīng)接收方

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

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

用戶發(fā)送一個通用的消息,而實現(xiàn)的細(xì)節(jié)則由接收對象自行決定。多態(tài)性的作用增強(qiáng)了操作的透明性、可理解性和可擴(kuò)展性;增強(qiáng)了軟體的靈活性和重用性。面向?qū)ο蟮奶蒯绯橄笮苑忾]性繼承性多態(tài)性公式化描述程式=對象+消息面向?qū)ο?對象+類+繼承+通信五、程式設(shè)計範(fàn)型指設(shè)計程式的規(guī)範(fàn)、模型和風(fēng)格。

程式設(shè)計範(fàn)型

語言支持

過程式

Pascal、C

面向?qū)ο驝++、Java過程式程式設(shè)計範(fàn)型過程式程式設(shè)計範(fàn)型的主要特徵是:程式由過程定義與過程調(diào)用組成,即:程式=過程+過程調(diào)用過程式程式設(shè)計範(fàn)型和功能分解方法構(gòu)成了結(jié)構(gòu)化軟體開發(fā)方法的基礎(chǔ)。功能分解方法將一個大型的問題用逐步求精的方法,將其按照功能分解成一系列子問題,每個子問題對應(yīng)一個模組,最後依照模組的介面規(guī)則及用戶的功能需求,將整個系統(tǒng)組裝起來。模組的劃分在程式設(shè)計語言中,模組可以用過程或函數(shù)實現(xiàn)。假設(shè)C(x)表示x的複雜度,E(x)表示解決問題x的工作量,則一般認(rèn)為:

C(p1)>C(p2)

E(p1)>E(p2)

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

類封裝性

對象繼承性

派生類多態(tài)性

重載及動態(tài)聯(lián)編豐富的類庫Java面向?qū)ο蟮木幊陶Z言,最早由Sun公司推出,適用於企業(yè)網(wǎng)路和Internet環(huán)境。主要特點(diǎn):與環(huán)境無關(guān)、可靠性好,是一種完全面向?qū)ο蟮恼Z言。模組2─識別字、關(guān)鍵字和類型

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

ApplicationJavaApplet(小應(yīng)用程式):不是一個完整的應(yīng)用程式,而是框架程式中的一個模組,所以只能在WWW流覽器環(huán)境下運(yùn)行。JavaApplication(Java應(yīng)用程式):是一個完整的應(yīng)用程式,可以獨(dú)立地運(yùn)行。JavaApplet舉例importjava.applet.*;importjava.awt.*;publicclassMyFirstJavaAppletextendsApplet{publicvoidpaint(Graphicsg){g.drawString(“HelloWorld.”);}}JavaApplet小應(yīng)用程式基本結(jié)構(gòu)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位元組碼解釋執(zhí)行Applet位元組碼JavaApplication舉例importjava.io.*;publicclassMyFirstJavaProgram{publicstaticvoidmain(Stringargs[]){System.out.println(“HelloWorld!”);}}JavaApplication程式基本結(jié)構(gòu)import語句class{publicstaticvoidmain(String[]args){}}主類名稱方法體編寫Java程式需要注意的幾點(diǎn)Java區(qū)分大小寫類定義不能嵌套一個程式中可以有一個或多個類,但其中只能有一個主類根源程式編寫完畢,應(yīng)該用主類名作為檔案名,再加尾碼.java存儲成磁片檔三、Java程式的基本輸入輸出JavaApplet的輸入輸出輸入:利用圖形用戶介面的控件接收用戶資訊輸出:利用圖形或圖像的形式輸出結(jié)果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的識別字由字母、數(shù)字、_和$組成,長度不限。其中字母可以是大寫或小寫的英文字母,數(shù)字為0到9。識別字的第一個字元必須為字母、(_)或($)符號。識別字區(qū)分大小寫。識別字用來命名變數(shù)、符號常量、數(shù)組、方法、類、對象、介面、包等。為了提高程式的可讀性,識別字最好“見名知義”,而且規(guī)範(fàn)大小寫的使用方式。2、關(guān)鍵字又稱保留字,是Java語言規(guī)定了特定含義的識別字。用戶只能按照系統(tǒng)規(guī)定的方式使用,不能自行定義。關(guān)鍵字一律用小寫字母表示。Java中的關(guān)鍵字有50個,按用途劃分為:數(shù)據(jù)類型、語句、修飾、方法、類、介面、包,並保留了const和goto

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

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

//注釋部分

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

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

;分號,是語句結(jié)束標(biāo)誌。

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

:冒號,用於語句標(biāo)號。五、基本數(shù)據(jù)類型六、運(yùn)算式與運(yùn)算符算術(shù)運(yùn)算:+、-、*、/、%、++、--邏輯運(yùn)算:&、|、!、^、&&、||關(guān)係運(yùn)算:==、!=、>、<、>=、<=位運(yùn)算:~、&、|、^、>>、<<、>>>其他運(yùn)算:?:、賦值運(yùn)算符、()、[]、instanceof(測定一個對象是否屬於某個類)《賦值操作中的類型轉(zhuǎn)換》Java是強(qiáng)類型語言,因此,在進(jìn)行賦值操作時要對類型進(jìn)行檢查;當(dāng)將占位數(shù)少的類型賦值給占位數(shù)多的類型時,Java自動使用隱式類型轉(zhuǎn)換;當(dāng)將占位數(shù)多的類型賦值給占位數(shù)少的類型時,需要由用戶使用顯式的強(qiáng)制類型轉(zhuǎn)換。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)}七、常量和變數(shù)整型常量:十進(jìn)位、八進(jìn)制和十六進(jìn)制實型常量:double(雙精度)、float字元常量:單引號括起來布爾常量:true和false字串常量:雙引號括起來《變數(shù)的定義》在Java語言中,所有的變數(shù)必須先定義後使用。其格式為:數(shù)據(jù)類型識別字1[=初值],[識別字2...];如果是基本數(shù)據(jù)類型,變數(shù)在聲明時就為其分配記憶體空間,否則,還需要用new為聲明的變數(shù)分配空間。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;}}《變數(shù)的作用域》在類體中聲明的類成員變數(shù),可在該類的各個成員方法中使用;在某個方法體中或參數(shù)表中聲明的變數(shù)只能在該方法體中使用;在某個語句塊中聲明的變數(shù),只能在該語句塊中使用。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語言中,嵌套的程式塊的內(nèi)層與外層,不允許定義相同的變數(shù)名,否則將導(dǎo)致編譯錯誤。publicclassScopeError{publicstaticvoidmain(Stringarge[]){int

E=999;{int

E=999;

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

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

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

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

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

......case常量n:語句塊n;default:語句塊n+1;}《迴圈結(jié)構(gòu)—while》格式:

while(迴圈條件){循環(huán)體}含義:當(dāng)迴圈條件為true時,重複執(zhí)行循環(huán)體?!掇捜Y(jié)構(gòu)—do》格式:do{

循環(huán)體}while(迴圈條件);含義:重複執(zhí)行循環(huán)體,直到迴圈條件為false?!掇捜Y(jié)構(gòu)—for》格式:for(運(yùn)算式1;運(yùn)算式2;運(yùn)算式3)循環(huán)體;運(yùn)算式1:迴圈初值運(yùn)算式2:布爾型運(yùn)算式,迴圈條件運(yùn)算式3:迴圈增量運(yùn)算式《控制轉(zhuǎn)移語句》break語句:使程式的流程從一個語句塊內(nèi)部轉(zhuǎn)移出去。通常在switch和迴圈語句中使用。continue語句:只能在迴圈語句中使用。其作用是終止當(dāng)前這一輪的迴圈,直接進(jìn)入下一輪的迴圈。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;}}}}九、數(shù)組數(shù)組類型屬於複合數(shù)據(jù)類型,它是由類型相同的元素組成的有順序的數(shù)據(jù)集合。特點(diǎn):元素類型相同;元素有順序;所有元素共用一個名稱?!稊?shù)組的聲明》格式:數(shù)組元素類型

數(shù)組名[];

數(shù)組元素類型[]

數(shù)組名;舉例:

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

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

intString[]str=newString[10];數(shù)組創(chuàng)建後,系統(tǒng)自動為數(shù)組元素賦初值。數(shù)組初值數(shù)組元素的默認(rèn)初值:整型: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]);}}簡單類型和引用類型簡單類型的特點(diǎn):聲明時自動分配空間;賦值操作將拷貝數(shù)值。引用類型:聲明時不分配空間,需要利用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);}}}十、方法在類中,屬性是通過數(shù)據(jù)成員體現(xiàn)的,而操作是用成員函數(shù)(又稱為方法)實現(xiàn)的。《方法的定義》[修飾符]返回類型方法名稱([參數(shù)表]){//方法體}《方法的調(diào)用》方法調(diào)用有兩種基本形式:返回類型為void以獨(dú)立的運(yùn)算式語句調(diào)用返回類型不是void在運(yùn)算式中作為一項因數(shù)出現(xiàn)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;}}《方法的參數(shù)形式》方法的參數(shù)可以是基本數(shù)據(jù)類型、數(shù)組和類對象。

基本數(shù)據(jù)類型:值參傳遞

數(shù)組:地址傳遞

類對象:地址傳遞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]);}}《方法的返回值》方法的返回值是數(shù)組時,調(diào)用方法應(yīng)該利用一個與方法返回值類型相同的數(shù)組名,接收方法的返回結(jié)果。

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;}}}

}《方法的遞歸調(diào)用》longfactorial(intn){if(n==1)return1;elsereturnn*factorial(n-1);}《方法的重載》在Java中,同一個方法名可以被定義多次,但要求參數(shù)表不能完全一樣。調(diào)用方法時,系統(tǒng)是通過方法名和參數(shù)確定所調(diào)用的具體方法。這種現(xiàn)象叫做方法或函數(shù)的重載。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。當(dāng)一個程式檔中包含一個或多個類時,程式檔的名稱必須與包含main方法的類名相同。main方法是Java程式的起點(diǎn)。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中定義類類類是具有相同屬性和行為的對象集合,它是對客觀世界的實體進(jìn)行抽象的結(jié)果。一、類的定義[修飾符]

class類名

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

類成員變數(shù)聲明;類方法聲明;}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;注意:類屬於複合數(shù)據(jù)類型,因此,在聲明對象時,系統(tǒng)並沒有為對象分配空間,用戶需要應(yīng)用new完成分配空間的任務(wù)。

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);}}三、構(gòu)造函數(shù)為類中數(shù)據(jù)成員賦初值的途徑:定義數(shù)據(jù)成員時賦初值各種類型的默認(rèn)值利用構(gòu)造函數(shù)賦初值構(gòu)造函數(shù)是一個特殊的成員函數(shù),它與類名相同。在創(chuàng)建對象空間後,系統(tǒng)自動根據(jù)參數(shù)調(diào)用相應(yīng)的構(gòu)造函數(shù)。構(gòu)造函數(shù)的主要功能是為數(shù)據(jù)成員賦初值。對象的生成、使用和清除在Java語言中,創(chuàng)建類對象需要經(jīng)過聲明、實例化(new)和初始化三個步驟。使用對象包括引用類對象的成員變數(shù)和成員方法。格式為類對象名.成員名類對象的清除由系統(tǒng)完成。不需要用戶干預(yù)。四、類成員是類對象的操作類成員是類對象時,需要用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);}}五、類對象作為方法參數(shù)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;}}七、對象數(shù)組需要用new為其分配空間對象數(shù)組需要用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);}}八、訪問控制修飾符訪問控制符是一組起到限定類、屬性或方法被程式裏的其他部分訪問和調(diào)用的修飾符。類:public、缺省屬性和方法:public、private、protected、privateprotected、缺省public(公有)若類聲明為public,則表明這個類可以被所有的其他類訪問和引用,即其他類可以創(chuàng)建這個類的對象,並訪問這個類內(nèi)部的可見的成員變數(shù)、調(diào)用可見的方法若成員變數(shù)聲明為public,其他類的方法可以直接訪問它,但這樣破壞了封閉性若方法聲明為public,其他類可以直接調(diào)用這個方法,這樣的方法往往作為操作類對象的介面缺省若沒有設(shè)置訪問控制符,則說明該類、屬性或方法具有缺省訪問控制權(quán)限。這樣的類、屬性和方法只能被同一個包中的類訪問和引用,因此,我們又將其稱為包訪問性。private用private修飾的屬性和方法只能被類自身訪問和修改,而不能被任何其他類(包括子類)獲取和引用。應(yīng)該將不希望他人隨意引用或修改的屬性設(shè)置成private,以此將它們隱藏起來,從而實現(xiàn)面向?qū)ο蟮某淌皆O(shè)計思想。protected用protected修飾的成員變數(shù)可以被三種類所引用:該類自身同一個包中的其他類在其他包中的該類的子類============================作用:允許存在其他包中該類的子類訪問privateprotected用privateprotected修飾的成員變數(shù)可以被兩種類訪問和引用:該類本身該類的所有子類==========================與protected的區(qū)別:用來控制類之間繼承關(guān)係的訪問許可權(quán)訪問控制權(quán)限控制小結(jié)訪問控制本類同一包中的類其他包中子類其他包中的類public

缺省

××private

×××protected

×privateprotected

×

×九、修飾符——

staticstatic可以修飾類中的屬性和方法。靜態(tài)屬性在類定義時靜態(tài)地分配空間。它屬於類,不屬於某個特定的對象,因此可以通過類進(jìn)行訪問。往往將屬於類的公共屬性說明成static。用static修飾的方法屬於整個類的方法,其特點(diǎn)為:調(diào)用該方法時,首碼應(yīng)該使用類名該方法在內(nèi)存中的代碼段隨著類定義分配和加載由於該方法屬於整個類,所以,它不能操縱和處理屬於某個對象的成員變數(shù),而只能處理static成員變數(shù)。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();}}靜態(tài)初始化器靜態(tài)初始化器是由關(guān)鍵字static引導(dǎo)的一對大括弧括起來的語句組。它的任務(wù)是對靜態(tài)成員變數(shù)進(jìn)行初始化。與構(gòu)造函數(shù)的區(qū)別:構(gòu)造函數(shù)靜態(tài)初始化器初始化對象初始化類new時系統(tǒng)自動調(diào)用加載類時系統(tǒng)調(diào)用特殊的方法不是方法classEmployee{privateintm_EmpNo;Stringm_EmpName;charm_EmpGender;privatedoublem_EmpSalary;

staticdoublem_MinSalary;staticintm_NextEmpNo;}static{//靜態(tài)初始化器

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

溫馨提示

  • 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

提交評論