Java語(yǔ)言程序設(shè)計(jì)上清華大學(xué)442課件_第1頁(yè)
Java語(yǔ)言程序設(shè)計(jì)上清華大學(xué)442課件_第2頁(yè)
Java語(yǔ)言程序設(shè)計(jì)上清華大學(xué)442課件_第3頁(yè)
Java語(yǔ)言程序設(shè)計(jì)上清華大學(xué)442課件_第4頁(yè)
Java語(yǔ)言程序設(shè)計(jì)上清華大學(xué)442課件_第5頁(yè)
已閱讀5頁(yè),還剩421頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Java語(yǔ)言程序設(shè)計(jì)1第一章Java語(yǔ)言基礎(chǔ)知識(shí)

第二章類(lèi)與對(duì)象的基本概念

第三章類(lèi)的方法

第四章類(lèi)的重用

第五章接口與多態(tài)

第六章輸入/輸出流和文件

第七章對(duì)象群體的組織

第八章線(xiàn)程

第九章圖形用戶(hù)界面

第十章JDBC與數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)

第十一章Servlet程序設(shè)計(jì)

第十二章JSP程序設(shè)計(jì)2Java語(yǔ)言程序設(shè)計(jì)第一章

Java語(yǔ)言基礎(chǔ)知識(shí)清華大學(xué)鄭莉31.1Java語(yǔ)言與面向?qū)ο蟮某绦蛟O(shè)計(jì)Java語(yǔ)言是一個(gè)面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。除了面向?qū)ο蟮奶攸c(diǎn)以外,Java語(yǔ)言還在安全性、平臺(tái)無(wú)關(guān)性、支持多線(xiàn)程、內(nèi)存管理等許多方面具有卓越的優(yōu)點(diǎn)。51.1.1面向?qū)ο蟮某绦蛟O(shè)計(jì)思想計(jì)算機(jī)程序設(shè)計(jì)對(duì)問(wèn)題進(jìn)行抽象用計(jì)算機(jī)語(yǔ)言表述,利用機(jī)器求解Java語(yǔ)言與面向?qū)ο蟮某绦蛟O(shè)計(jì)61.1.1面向?qū)ο蟮某绦蛟O(shè)計(jì)思想(續(xù))程序設(shè)計(jì)語(yǔ)言發(fā)展的歷程機(jī)器語(yǔ)言匯編語(yǔ)言高級(jí)語(yǔ)言面向?qū)ο蟮恼Z(yǔ)言Java語(yǔ)言與面向?qū)ο蟮某绦蛟O(shè)計(jì)71.1.1面向?qū)ο蟮某绦蛟O(shè)計(jì)思想(續(xù))例:構(gòu)建一個(gè)汽車(chē)類(lèi),需要提取所有汽車(chē)對(duì)象的共有的狀態(tài)和行為。將狀態(tài)用變量表示,行為用方法表示。classCar{intcolor_number;intdoor_number;intspeed;

……voidbrake(){…}voidspeedUp(){…};voidslowDown(){…}; ……}Java語(yǔ)言與面向?qū)ο蟮某绦蛟O(shè)計(jì)91.1.1面向?qū)ο蟮某绦蛟O(shè)計(jì)思想(續(xù))面向?qū)ο蠹夹g(shù)給軟件發(fā)展帶來(lái)的益處可重用性可靠性面向?qū)ο笳Z(yǔ)言的基本特征抽象和封裝繼承性多態(tài)性Java語(yǔ)言與面向?qū)ο蟮某绦蛟O(shè)計(jì)101.1.2Java語(yǔ)言的特點(diǎn)面向?qū)ο蟀踩訨ava不支持指針Java的內(nèi)部安全措施平臺(tái)無(wú)關(guān)性編譯后的字節(jié)碼對(duì)應(yīng)于Java虛擬機(jī),因此可在不同平臺(tái)上運(yùn)行多線(xiàn)程Java是第一個(gè)在語(yǔ)言級(jí)提供內(nèi)至多線(xiàn)程支持的高級(jí)語(yǔ)言?xún)?nèi)存管理Java對(duì)內(nèi)存自動(dòng)進(jìn)行管理并進(jìn)行垃圾回收J(rèn)ava語(yǔ)言與面向?qū)ο蟮某绦蛟O(shè)計(jì)111.1.2Java語(yǔ)言的特點(diǎn)(續(xù))Java與C++的區(qū)別Java中沒(méi)有#include和#define等預(yù)處理功能,用import語(yǔ)來(lái)句包含其它類(lèi)和包;Java中沒(méi)有structure,union及typedef;Java中沒(méi)有不屬于類(lèi)成員的函數(shù),沒(méi)有指針和多重繼承,Java只支持單重繼承;Java中禁用goto,但goto還是保留的關(guān)鍵字;Java中沒(méi)有操作符重載;Java中沒(méi)有全局變量,可以在類(lèi)中定義公用、靜態(tài)的數(shù)據(jù)成員實(shí)現(xiàn)相同功能;…...Java語(yǔ)言與面向?qū)ο蟮某绦蛟O(shè)計(jì)131.1.3Java類(lèi)庫(kù)組成Java程序的最小單位是類(lèi),類(lèi)封裝了數(shù)據(jù)與處理數(shù)據(jù)的方法。對(duì)于大多數(shù)常用的功能,有大量已經(jīng)編譯好、經(jīng)過(guò)測(cè)試的類(lèi),這些類(lèi)的集合就是Java類(lèi)庫(kù)。Java類(lèi)庫(kù)主要是隨編譯器一起提供,也有些類(lèi)庫(kù)是由獨(dú)立軟件開(kāi)發(fā)商提供的。Java語(yǔ)言與面向?qū)ο蟮某绦蛟O(shè)計(jì)141.2Java程序概述Java開(kāi)發(fā)環(huán)境Application舉例Applet舉例Servlet舉例JSP舉例151.2.1Java開(kāi)發(fā)環(huán)境(續(xù))一次編寫(xiě),各處運(yùn)行Java程序概述17編譯,沒(méi)有絕對(duì)地址將.class文件裝載到內(nèi)存Java源程序(.java文件)Java編譯器JavaBytecode(.class文件)系統(tǒng)執(zhí)行平臺(tái)Bytecode解釋器Bytecode載入器字節(jié)碼校驗(yàn)器不存在偽造的指針不違反訪(fǎng)問(wèn)權(quán)限不非法訪(fǎng)問(wèn)對(duì)象不導(dǎo)致操作棧溢出Java的編譯與執(zhí)行Java程序概述

1.2.1Java開(kāi)發(fā)環(huán)境(續(xù))18

1.2.1Java開(kāi)發(fā)環(huán)境(續(xù))JavaAPIs(應(yīng)用程序接口)經(jīng)過(guò)編譯的,可在程序中使用的Java代碼標(biāo)準(zhǔn)庫(kù)。JavaVM(虛擬機(jī))Java程序由Java虛擬機(jī)程序執(zhí)行(或解釋執(zhí)行)。Java程序JavaAPIsJava虛擬機(jī)計(jì)算機(jī)系統(tǒng)Java平臺(tái)Java程序概述191.2.1Java開(kāi)發(fā)環(huán)境(續(xù))J2SE——J2SDK的核心部分開(kāi)發(fā)工具編譯器調(diào)試器文檔制作工具運(yùn)行環(huán)境Java虛擬機(jī)組成Java2平臺(tái)API的類(lèi)。幫助文檔附加庫(kù)Java程序(Applets和Applications)的演示……Java程序概述21Java開(kāi)發(fā)工具包括Javac:Java編譯器,用來(lái)將java程序編譯成Bytecode。Java:Java解釋器,執(zhí)行已經(jīng)轉(zhuǎn)換成Bytecode的java應(yīng)用程序。Jdb:Java調(diào)試器,用來(lái)調(diào)試java程序。Javap:反編譯,將類(lèi)文件還原回方法和變量。Javadoc:文檔生成器,創(chuàng)建HTML文件。Appletviwer:Applet解釋器,用來(lái)解釋已經(jīng)轉(zhuǎn)換成Bytecode的java小應(yīng)用程序。1.2.1Java開(kāi)發(fā)環(huán)境(續(xù))Java程序概述221.2.1Java開(kāi)發(fā)環(huán)境(續(xù))環(huán)境安裝——以j2sdk1.4.0為例下載地址下載文件j2sdk-1_4_0-win.exej2sdk-1_4_0-doc.zip安裝直接運(yùn)行“j2sdk-1_4_0-win.exe”。文檔解開(kāi)“j2sdk-1_4_0-doc.zip”。Java程序概述231.2.1Java開(kāi)發(fā)環(huán)境(續(xù))幾種集成開(kāi)發(fā)環(huán)境netBeansJcreatorLEBorlandJBuilderMicrosoftVisualJ++IBM:VisualAgeforJavaSunONEStudioJava程序概述251.2.2Application舉例Application運(yùn)行在客戶(hù)端Java虛擬機(jī)上的Java程序可在客戶(hù)端機(jī)器中讀寫(xiě)可使用自己的主窗口、標(biāo)題欄和菜單程序可大可小能夠以命令行方式運(yùn)行主類(lèi)必須有一個(gè)主方法main(),作為程序運(yùn)行的入口。Java程序概述26Applet——小應(yīng)用程序運(yùn)行于支持Java的Web瀏覽器中瀏覽器的解釋器把字節(jié)碼轉(zhuǎn)換成和機(jī)器匹配的指令,在網(wǎng)頁(yè)中執(zhí)行小程序。Applet和Application的差別:運(yùn)行環(huán)境的不同,小應(yīng)用程序總是放在Web瀏覽器的圖形用戶(hù)界面中1.2.3Applet舉例Java程序概述29Applet的優(yōu)點(diǎn)Web瀏覽器軟件包括很多小應(yīng)用程序運(yùn)行所需的功能Applet的局限性在客戶(hù)端主機(jī)的文件系統(tǒng)中讀/寫(xiě)受限不能運(yùn)行客戶(hù)端主機(jī)的任何程序僅能在服務(wù)器和客戶(hù)端之間建立聯(lián)系1.2.3Applet舉例(續(xù))Java程序概述30JAVAApplet:importjava.awt.Graphics;importjava.applet.Applet;publicclassMyAppletextendsApplet{ publicStrings; publicvoidinit() {s=newString("HelloWorld!");} publicvoidpaint(Graphicsg) {g.drawString(s,25,25);}}HTML:<appletcode=MyApplet.classwidth=400height=400></applet>1.2.3Applet舉例(續(xù))

——例1-2Java程序概述311.2.3Applet舉例(續(xù))

——例1-2注釋Graphics類(lèi)使得applet繪制直線(xiàn)、矩形、橢圓形、字符串等方法init()初始化,實(shí)現(xiàn)了字符串的創(chuàng)建方法paint()中g(shù)為Graphics類(lèi)的對(duì)象。調(diào)用了Graphics的drawString方法繪制字符串。此方法執(zhí)行的結(jié)果就是從坐標(biāo)(60,40)開(kāi)始繪制出字符串HelloWorld!。Java程序概述321.2.3Applet舉例(續(xù))

——例1-2運(yùn)行用支持Java的瀏覽器,比如IE6.0,打開(kāi)Applet1.htmlJava程序概述331.2.3Applet舉例(續(xù))

——例1-2運(yùn)行用Java自帶的appletviewer瀏覽輸入:appletviewerApplet1.htmlJava程序概述34Servlet運(yùn)行在服務(wù)器端,響應(yīng)客戶(hù)端請(qǐng)求,擴(kuò)展了服務(wù)器的功能運(yùn)行Servlet需要服務(wù)器的支持,需要在服務(wù)器中進(jìn)行部署Servlet用到的包在J2EE的API中能找到所有的servlet都必須實(shí)現(xiàn)Servlet接口1.2.4Servlet舉例Java程序概述35程序首先構(gòu)建HttpServletRequest,并建立一個(gè)數(shù)據(jù)表單;點(diǎn)擊submit按鈕后,servlet再次被調(diào)用,并產(chǎn)生一個(gè)含有表單的網(wǎng)頁(yè)。publicclassEchoFormextendsHttpServlet{publicvoidservice(HttpServletRequestreq,

HttpServletResponseres)throws

IOException{res.setContentType("text/html");PrintWriterout=res.getWriter();Enumerationflds=req.getParameterNames();

1.2.5Servlet舉例(續(xù))

——例1-3Java程序概述361.2.5Servlet舉例(續(xù))

——例1-3if(!flds.hasMoreElements()){out.print("<html>");out.print("<formmethod=\"POST\""

+"action=\"EchoForm\">");for(inti=0;i<10;i++)out.print("<b>Field"+i+"</b>"+"<inputtype=\"text\""+"size=\"20\“name=\"Field"+i+"\"value=\"Value"+i+"\"><br>");out.print("<INPUTTYPE=submitname=submit

Value=\"Submit\"></form></html>");}Java程序概述37else{out.print("<h1>Yourformcontained:</h1>");while(flds.hasMoreElements()){Stringfield=(String)flds.nextElement();Stringvalue=req.getParameter(field);out.print(field+"="+value+"<br>");}}out.close();}}1.2.5Servlet舉例(續(xù))

——例1-3Java程序概述38JSP就是嵌入了Java代碼的HTML

JSP和servlet同是服務(wù)器端的技術(shù)。實(shí)際上,JSP文檔在后臺(tái)被自動(dòng)轉(zhuǎn)換成servlet

使用JSP便于實(shí)現(xiàn)網(wǎng)頁(yè)的動(dòng)靜分離相對(duì)于Servlet,JSP在服務(wù)器的部署簡(jiǎn)單1.2.6JSP舉例Java程序概述39<html><body><H1>Thetimeinsecondis:<%=System.currentTimeMillis()/1000%></H1></body></html>1.2.6JSP舉例(續(xù))Java程序概述401.3基本數(shù)據(jù)類(lèi)型與表達(dá)式變量與常量基本數(shù)據(jù)類(lèi)型表達(dá)式與運(yùn)算符類(lèi)型轉(zhuǎn)換411.3.1變量與常量

變量一個(gè)由標(biāo)識(shí)符命名的項(xiàng)每個(gè)變量都有類(lèi)型,例如int類(lèi)型或Object類(lèi)型,變量還有作用域.變量的值可以被改變.常量常量一旦被初始化以后就不可改變?;緮?shù)據(jù)類(lèi)型與表達(dá)式42標(biāo)識(shí)符標(biāo)識(shí)符是一個(gè)名稱(chēng),與內(nèi)存中的某個(gè)位置(地址)相對(duì)應(yīng)標(biāo)識(shí)符的第一個(gè)字符必須是下列字符之一:大寫(xiě)字母(A-Z)小寫(xiě)字母(a-z)下劃線(xiàn)(_)美元符號(hào)($)標(biāo)識(shí)符的第二個(gè)字符及后繼字符必須是:上述列表中的任意字符數(shù)字字符(0-9)基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.1變量與常量(續(xù))

43整數(shù)byte8bits-128~+127short16bits-32768~+32767int32bits–231~(231-1)long64bits–263~(263-1)char8bits0~65535基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.2基本數(shù)據(jù)類(lèi)型

44整數(shù)運(yùn)算比較運(yùn)算符(關(guān)系運(yùn)算符)算術(shù)比較運(yùn)算符<,<=,>,and>=

算術(shù)相等比較運(yùn)算符==

and!=算術(shù)運(yùn)算符一元運(yùn)算符+和-+,-*,/,和%(取余)自增/自減運(yùn)算符++/--移位運(yùn)算符<<,>>,and>>>

位運(yùn)算符~,&,|,and^

條件運(yùn)算符?:

類(lèi)型轉(zhuǎn)換運(yùn)算符字符串連接運(yùn)算符+

基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.2基本數(shù)據(jù)類(lèi)型(續(xù))

45浮點(diǎn)數(shù)

float單精度浮點(diǎn)數(shù)32-bit-m·2e~m·2em是一個(gè)小于224的正整數(shù)e是一個(gè)介于-149和104之間(含)的整數(shù)double雙精度浮點(diǎn)數(shù)64-bit-m·2e~m·2em是一個(gè)小于253的正整數(shù)e是一個(gè)介于-1045和1000之間(含)的整數(shù)基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.2基本數(shù)據(jù)類(lèi)型(續(xù))

46浮點(diǎn)運(yùn)算比較運(yùn)算符(關(guān)系運(yùn)算符)算術(shù)比較運(yùn)算符<,<=,>,and>=

算術(shù)相等比較運(yùn)算符==

and!=算術(shù)運(yùn)算符一元運(yùn)算符+和-+,-*,/,和%(取余)自增/自減運(yùn)算符++/--移位運(yùn)算符<<,>>,and>>>

位運(yùn)算符~,&,|,and^

條件運(yùn)算符?:

類(lèi)型轉(zhuǎn)換運(yùn)算符字符串連接運(yùn)算符+

基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.2基本數(shù)據(jù)類(lèi)型(續(xù))

47布爾類(lèi)型和布爾值布爾類(lèi)型表示一個(gè)邏輯量,有兩個(gè)取值:true和false例如:booleanis_salaried;

booleanis_hourly;

is_salaried=true;//將is_salaried設(shè)置為true

is_hourly=false;//將is_hourly設(shè)置為false

基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.2基本數(shù)據(jù)類(lèi)型(續(xù))

48布爾運(yùn)算符關(guān)系運(yùn)算符==

and!=邏輯“非”運(yùn)算符!

邏輯運(yùn)算符&,^,和

|條件“與”

和條件“或”運(yùn)算符&&和||條件運(yùn)算符?:字符串連接運(yùn)算符+基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.2基本數(shù)據(jù)類(lèi)型(續(xù))

49String——字符串String是一個(gè)類(lèi)String類(lèi)JDK標(biāo)準(zhǔn)類(lèi)集合中的一部分Stringanimal="walrus";基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.2基本數(shù)據(jù)類(lèi)型(續(xù))

50文字量直接出現(xiàn)在程序中并被編譯器直接使用的值.整數(shù)文字量十進(jìn)制如:15十六進(jìn)制如:0xff八進(jìn)制如:0377基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.2基本數(shù)據(jù)類(lèi)型(續(xù))

51基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.2基本數(shù)據(jù)類(lèi)型(續(xù))

浮點(diǎn)文字量一個(gè)浮點(diǎn)文字量包括以下幾個(gè)部分整數(shù)部分小數(shù)點(diǎn)小數(shù)部分指數(shù)(eorE)類(lèi)型后綴(forFforfloat,dorDfordouble)float類(lèi)型文字量舉例:1e1f2.f.3f0f3.14f6.022137e+23fdouble

類(lèi)型文字量舉例:1e12..30.03.141e-9d1e137布爾文字量布爾類(lèi)型只有兩個(gè)值,由文字量true

和false表示52字符文字量一個(gè)字符文字量表示為一個(gè)字符或者一個(gè)轉(zhuǎn)義序列,用單引號(hào)括起例如‘a(chǎn)’

‘Z’

‘@’

格式字符\bbackspaceBS\thorizontaltabHT\nlinefeedLF\fformfeedFF\rcarriagereturnCR\"doublequote"\'singlequote'\\backslash\基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.2基本數(shù)據(jù)類(lèi)型(續(xù))

53字符串文字量由零個(gè)或多個(gè)字符組成,以雙引號(hào)括起每一個(gè)字符都可以用轉(zhuǎn)義序列來(lái)表示例如:""http://空字符串"\""http://只包含"的字符串"Thisisastring"http://有16個(gè)字符的字符串"Thisisa"+"string"

//字符串常量表達(dá)式,由兩個(gè)字符串常量組成

基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.2基本數(shù)據(jù)類(lèi)型(續(xù))

54publicclassex1_1{publicstaticvoidmain(Stringargs[]){finalintPRICE=30;finaldoublePI=3.141592654;intnum,total;doublev,r,h;num=10;total=num*PRICE;System.out.println(total);r=2.5;h=3.2;v=PI*r*r*h;System.out.println(v);}}變量聲明變量文字量常量聲明基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.2基本數(shù)據(jù)類(lèi)型(續(xù))

55表達(dá)式是由一系列變量、運(yùn)算符、方法調(diào)用構(gòu)成的,表達(dá)式可以計(jì)算出一個(gè)值來(lái)程序中的很多工作是通過(guò)計(jì)算表達(dá)式的值來(lái)完成的。有時(shí)需要的是表達(dá)式的副作用,例如賦值表達(dá)式將數(shù)值賦給變量更多時(shí)候起作用的是表達(dá)式的值,這個(gè)值可以用作方法的參數(shù),或更大的表達(dá)式的操作數(shù),或者影響語(yǔ)句的執(zhí)行順序基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.3表達(dá)式與運(yùn)算符

56算術(shù)運(yùn)算符運(yùn)算符++和--例如:i++;--j;一元運(yùn)算符+和–加法運(yùn)算符+和-乘法運(yùn)算符*,/,和%

基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.3表達(dá)式與運(yùn)算符(續(xù))

57賦值運(yùn)算符簡(jiǎn)單賦值運(yùn)算符=復(fù)合賦值運(yùn)算符*=/=%=+=-=<<=>>=>>>=

&=^=|=

E1

op=E2

等效于E1

=

(T)((E1)

op

(E2)),其中T

是E1的類(lèi)型基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.3表達(dá)式與運(yùn)算符(續(xù))

58舉例a=5 表達(dá)式的值為5a=b=c=5 表達(dá)式的值以及a,b,c的值都是5

a=5+(c=6)表達(dá)式的值是11,a是11,c是6a=(b=4)+(c=6)表達(dá)式的值是10,

a是10,b是4,c是6a=(b=10)/(c=2) 表達(dá)式的值是5,

a是5,b是10,c是2a+=a-=a*a等效于

a=a+(a=a-a*a)基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.3表達(dá)式與運(yùn)算符(續(xù))

59關(guān)系運(yùn)算符關(guān)系表達(dá)式的類(lèi)型永遠(yuǎn)是布爾類(lèi)型(bool).算術(shù)比較運(yùn)算符<,<=,>,and>=類(lèi)型比較運(yùn)算符instanceof例如:einstanceofPoint//Point是一個(gè)類(lèi)基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.3表達(dá)式與運(yùn)算符(續(xù))

60相等關(guān)系運(yùn)算符數(shù)字相等運(yùn)算符==,!=布爾相等運(yùn)算符==,!=引用相等運(yùn)算符==,!=基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.3表達(dá)式與運(yùn)算符(續(xù))

61邏輯運(yùn)算符“與”運(yùn)算&&如果兩個(gè)操作數(shù)的值都為true運(yùn)算結(jié)果為true;否則,結(jié)果為false.“或”運(yùn)算||如果兩個(gè)操作數(shù)的值都為false運(yùn)算結(jié)果為false;否則,結(jié)果true“非”運(yùn)算符!操作數(shù)的類(lèi)型必須是布爾類(lèi)型如果操作數(shù)的結(jié)果為false,則表達(dá)式的結(jié)果為

true,如果操作數(shù)的結(jié)果為true則表達(dá)式的結(jié)果為false基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.3表達(dá)式與運(yùn)算符(續(xù))

62條件運(yùn)算符(表達(dá)式1?表達(dá)式2:表達(dá)式3)首先計(jì)算表達(dá)式1如果表達(dá)式1的值為true,則選擇表達(dá)式2的值如果表達(dá)式1的值為false,則選擇表達(dá)式3的值基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.3表達(dá)式與運(yùn)算符(續(xù))

63每個(gè)表達(dá)式都有類(lèi)型如果表達(dá)式的類(lèi)型對(duì)于上下文不合適有時(shí)可能會(huì)導(dǎo)致編譯錯(cuò)誤有時(shí)語(yǔ)言會(huì)進(jìn)行隱含類(lèi)型轉(zhuǎn)換基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.4類(lèi)型轉(zhuǎn)換

64擴(kuò)展轉(zhuǎn)換byte,short,int,long,float,double

char從一種整數(shù)類(lèi)型到另一種整數(shù)類(lèi)型,或者從float到double的轉(zhuǎn)換不損失任何信息從整數(shù)類(lèi)形向float或double轉(zhuǎn)換,會(huì)損失精度窄化轉(zhuǎn)換double,float,long,int,short,byte,char窄化轉(zhuǎn)換可能會(huì)丟失信息基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.4類(lèi)型轉(zhuǎn)換(續(xù))

65字符串轉(zhuǎn)換任何類(lèi)型(包括null類(lèi)型)都可以轉(zhuǎn)換為字符串類(lèi)型基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.4類(lèi)型轉(zhuǎn)換(續(xù))

66賦值轉(zhuǎn)換將表達(dá)式類(lèi)型轉(zhuǎn)換為制定變量的類(lèi)型方法調(diào)用轉(zhuǎn)換適用于方法或構(gòu)造方法調(diào)用中的每一個(gè)參數(shù)強(qiáng)制轉(zhuǎn)換將一個(gè)表達(dá)式轉(zhuǎn)換為指定的類(lèi)型例如(float)5.0字符串轉(zhuǎn)換只當(dāng)一個(gè)操作數(shù)是String類(lèi)型時(shí),

適用于+運(yùn)算符的操作數(shù)基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.4類(lèi)型轉(zhuǎn)換(續(xù))

67數(shù)字提升

將算術(shù)運(yùn)算符的操作數(shù)轉(zhuǎn)換為共同類(lèi)型一元數(shù)字提升如果一個(gè)操作數(shù)是byte,short,或char類(lèi)型,一元數(shù)字提升通過(guò)擴(kuò)展轉(zhuǎn)換將它轉(zhuǎn)換為int類(lèi)型二元數(shù)字提升二元數(shù)字提升作用在特定操作符的操作數(shù)上

*,/,%,+,-,<,<=,>,>=,==,!=,&,^,|and?:在必要時(shí)使用擴(kuò)展轉(zhuǎn)換來(lái)轉(zhuǎn)換操作數(shù)類(lèi)型基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.4類(lèi)型轉(zhuǎn)換(續(xù))

68標(biāo)準(zhǔn)輸入輸出簡(jiǎn)介標(biāo)準(zhǔn)輸入流System.in標(biāo)準(zhǔn)輸出流System.out例如System.out.println("Helloworld!");基本數(shù)據(jù)類(lèi)型與表達(dá)式1.3.4類(lèi)型轉(zhuǎn)換(續(xù))

69數(shù)組由同一類(lèi)型的一連串對(duì)象或者基本數(shù)據(jù)組成,并封裝在同一個(gè)標(biāo)識(shí)符(數(shù)組名稱(chēng))下。數(shù)組是對(duì)象動(dòng)態(tài)初始化可以賦值給Object類(lèi)型的變量在數(shù)組中可以調(diào)用類(lèi)Object的所有方法1.4數(shù)組的概念70數(shù)組元素?cái)?shù)組中的變量被稱(chēng)作數(shù)組的元素元素沒(méi)有名字,通過(guò)數(shù)組名字和非負(fù)整數(shù)下標(biāo)值引用數(shù)組元素。每個(gè)數(shù)組都有一個(gè)由publicfinal修飾的成員變量:length,即數(shù)組含有元素的個(gè)數(shù)(length可以是正數(shù)或零)數(shù)組的概念1.4數(shù)組的概念(續(xù))711.5數(shù)組的創(chuàng)建和引用數(shù)組的聲明數(shù)組的創(chuàng)建數(shù)組元素的初始化數(shù)組的引用多維數(shù)組72數(shù)組的創(chuàng)建和引用1.5.1數(shù)組的聲明

聲明(Declaration)聲明數(shù)組時(shí)無(wú)需指明數(shù)組元素的個(gè)數(shù),也不為數(shù)組元素分配內(nèi)存空間不能直接使用,必須經(jīng)過(guò)初始化分配內(nèi)存后才能使用73Type[]arrayName;

例如:int[]intArray;String[]stringArray;

TypearrayName[];

例如:intintArray[];

StringstringArray[];1.5.1數(shù)組的聲明(續(xù))

數(shù)組的創(chuàng)建和引用74用關(guān)鍵字new構(gòu)成數(shù)組的創(chuàng)建表達(dá)式,可以指定數(shù)組的類(lèi)型和數(shù)組元素的個(gè)數(shù)。元素個(gè)數(shù)可以是常量也可以是變量

基本類(lèi)型數(shù)組的每個(gè)元素都是一個(gè)基本類(lèi)型的變量;引用類(lèi)型數(shù)組的每個(gè)元素都是對(duì)象的的引用

1.5.2數(shù)組的創(chuàng)建

數(shù)組的創(chuàng)建和引用75arryName=newType[componetsnumber];例如: int[]ai;ai=newint[10]; String[]s;s=newString[3];或者可以將數(shù)組的聲明和創(chuàng)建一并執(zhí)行 intai[]=newint[10];可以在一條聲明語(yǔ)句中創(chuàng)建多個(gè)數(shù)組

String[]s1=newString[3],s2=newString[8];1.5.2數(shù)組的創(chuàng)建(續(xù))

數(shù)組的創(chuàng)建和引用76聲明數(shù)組名時(shí),給出了數(shù)組的初始值,程序便會(huì)利用數(shù)組初始值創(chuàng)建數(shù)組并對(duì)它的各個(gè)元素進(jìn)行初始化

int a[]={22,33,44,55};

創(chuàng)建數(shù)組的時(shí),如果沒(méi)有指定初始值,數(shù)組便被賦予默認(rèn)值初始值。

基本類(lèi)型數(shù)值數(shù)據(jù),默認(rèn)的初始值為0;boolean類(lèi)型數(shù)據(jù),默認(rèn)值為false;引用類(lèi)型元素的默認(rèn)值為null。

程序也可以在數(shù)組被構(gòu)造之后改變數(shù)組元素值數(shù)組的創(chuàng)建和引用1.5.3數(shù)組元素的初始化

77通過(guò)下面的表達(dá)式引用數(shù)組的一個(gè)元素:arrayName[index]數(shù)組下標(biāo)必須是int,short,byte,或者

char.下標(biāo)從零開(kāi)始計(jì)數(shù).元素的個(gè)數(shù)即為數(shù)組的長(zhǎng)度,可以通過(guò)arryName.length引用元素下標(biāo)最大值為

length–1,如果超過(guò)最大值,將會(huì)產(chǎn)生數(shù)組越界異常(ArrayIndexOutOfBoundsException)

數(shù)組的創(chuàng)建和引用1.5.4數(shù)組的引用

78int[]data=newint[10];data[-1]

非法的data[10]

非法的

data[1.5]

非法的

data[0]

合法的

data[9]

合法的

數(shù)組的創(chuàng)建和引用1.5.4數(shù)組的引用(續(xù))

79intvalues[]=newint[7];intindex;index=0;values[index]=71;index=5;values[index]=23;index=3;values[2+2]=values[index-3];數(shù)組的創(chuàng)建和引用1.5.4數(shù)組的引用(續(xù))

80publicclassMyArray{publicstaticvoidmain(String[]args){intmyArray[];//聲明數(shù)組myArray=newint[10];//創(chuàng)建數(shù)組System.out.println("Index\t\tValue");for(inti=0;i<myArray.length;i++)System.out.println(i+"\t\t"+myArray[i]);

//證明數(shù)組元素默認(rèn)初始化為0//myArray[10]=100;//將產(chǎn)生數(shù)組越界異常}}數(shù)組的創(chuàng)建和引用1.5.4數(shù)組的引用(續(xù))

81classGauss{publicstaticvoidmain(String[]args){int[]ia=newint[101];for(inti=0;i<ia.length;i++)ia[i]=i;intsum=0;for(inti=0;i<ia.length;i++)sum+=ia[i];System.out.println(sum);}}輸出:5050數(shù)組的創(chuàng)建和引用1.5.4數(shù)組的引用(續(xù))

82數(shù)組名是一個(gè)引用: 例子publicclassArrays{publicstaticvoidmain(String[]args){int[]a1={1,2,3,4,5};int[]a2;a2=a1;for(inti=0;i<a2.length;i++)a2[i]++;for(inti=0;i<a1.length;i++)System.out.println("a1["+i+"]="+a1[i]);}}數(shù)組的創(chuàng)建和引用1.5.4數(shù)組的引用(續(xù))

831.5.4數(shù)組的引用(續(xù))運(yùn)行結(jié)果:a1[0]=2a1[1]=3a1[2]=4a1[3]=5a1[4]=6數(shù)組的創(chuàng)建和引用84字符串引用構(gòu)成的數(shù)組: String[]strArray; strArray=newString[8]; strArray[0]="Hello";數(shù)組的創(chuàng)建和引用1.5.4數(shù)組的引用(續(xù))

85例子publicclassArrayOfStringsDemo{publicstaticvoidmain(String[]args){String[]anArray={"StringOne","StringTwo","StringThree"};for(inti=0;i<anArray.length;i++){System.out.println(anArray[i].toLowerCase());}}}數(shù)組的創(chuàng)建和引用1.5.4數(shù)組的引用(續(xù))

運(yùn)行結(jié)果:stringonestringtwostringthree86數(shù)組的復(fù)制: publicstaticvoidarraycopy(Object

source,int

srcIndex,Object

dest,int

destIndex,int

length)source數(shù)組的創(chuàng)建和引用1.5.4數(shù)組的引用(續(xù))

87

例子publicclassArrayCopyDemo{publicstaticvoidmain(String[]args){char[]copyFrom={'d','e','c','a','f','f','e','i','n','a','t','e','d'};char[]copyTo=newchar[7];System.arraycopy(copyFrom,2,copyTo,0,7);System.out.println(newString(copyTo));}}數(shù)組的創(chuàng)建和引用1.5.4數(shù)組的引用(續(xù))

88int[][]gradeTable;……gradeTable[0][1]為42gradeTable[3][4]為93gradeTable[6][2]為78數(shù)組的創(chuàng)建和引用1.5.5多維數(shù)組

89二維數(shù)組的聲明和構(gòu)造int[][]myArray;myArray可以存儲(chǔ)一個(gè)指向2維整數(shù)數(shù)組的引用。其初始值為[][]myArray=newint[3][5];建立一個(gè)數(shù)組對(duì)象,把引用存儲(chǔ)到myArray。這個(gè)數(shù)組所有元素的初始值為零。int[][]myArray={{8,1,2,2,9},{1,9,4,0,3},{0,3,0,0,7}};建立一個(gè)數(shù)組并為每一個(gè)元素賦值。數(shù)組的創(chuàng)建和引用1.5.5多維數(shù)組(續(xù))

90二維數(shù)組的長(zhǎng)度 classUnevenExample2 {publicstaticvoidmain(String[]arg) {int[][]uneven= {{1,9,4}, {0,2}, {0,1,2,3,4}}; System.out.println("Lengthis:"+ uneven.length); } }數(shù)組的創(chuàng)建和引用1.5.5多維數(shù)組(續(xù))

運(yùn)行結(jié)果:Lengthis:391每行的長(zhǎng)度:

classUnevenExample3 { publicstaticvoidmain(String[]arg) { //聲明并構(gòu)造一個(gè)2維數(shù)組 int[][]uneven= {{1,9,4}, {0,2}, {0,1,2,3,4}};數(shù)組的創(chuàng)建和引用1.5.5多維數(shù)組(續(xù))

92//數(shù)組的長(zhǎng)度(行數(shù))System.out.println("Lengthofarrayis:"+uneven.length);//數(shù)組每一行的長(zhǎng)度(列數(shù))System.out.println("Lengthofrow[0]is:"+uneven[0].length);System.out.println("Lengthofrow[1]is:"+uneven[1].length);System.out.println("Lengthofrow[2]is:"+uneven[2].length);}}1.5.5多維數(shù)組(續(xù))數(shù)組的創(chuàng)建和引用運(yùn)行結(jié)果:Lengthofarrayis:3Lengthofrow[0]is:3Lengthofrow[1]is:2Lengthofrow[2]is:593int[][]myArray;myArray=newint[3][];myArray[0]=newint[3];int[]x={0,2};int[]y={0,1,2,3,4};myArray[1]=x;myArray[2]=y;數(shù)組的創(chuàng)建和引用1.5.5多維數(shù)組(續(xù))941.6本章小結(jié)本章內(nèi)容Java開(kāi)發(fā)環(huán)境Java語(yǔ)言的特點(diǎn)基礎(chǔ)語(yǔ)法復(fù)習(xí)要求下載、安裝J2se熟悉命令行方式編譯、運(yùn)行Java程序熟悉一種集成開(kāi)發(fā)環(huán)境95第二章

類(lèi)與對(duì)象的基本概念清華大學(xué)鄭莉JAVA語(yǔ)言程序設(shè)計(jì)96目錄2.1面向?qū)ο蟮某绦蛟O(shè)計(jì)方法概述2.2類(lèi)與對(duì)象2.3對(duì)象初始化和回收2.4應(yīng)用舉例2.5UML簡(jiǎn)介2.6本章小節(jié)972.1面向?qū)ο蟮某绦蛟O(shè)計(jì)方法概述面向?qū)ο蟮某绦蛟O(shè)計(jì)與結(jié)構(gòu)化程序設(shè)計(jì)方法相比,更符合人類(lèi)認(rèn)識(shí)現(xiàn)實(shí)世界的思維方式

已成為程序設(shè)計(jì)的主流方向涉及的主要概念抽象封裝繼承多態(tài)

98對(duì)象現(xiàn)實(shí)世界中萬(wàn)物皆對(duì)象都具有各自的屬性,對(duì)外界都呈現(xiàn)各自的行為

程序中一切都是對(duì)象都具有標(biāo)識(shí)(identity),屬性和行為(方法)通過(guò)一個(gè)或多個(gè)變量來(lái)保存其狀態(tài)通過(guò)方法(method)實(shí)現(xiàn)他的行為2.1面向?qū)ο蟮某绦蛟O(shè)計(jì)方法概述(續(xù))面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述99類(lèi)將屬性及行為相同或相似的對(duì)象歸為一類(lèi)類(lèi)可以看成是對(duì)象的抽象,代表了此類(lèi)對(duì)象所具有的共有屬性和行為在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,每一個(gè)對(duì)象都屬于某個(gè)特定的類(lèi),

面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述2.1面向?qū)ο蟮某绦蛟O(shè)計(jì)方法概述(續(xù))100結(jié)構(gòu)化程序設(shè)計(jì)通常由若干個(gè)程序模塊組成,每個(gè)程序模塊都可以是子程序或函數(shù)數(shù)據(jù)和功能分離,代碼難于維護(hù)和復(fù)用面向?qū)ο蟪绦蛟O(shè)計(jì)基本組成單位是類(lèi)程序在運(yùn)行時(shí)由類(lèi)生成對(duì)象,對(duì)象是面向?qū)ο蟪绦虻暮诵膶?duì)象之間通過(guò)發(fā)送消息進(jìn)行通信,互相協(xié)作完成相應(yīng)功能2.1面向?qū)ο蟮某绦蛟O(shè)計(jì)方法概述(續(xù))面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述1012.1.1抽象抽象忽略問(wèn)題中與當(dāng)前目標(biāo)無(wú)關(guān)的方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面計(jì)算機(jī)軟件開(kāi)發(fā)中所使用的抽象有過(guò)程抽象數(shù)據(jù)抽象面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述102過(guò)程抽象將整個(gè)系統(tǒng)的功能劃分為若干部分,強(qiáng)調(diào)功能完成的過(guò)程和步驟,而隱藏其具體的實(shí)現(xiàn)任何一個(gè)明確定義的功能操作都可被看作單個(gè)的實(shí)體,盡管這個(gè)操作實(shí)際上可能由一系列更低級(jí)的操作來(lái)完成基于過(guò)程抽象的兩個(gè)標(biāo)準(zhǔn)程序設(shè)計(jì)技術(shù)過(guò)程分解遞歸技術(shù)

2.1.1抽象(續(xù))

——過(guò)程抽象面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述103數(shù)據(jù)抽象將需要處理的數(shù)據(jù)和這些數(shù)據(jù)上的操作結(jié)合在一起,抽象成不同的抽象數(shù)據(jù)類(lèi)型每個(gè)抽象數(shù)據(jù)類(lèi)型既包含了數(shù)據(jù),也包含了針對(duì)這些數(shù)據(jù)的操作相對(duì)于過(guò)程抽象,數(shù)據(jù)抽象是更為合理的抽象方法2.1.1抽象(續(xù))

——數(shù)據(jù)抽象面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述104例:鐘表數(shù)據(jù)(屬性)intHour;intMinute;intSecond;方法(行為)SetTime();ShowTime();2.1.1抽象(續(xù))面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述105例:人數(shù)據(jù)(屬性)char*name;char*gender;intage;intid;方法(行為)生物行為Eat(),Step(),…社會(huì)行為Work(),Study(),…面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述2.1.1抽象(續(xù))1062.1.2封裝封裝是一種信息隱蔽技術(shù)利用抽象數(shù)據(jù)類(lèi)型將數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起用戶(hù)只能看到對(duì)象的封裝界面信息,對(duì)象的內(nèi)部細(xì)節(jié)對(duì)用戶(hù)是隱蔽的封裝的目的在于將對(duì)象的使用者和設(shè)計(jì)者分開(kāi),使用者不必知道行為實(shí)現(xiàn)的細(xì)節(jié),只需使用設(shè)計(jì)者提供的消息來(lái)訪(fǎng)問(wèn)對(duì)象面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述107封裝的定義清楚的邊界所有對(duì)象的內(nèi)部信息被限定在這個(gè)邊界內(nèi)接口對(duì)象向外界提供的方法,外界可以通過(guò)這些方法與對(duì)象進(jìn)行交互受保護(hù)的內(nèi)部實(shí)現(xiàn)功能的實(shí)現(xiàn)細(xì)節(jié),不能從類(lèi)外訪(fǎng)問(wèn)。2.1.2封裝(續(xù))面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述108封裝的意義在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,類(lèi)封裝了數(shù)據(jù)及對(duì)數(shù)據(jù)的操作,是程序中的最小模塊禁止了外界直接操作類(lèi)中的數(shù)據(jù),模塊與模塊之間只能通過(guò)嚴(yán)格控制的接口進(jìn)行交互,這使得模塊之間的偶合度大大降低保證了模塊具有較好的獨(dú)立性,程序維護(hù)和修改較為容易2.1.2封裝(續(xù))面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述1092.1.3繼承繼承是指新的類(lèi)可以獲得已有類(lèi)(稱(chēng)為超類(lèi)、基類(lèi)或父類(lèi))的屬性和行為,稱(chēng)新類(lèi)為已有類(lèi)的派生類(lèi)(也稱(chēng)為子類(lèi))在繼承過(guò)程中派生類(lèi)繼承了基類(lèi)的特性,包括方法和實(shí)例變量派生類(lèi)也可修改繼承的方法或增加新的方法,使之更適合特殊的需要有助于解決軟件的可重用性問(wèn)題,使程序結(jié)構(gòu)清晰,降低了編碼和維護(hù)的工作量面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述110單繼承任何一個(gè)派生類(lèi)都只有單一的直接父類(lèi)類(lèi)層次結(jié)構(gòu)為樹(shù)狀結(jié)構(gòu)多繼承一個(gè)類(lèi)可以有一個(gè)以上的直接父類(lèi)類(lèi)層次結(jié)構(gòu)為網(wǎng)狀結(jié)構(gòu),設(shè)計(jì)及實(shí)現(xiàn)比較復(fù)雜Java語(yǔ)言?xún)H支持單繼承2.1.3繼承(續(xù))面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述1112.1.4多態(tài)多態(tài)一個(gè)程序中同名的不同方法共存主要通過(guò)子類(lèi)對(duì)父類(lèi)方法的覆蓋來(lái)實(shí)現(xiàn)不同類(lèi)的對(duì)象可以響應(yīng)同名的消息(方法),具體的實(shí)現(xiàn)方法卻不同使語(yǔ)言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢(shì),很好地解決了應(yīng)用程序方法同名問(wèn)題面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述112類(lèi)與對(duì)象在程序中,對(duì)象是通過(guò)一種抽象數(shù)據(jù)類(lèi)型來(lái)描述的,這種抽象數(shù)據(jù)類(lèi)型稱(chēng)為類(lèi)(Class)一個(gè)類(lèi)是對(duì)一類(lèi)對(duì)象的描述。類(lèi)是構(gòu)造對(duì)象的模板對(duì)象是類(lèi)的具體實(shí)例2.2類(lèi)與對(duì)象1132.2.1類(lèi)的聲明聲明形式 [public][abstract|final]class類(lèi)名稱(chēng) [extends父類(lèi)名稱(chēng)][implements接口名稱(chēng)列表] { 變量成員聲明及初始化; 方法聲明及方法體; }類(lèi)與對(duì)象114關(guān)鍵字Class表明其后聲明的是一個(gè)類(lèi)。extends如果所聲明的類(lèi)是從某一父類(lèi)派生而來(lái),那么,父類(lèi)的名字應(yīng)寫(xiě)在extends之后implements如果所聲明的類(lèi)要實(shí)現(xiàn)某些接口,那么,接口的名字應(yīng)寫(xiě)在implements之后2.2.1類(lèi)的聲明(續(xù))類(lèi)與對(duì)象115修飾符可以有多個(gè),用來(lái)限定類(lèi)的使用方式public表明此類(lèi)為公有類(lèi)abstract指明此類(lèi)為抽象類(lèi)final指明此類(lèi)為終結(jié)類(lèi) 類(lèi)聲明體變量成員聲明及初始化可以有多個(gè)方法聲明及方法體可以有多個(gè)2.2.1類(lèi)的聲明(續(xù))類(lèi)與對(duì)象116鐘表類(lèi)publicclassClock{//成員變量inthour;intminute;intsecond;//成員方法publicvoidsetTime(intnewH,intnewM,intnewS){hour=newH;minute=newM;second=news;}publicvoidshowTime(){System.out.println(hour+":"+minute+":"+second);}}2.2.1類(lèi)的聲明(續(xù))

——例2_1類(lèi)與對(duì)象117變量和對(duì)象變量除了存儲(chǔ)基本數(shù)據(jù)類(lèi)型的數(shù)據(jù),還能存儲(chǔ)對(duì)象的引用,用來(lái)存儲(chǔ)對(duì)象引用的變量稱(chēng)為引用變量類(lèi)的對(duì)象也稱(chēng)為類(lèi)的實(shí)例2.2.2對(duì)象的聲明與引用類(lèi)與對(duì)象118對(duì)象的聲明格式

類(lèi)名變量名例如Clock是已經(jīng)聲明的類(lèi)名,則下面語(yǔ)句聲明的變量aclock將用于存儲(chǔ)該類(lèi)對(duì)象的引用:Clockaclock;聲明一個(gè)引用變量時(shí)并沒(méi)有對(duì)象生成2.2.2對(duì)象的聲明與引用(續(xù))類(lèi)與對(duì)象119對(duì)象的創(chuàng)建生成實(shí)例的格式:

new<類(lèi)名>()例如:aclock=newClock() 其作用是:在內(nèi)存中為此對(duì)象分配內(nèi)存空間返回對(duì)象的引用(reference,相當(dāng)于對(duì)象的存儲(chǔ)地址)引用變量可以被賦以空值例如:aclock=null;2.2.2對(duì)象的聲明與引用(續(xù))類(lèi)與對(duì)象1202.2.3數(shù)據(jù)成員數(shù)據(jù)成員表示Java類(lèi)的狀態(tài)聲明數(shù)據(jù)成員必須給出變量名及其所屬的類(lèi)型,同時(shí)還可以指定其他特性在一個(gè)類(lèi)中成員變量名是唯一的數(shù)據(jù)成員的類(lèi)型可以是Java中任意的數(shù)據(jù)類(lèi)型(簡(jiǎn)單類(lèi)型,類(lèi),接口,數(shù)組)分為實(shí)例變量和類(lèi)變量類(lèi)與對(duì)象121聲明格式 [public|protected|private] [static][final][transient][volatile] 變量數(shù)據(jù)類(lèi)型變量名1[=變量初值], 變量名2[=變量初值],…;格式說(shuō)明public、protected、private為訪(fǎng)問(wèn)控制符static指明這是一個(gè)靜態(tài)成員變量final指明變量的值不能被修改transient指明變量是臨時(shí)狀態(tài)volatile指明變量是一個(gè)共享變量2.2.3數(shù)據(jù)成員(續(xù))類(lèi)與對(duì)象122實(shí)例變量沒(méi)有static修飾的變量稱(chēng)為實(shí)例變量(InstanceVariables)用來(lái)存儲(chǔ)所有實(shí)例都需要的屬性信息,不同實(shí)例的屬性值可能會(huì)不同可通過(guò)下面的表達(dá)式訪(fǎng)問(wèn)實(shí)例屬性的值<實(shí)例名>.<實(shí)例變量名>2.2.3數(shù)據(jù)成員(續(xù))

——實(shí)例變量類(lèi)與對(duì)象123聲明一個(gè)表示圓的類(lèi),保存在文件Circle.java中。然后編寫(xiě)測(cè)試類(lèi),保存在文件ShapeTester.java中,并與Circle.java放在相同的目錄下publicclassCircle{intradius;}publicclassShapeTester{publicstaticvoidmain(Stringargs[]){Circlex;x=newCircle();System.out.println(x);System.out.println("radius="+x.radius);}}2.2.3數(shù)據(jù)成員(續(xù))

——例2_2類(lèi)與對(duì)象124編譯后運(yùn)行結(jié)果如下:Circle@26b249radius=0解釋@之后的數(shù)值為x所指的對(duì)象的存儲(chǔ)地址x的值及對(duì)象的狀態(tài)如圖2.2.3數(shù)據(jù)成員(續(xù))

——例2_2運(yùn)行結(jié)果類(lèi)與對(duì)象125聲明一個(gè)表示矩形的類(lèi),保存在Rectangle.java中;編寫(xiě)測(cè)試類(lèi),保存在ShapeTester.java中,二文件保存在相同的目錄下publicclassRectangle{doublewidth=10.128;doubleheight=5.734;}publicclassShapeTester{publicstaticvoidmain(Stringargs[]){Circlex;Rectangley; x=newCircle();y=newRectangle();System.out.println(x+""+y);}}2.2.3數(shù)據(jù)成員(續(xù))

——例2_3類(lèi)與對(duì)象126編譯后運(yùn)行結(jié)果如下:Circle@82f0dbRectangle@92d342解釋Circle及Rectangle類(lèi)對(duì)象的狀態(tài)如圖2.2.3數(shù)據(jù)成員(續(xù))

——例2_3運(yùn)行結(jié)果類(lèi)與對(duì)象127對(duì)ShapeTester類(lèi)進(jìn)行修改,使兩個(gè)實(shí)例具有不同的實(shí)例變量值publicclassShapeTester{publicstaticvoidmain(Stringargs[]){Circlex;Rectangley,z;x=newCircle();y=newRectangle();z=newRectangle();

x.radius=50;

z.width=68.94;

z.height=47.54;System.out.println(x.radius+""+y.width+""+z.width);}}2.2.3數(shù)據(jù)成員(續(xù))

——例2_3修改類(lèi)與對(duì)象128編譯后運(yùn)行結(jié)果如下:5010.12868.94解釋Circle及Rectangle類(lèi)對(duì)象的狀態(tài)如圖2.2.3數(shù)據(jù)成員(續(xù))

——修改后運(yùn)行結(jié)果類(lèi)與對(duì)象129地址簿程序一個(gè)人的地址通常包括以下信息: 姓名,省份,城市,街道,門(mén)牌號(hào),郵政編碼采用過(guò)程化的程序設(shè)計(jì)方法,使用簡(jiǎn)單變量存儲(chǔ),則存儲(chǔ)兩個(gè)人地址的代碼如下2.2.3數(shù)據(jù)成員(續(xù))

——例2_4類(lèi)與對(duì)象130publicstaticvoidmain(Stringargs[]){Stringname1,name2;intgateNumber1,gateNumber2;StringstreetName1,streetName2;Stringcity1,city2;Stringprovince1,province2;StringpostalCode1,postalCode2;name1="ZhangLi";gateNumber1=15;streetName1="TsinghuaEastRoad";city1="Beijing";province1=“Beijing";postalCode1="100084";name2="LiHong";gateNumber2=2;streetName2="BeiNong";city2="Beijing";province2="Beijing";postalCode2="102206";//...dosomethinginteresting}2.2.3數(shù)據(jù)成員(續(xù))

——例2_4類(lèi)與對(duì)象131采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,則需要首先聲明Address類(lèi)如下publicclassAddress{Stringname;intgateNumber;StringstreetName;Stringcity;Stringprovince;StringpostalCode;//方法成員略}2.2.3數(shù)據(jù)成員(續(xù))

——例2_4類(lèi)與對(duì)象132主方法改寫(xiě)如下publicstaticvoidmain(Stringargs[]){Addressaddress1=newAddress(),address2=newAddress();

=“ZhangLi";address1.streetNumber=15;address1.streetName=“TsinghuaEastRoad";address1.city=“Beijing";vince=“Beijing";address1.postalCode=“100084";

=“LiHong";address2.streetNumber=2;address2.streetName=“BeiNong";address2.city=“Beijing";vince=“Beijing";address2.postalCode=“102206";//...dosomethinginteresting}2.2.3數(shù)據(jù)成員(續(xù))

——例2_4類(lèi)與對(duì)象133類(lèi)變量也稱(chēng)為靜態(tài)變量,聲明時(shí)需加static修飾符不管類(lèi)的對(duì)象有多少,類(lèi)變量只存在一份,在整個(gè)類(lèi)中只有一個(gè)值類(lèi)初始化的同時(shí)就被賦值適用情況類(lèi)中所有對(duì)象都相同的屬性經(jīng)常需要共享的數(shù)據(jù)系統(tǒng)中用到的一些常量值引用格式<類(lèi)名|實(shí)例名>.<類(lèi)變量名>2.2.3數(shù)據(jù)成員(續(xù))

——類(lèi)變量類(lèi)與對(duì)象134對(duì)于一個(gè)圓類(lèi)的所有對(duì)象,計(jì)算圓的面積時(shí),都需用到π的值,可在Circle類(lèi)的聲明中增加一個(gè)類(lèi)屬性PIpublicclassCircle{

staticdoublePI=3.14159265;intradius;}當(dāng)我們生成Circle類(lèi)的實(shí)例時(shí),在每一個(gè)實(shí)例中并沒(méi)有存儲(chǔ)PI的值,PI的值存儲(chǔ)在類(lèi)中2.2.3數(shù)據(jù)成員(續(xù))

——例2_5類(lèi)與對(duì)象135對(duì)類(lèi)變量進(jìn)行測(cè)試publicclassClassVariableTester{publicstaticvoidmain(Stringargs[]){Circlex=newCircle();System.out.println(x.PI);System.out.println(Circle.PI);

Circle.PI=3.14;System.out.println(x.PI);System.out.println(Circle.PI);}}測(cè)試結(jié)果3.141592653.1415926.3數(shù)據(jù)成員(續(xù))

——例2_5運(yùn)行結(jié)果類(lèi)與對(duì)象136聲明一個(gè)Point類(lèi),有兩個(gè)私有變量保存點(diǎn)坐標(biāo),一個(gè)類(lèi)變量保存已有點(diǎn)的個(gè)數(shù)publicclassPoint{privateintx;privateinty;publicstaticintpointCount=0;publicPoint(intx,inty){this.x=x;this.y=y;pointCount++;}}2.2.3數(shù)據(jù)成員(續(xù))

——Point.java類(lèi)與對(duì)象137測(cè)試類(lèi)ex2_4classex2_4{ publicstaticvoidmain(String[]args){ Pointp=newPoint(1,1);System.out.println(p.pointCount); Pointq=newPoint(2,2); System.out.println(q.pointCount); System.out.println(q.pointCount==Point.pointCount); System.out.println(Point.pointCount); }}2.2.3數(shù)據(jù)成員(續(xù))

——Point類(lèi)測(cè)試類(lèi)與對(duì)象138測(cè)試結(jié)果12true22.2.3數(shù)據(jù)成員(續(xù))

——Point類(lèi)測(cè)試結(jié)果類(lèi)與對(duì)象139實(shí)例變量和類(lèi)變量都可被聲明為finalfinal實(shí)例變量必須在每個(gè)構(gòu)造方法結(jié)束之前賦初值,以保證使用之前會(huì)被初始化final類(lèi)變量必須在聲明的同時(shí)初始化2.2.3數(shù)據(jù)成員(續(xù))

——final修飾符類(lèi)與對(duì)象1402.2.4方法成員方法成員定義類(lèi)的行為一個(gè)對(duì)象能夠做的事情我們能夠從一個(gè)對(duì)象取得的信息可以沒(méi)有,也可以有多個(gè);一旦在類(lèi)中聲明了方法,它就成為了類(lèi)聲明的一部分分為實(shí)例方法和類(lèi)方法類(lèi)與對(duì)象141聲明格式 [public|protected|private] [static][final][abstract][native][synchronized]

返回類(lèi)型方法名([參數(shù)列表])[throwsexceptionList] {

方法體 }2.2.4方法成員(續(xù))

——聲明格式類(lèi)與對(duì)象142格式說(shuō)明方法修飾public、protected、private為存取控制符static指明方法是一個(gè)類(lèi)方法final指明方法是一個(gè)終結(jié)方法abstract指明方法是一個(gè)抽象方法native用來(lái)集成java代碼和其它語(yǔ)言的代碼synchronized用來(lái)控制多個(gè)并發(fā)線(xiàn)程對(duì)共享數(shù)據(jù)的訪(fǎng)問(wèn)2.2.4方法成員(續(xù))

——格式說(shuō)明類(lèi)與對(duì)象143格式說(shuō)明(續(xù))返回類(lèi)型方法返回值的類(lèi)型,可以是任意的Java數(shù)據(jù)類(lèi)型當(dāng)不需要返回值時(shí),返回類(lèi)型為void參數(shù)類(lèi)型簡(jiǎn)單數(shù)據(jù)類(lèi)型,引用類(lèi)型(數(shù)組、類(lèi)或接口)可以有多個(gè)參數(shù),也可以沒(méi)有參數(shù),方法聲明時(shí)的參數(shù)稱(chēng)為形式參數(shù)方法體方法的實(shí)現(xiàn)包括局部變量的聲明以及所有合法的Java指令局部變量的作用域只在該方法內(nèi)部throwsexceptionList用來(lái)處理異常2.2.4方法成員(續(xù))

——格式說(shuō)明類(lèi)與對(duì)象144方法調(diào)用給對(duì)象發(fā)消息意味著調(diào)用對(duì)象的某個(gè)方法從對(duì)象中取得信息修改對(duì)象的狀態(tài)或進(jìn)行某種操作進(jìn)行計(jì)算及取得結(jié)果等調(diào)用格式<對(duì)象名>.<方法名>([參數(shù)列表])稱(chēng)點(diǎn)操作符“.”前面的<對(duì)象名>為消息的接收者(receiver)參數(shù)傳遞值傳遞:參數(shù)類(lèi)型為基本數(shù)據(jù)類(lèi)型時(shí)引用傳遞:參數(shù)類(lèi)型為對(duì)象類(lèi)型或數(shù)組時(shí)2.2.4方法成員(續(xù))

——方法調(diào)用類(lèi)與對(duì)象145實(shí)例方法表示特定對(duì)象的行為聲明時(shí)前面不加static修飾符使用時(shí)需要發(fā)送給一個(gè)類(lèi)實(shí)例2.2.4方法成員(續(xù))

——實(shí)例方法類(lèi)與對(duì)象146在Circle類(lèi)中聲明計(jì)算周長(zhǎng)的方法

publicclassCircle{staticdoublePI=3.14159265;intradius; publicdoublecircumference(){return2*PI*radius;}}由于radius是實(shí)例變量,在程序運(yùn)行時(shí),Java會(huì)自動(dòng)取其接收者對(duì)象的屬性值也可將circumference方法體改為: return2*PI*this.radius;

關(guān)鍵字this代表此方法的接收者對(duì)象2.2.4方法成員(續(xù))

——例2_6類(lèi)與對(duì)象147方法調(diào)用測(cè)試publicclassCircumferenceTester{publicstaticvoidmain(Stringargs[]){Circlec1=newCircle();c1.radius=50;Circlec2=newCircle();c2.radius=10; doublecircum1=c1.circumference();doublecircum2=c2.circumference();System.out.println("Circle1hascircumference"+circum1);

System.out.println("Circle2hascircumfere

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論