Java語言程序設(shè)計(自考)課件全套 第1-10章 Java概述、數(shù)據(jù)和表達式- 多線程_第1頁
Java語言程序設(shè)計(自考)課件全套 第1-10章 Java概述、數(shù)據(jù)和表達式- 多線程_第2頁
Java語言程序設(shè)計(自考)課件全套 第1-10章 Java概述、數(shù)據(jù)和表達式- 多線程_第3頁
Java語言程序設(shè)計(自考)課件全套 第1-10章 Java概述、數(shù)據(jù)和表達式- 多線程_第4頁
Java語言程序設(shè)計(自考)課件全套 第1-10章 Java概述、數(shù)據(jù)和表達式- 多線程_第5頁
已閱讀5頁,還剩558頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

全國高等教育自學(xué)考試指定教材

計算機及應(yīng)用專業(yè)(獨立本科段)Java語言程序設(shè)計第一章概述學(xué)習(xí)目標(biāo)能夠概括敘述Java語言的特點,了解OOP中的核心概念。能夠獨立完成Java開發(fā)環(huán)境的安裝與環(huán)境變量的設(shè)置,熟悉Java開發(fā)運行環(huán)境JDK,了解Java核心API文檔,能夠查找指定的類和方法。了解Java程序的基礎(chǔ)知識,能夠正確編譯運行最簡單的程序。本章主要內(nèi)容Java語言簡介12Java程序示例3Java開發(fā)環(huán)境的安裝與設(shè)置使用Java核心API文檔4Java中的面向?qū)ο蠹夹g(shù)5第一節(jié)Java語言簡介Java語言的前身是Oak語言,這是美國SunMicrosystems公司于1991年推出,僅限于公司內(nèi)部使用的語言。

Java是一種可同時適用于高性能企業(yè)計算平臺、桌面計算平臺和移動計算平臺的計算機編程技術(shù)。目前運行Java程序的臺式機和手機數(shù)以億計,全球使用Java語言開發(fā)的程序數(shù)不勝數(shù)。什么是Java語言面向?qū)ο蟮某绦蛟O(shè)計語言與機器無關(guān)的二進制格式的類文件Java虛擬機(用來執(zhí)行類文件)完整的軟件程序包(跨平臺的API和庫)Java語言Java語言的特點語法簡單,功能強大,安全可靠類似于C++,去掉了C++中不常用且容易出錯的地方完全的面向?qū)ο笕壌a安全檢查機制與平臺無關(guān)一次編寫,到處運行虛擬計算機JVM來保障Java語言的特點解釋編譯兩種運行方式j(luò)ust-in-time編譯器,簡稱JIT編譯器多線程 動態(tài)執(zhí)行且有豐富的API文檔和類庫執(zhí)行代碼是在運行時動態(tài)載入的第二節(jié)開發(fā)環(huán)境的安裝與設(shè)置文件下載登錄到下列網(wǎng)址:/technetwork/java/javase/downloads/index.html這里提供了各主流操作系統(tǒng)下當(dāng)前最新版本的JDK??梢愿鶕?jù)自己機器的配置選擇對應(yīng)的文件來下載。開發(fā)環(huán)境的安裝與設(shè)置開發(fā)環(huán)境的安裝安裝JDK設(shè)置環(huán)境變量找到控制面板中設(shè)置環(huán)境變量的窗口在變量名域輸入JAVA_HOME新建CLASSPATH變量編輯系統(tǒng)變量Path第三節(jié)Java程序示例////簡單的應(yīng)用程序HelloWorld//publicclassHelloWorldApp{

publicstaticvoidmain(Stringargs[]){

System.out.println("HelloWorld!");}}編譯命令運行命令運行結(jié)果程序的編譯和運行編譯

源文件是文本形式的文件,經(jīng)過編譯,生成二進制格式的字節(jié)碼類文件Java編譯器:“javac”

$javacHelloWorldApp.java運行

Java的解釋器是“java.exe”java和javac一般放在$JAVA_HOME/bin目錄中,系統(tǒng)配置文件的PATH變量中應(yīng)包含該目錄

$javaHelloWorldApp常見錯誤示例編譯時錯誤javac:Commandnotfound包含javac編譯器的路徑變量設(shè)置不正確HelloWorldApp.java:3:Methodprintl

(java.lang.String)notfoundinclassjava.io.PrintStream.

System.out.printl(“HelloWorld!”);

^方法名printl不正確HelloWorldApp.java:1:PublicclassHelloWorldappmustbe

definedinafilecalled"HelloWorldapp.java".

publicclassHelloWorldapp{

^文件定義的公有類HelloWorldapp的名字和文件名不匹配常見錯誤示例運行時錯誤Can'tfindclassHelloWorldApp系統(tǒng)找不到名為HelloWorldApp的類文件InclassHelloWorldApp:mainmustbepublicandstaticmain()方法的左側(cè)缺少static或public文件中含有的類個數(shù)錯誤在一個源文件中只能定義一個公有類常見錯誤示例層次錯誤解釋:一個.java源文件可以含有三個“頂層”元素,這三個元素必須依次是:(1)一個包說明,即package語句,可選(2)任意多個引入語句,即import語句(3)類和接口說明第四節(jié)使用Java核心API文檔從ORACLE公司的網(wǎng)站上下載文檔文件,假定文件存放在jdk目錄下,則在瀏覽器地址框中輸入/javase/8/docs/api/

即可以查看JDK文檔。類中的信息包括以下幾部分:FieldSummary:類中成員變量信息ConstructorSummary:構(gòu)造方法信息MethodSummary:成員方法信息FieldDetail:成員變量的詳細(xì)信息ConstructorDetail:成員方法的詳細(xì)信息MethodDetail:成員方法的詳細(xì)信息第五節(jié)Java中的面向?qū)ο蠹夹g(shù)面向?qū)ο蟮姆椒▽W(xué),就是使分析、設(shè)計和實現(xiàn)一個系統(tǒng)的方法盡可能地接近我們認(rèn)識一個系統(tǒng)的方法。通常包括三個方面:面向?qū)ο蟮姆治觯∣bject-OrientedAnalysis,OOA)面向?qū)ο蟮脑O(shè)計(Object-OrientedDesign,OOD)面向?qū)ο蟮某绦蛟O(shè)計(Object-OrientedProgramming,OOP)OOPOOP中采用的三大技術(shù)封裝:將數(shù)據(jù)及對數(shù)據(jù)的操作捆綁在一起成為類,這就是封裝技術(shù)。繼承:將一個已有類中的數(shù)據(jù)和方法保留,并加上自己特殊的數(shù)據(jù)和方法,從而構(gòu)成一個新類,這是OOP中的繼承。多態(tài):在一個類或多個類中,可以讓多個方法使用同一個名字,從而具有多態(tài)性。ThankYou!第二章數(shù)據(jù)和表達式學(xué)習(xí)目標(biāo)掌握J(rèn)ava語言命名標(biāo)識符的規(guī)則,能夠正確定義標(biāo)識符,熟記關(guān)鍵字。能夠在程序中正確使用注釋和空白。掌握J(rèn)ava提供的所有基本數(shù)據(jù)類型,包括表示它們的關(guān)鍵字、各類型的表示范圍、各類型常量值的含義、轉(zhuǎn)義字符的含義等。掌握運算符的含義及其優(yōu)先級,掌握變量的聲明、初始化及賦值的方法,能夠判別變量的作用域。掌握J(rèn)ava表達式的表示方式,掌握表達式提升和轉(zhuǎn)換方法,初步掌握J(rèn)ava中提供的數(shù)學(xué)函數(shù)的使用方法。能夠正確得到表達式的計算結(jié)果。本章主要內(nèi)容基本語法單位

12表達式3基本數(shù)據(jù)類型第一節(jié)基本語法元素注釋程序中適當(dāng)?shù)丶尤胱⑨專瑫黾映绦虻目勺x性

程序中允許加空白的地方就可以寫注釋。注釋不影響程序的執(zhí)行結(jié)果,編譯器將忽略注釋Java中的三種注釋形式://在一行的注釋/*一行或多行的注釋*//**文檔注釋*/注釋語句第一種形式表示從“//”開始一直到行尾均為注釋,一般用它對說明的變量、一行程序的作用作簡短說明第二種形式可用于多行注釋,“/*”是注釋的開始,“*/”表示注釋結(jié)束,“/*”和“*/”之間的所有行均是注釋語句。這種注釋多用來說明方法的功能等第三種形式是文檔注釋。文檔注釋放在(一個變量或是一個函數(shù)的)說明之前,表示該段注釋應(yīng)包含在自動生成的任何文檔中(即由javadoc命令生成的HTML文件)語句、分號和塊Java中的語句是最小的執(zhí)行單位Java各語句間以分號“;”分隔。一個語句可寫在連續(xù)的若干行內(nèi)花括號“{”和“}”包含的一系列語句稱為語句塊,簡稱為塊語句塊可以嵌套即語句塊中可以含有子語句塊。在詞法上,塊被當(dāng)作一個語句看待

Java關(guān)鍵字abstractbooleanbreakbytecasecatchcharclassconstcontinuedodoubleelseextendsfalsefinallycastdefaultfinalfinallyfloatforfuturegenericgotoifimplementsimportinnerinstanceofintinterfacelongnativenewnulloperatorouterpackageprivateprotectedpublicrestreturnshortstaticsuperswitchsynchronizedthisthrowthrowstransienttruetryvarvoidvolatilewhile標(biāo)識符標(biāo)識符是以字母、下劃線(_)或美元符($)開頭,由字母、數(shù)字、下劃線(_)或美元符($)組成的字符串標(biāo)識符區(qū)分大小寫,長度沒有限制

標(biāo)識符例合法的標(biāo)識符非法標(biāo)識符2Sun //以數(shù)字2開頭class //是Java的關(guān)鍵字,有特殊含義#myname //含有其他符號#IdentifierusernameUser_name_sys_var1$change sizeofJava中的一些命名約定類名或接口名:多為名詞,含有大小寫,每個單詞的首字母大寫方法名:多是動詞,含有大小寫,首字母小寫,其余各單詞的首字母大寫。盡量不要在方法名中使用下劃線常量名:基本數(shù)據(jù)類型常量的名字應(yīng)該全部為大寫字母,單詞與單詞之間用下劃線分隔,對象常量可使用混合大小寫變量名:所有的實例變量、類變量、終極變量和靜態(tài)變量等都使用混合大小寫,首字母為小寫,后面的單詞的首字母用大寫。變量名中盡量不要使用下劃線Java編程風(fēng)格不提倡的風(fēng)格提倡的程序風(fēng)格第二節(jié)基本數(shù)據(jù)類型基本數(shù)據(jù)類型數(shù)據(jù)類型基本數(shù)據(jù)類型復(fù)合數(shù)據(jù)類型類類型布爾類型:boolean數(shù)組接口類型:interface字符類型:char數(shù)值類型浮點數(shù)類型:float,double整數(shù)類型:byte,short,int,long整數(shù)類型整數(shù)類型整數(shù)長度字節(jié)數(shù)表示范圍byte8位1-27~27-1

(-128~127)short16位2-215~215-1

(-32768~32767)int32位4-231~231-1

(-2,147,483,648~2,147,483,647)long64位8-263~263-1

(-9,223,372,036,854,775,808~9,223,372,036,854,775,807)整數(shù)示例2 //表示十進制數(shù)2077 //表示八進制數(shù)77,等于十進制數(shù)630xBABE //表示十六進制數(shù)BABE,

//等于十進制數(shù)478062L //表示長整型十進制數(shù)2077L //表示長整型八進制數(shù)770XBABEL //表示長整型十六進制數(shù)BABE浮點數(shù)浮點數(shù)類型浮點數(shù)長度字節(jié)數(shù)表示范圍float32位41.4e-45f~3.4028235e+38fdouble64位84.9e-324d~1.7976931348623157e+308d浮點數(shù)示例5.31 //表示double型-39.27 //表示double型5f //表示float型0.001327e+6 //表示double型最大值、最小值類型最大值最小值intInteger.MAX_VALUEInteger.MIN_VALUElongLong.MAX_VALUELong.MIN_VALUE

float類型double類型最大值Float.MAX_VALUEDouble.MAX_VALUE最小值Float.MIN_VALUEDouble.MIN_VALUE正無窮大Float.POSITIVE_INFINITYDouble.POSITIVE_INFINITY負(fù)無窮大Float.NEGATIVE_INFINITYDouble.NEGATIVE_INFINITY0/0Float.NaNDouble.NaN字符類型單個字符用char類型表示。一個char表示一個Unicode字符,其值用16位無符號整數(shù)表示,范圍為0~65535。char類型的常量值必須用一對單引號('')括起來,分為普通字符常量和轉(zhuǎn)義字符常量兩種。轉(zhuǎn)義字符含義轉(zhuǎn)義字符含義\b退格鍵\\反斜杠\\n換行符\'單引號'\r回車符\"雙引號"\t水平制表符字符常量示例'a’ //表示字符a'\t’ //表示水平制表符Tab鍵'\???' //表示一個具體的Unicode字符 //???是3位八進制數(shù)字'\u????' //表示一個具體的Unicode字符 //????是4位十六進制數(shù)字布爾類型在Java中,這樣的一個值用boolean(布爾)類型表示,布爾類型也稱作邏輯類型boolean類型有兩個常量值:true和false,它們?nèi)切?,計算機內(nèi)部使用8位二進制表示Java是一種嚴(yán)格的類型語言,它不允許數(shù)值類型和布爾類型之間進行轉(zhuǎn)換第三節(jié)表達式表達式由運算符和操作數(shù)組成,對操作數(shù)進行運算符指定的操作,并得出運算結(jié)果Java運算符按功能可分為算術(shù)運算符關(guān)系運算符邏輯運算符位運算符賦值運算符條件運算符特殊運算符操作數(shù)常量簡單數(shù)據(jù)類型String類型變量的聲明變量聲明的基本格式為:類型變量名1[=初值1][,變量名2[=初值2]]…;類型:簡單數(shù)據(jù)類型,也可以是類類型聲明變量的地方有兩處:一處是在方法內(nèi)(局部變量),另一處是在類定義內(nèi)(類的成員變量)操作數(shù)變量的初始化類型初始值類型初始值byte(byte)0float0.0fshort(short)0double0.0int0char'\u0000'(null)long0Lbooleanfalse所有引用類型null變量作用域變量的作用域是指可訪問該變量的代碼范圍類中定義的成員變量的作用域是整個類塊內(nèi)聲明的變量將屏蔽其所在類定義的同名變量程序2.1編譯結(jié)果變量作用域程序2.2雖然main()方法分別在第5行和第10行兩次聲明了同名局部變量name,但第5行聲明的變量只在第5行至第8行的塊內(nèi)有效,在塊外該變量消失。第10行不包含在這個塊中,也就不在第一次聲明的作用域內(nèi)數(shù)學(xué)函數(shù)Math.sin(0)//正弦函數(shù),返回0.0,這是double類型的值Math.cos(0) //余弦函數(shù),返回1.0Math.round(6.6) //四舍五入取整,返回7Math.sqrt(144) //開平方函數(shù),返回12.0Math.pow(5,2) //計算乘方,返回25.0Math.max(560,289) //求最大值函數(shù),返回560Math.min(560,289) //求最小值函數(shù),返回289Math.random()//返回0.0到1.0之間雙精度的一個隨機數(shù)值運算符算術(shù)運算符算術(shù)運算符包括通常的加(+)、減(-)、乘(*)、除(/)、取模(%),完成整型或浮點型數(shù)據(jù)的算術(shù)運算算術(shù)運算符還有“++”、“--”兩種,分別表示加1和減1操作3/2 //結(jié)果是115.2%5 //結(jié)果是0.2運算符關(guān)系運算符關(guān)系運算符用來比較兩個值,包括大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(==)、不等于(!=)6種。關(guān)系運算符都是二元運算符,運算的結(jié)果是一個邏輯值Java允許“==”和“!=”兩種運算用于任何數(shù)據(jù)類型可以判定兩個實例是否相等邏輯運算符邏輯運算符包括邏輯與(&&)、邏輯或(||)和邏輯非(?。?。前兩個是二元運算符,后一個是一元運算符 Java對邏輯與和邏輯或提供短路操作功能。進行運算時,先計算運算符左側(cè)表達式的值,如果使用該值能得到整個表達式的值,則跳過運算符右側(cè)表達式的計算,否則計算運算符右側(cè)表達式,并得到整個表達式的值運算符例3-3

Stringunset=null;if((unset!=null)&&(unset.length()>5)){ //對unset進行某種操作}空串unset不能使用,因此不能訪問unset.length()if()語句中的邏輯表達式是合法的,且完全安全。因為第一個子表達式(unset!=null)結(jié)果為假,它馬上導(dǎo)致整個表達式的結(jié)果為假。所以&&運算符跳過不必要的(unset.length()>5)計算,因為沒有計算它,避免了空指針異常位運算符位運算符用來對二進制位進行操作,包括按位取反(~)、按位與(&)、按位或(|)、異或(^)、右移(>>)、左移(<<)及無符號右移(>>>)。位運算符只能對整型和字符型數(shù)據(jù)進行操作intxValue=27,yVar=28;xValue=xValue&4;yVar=4&yVar;運算符“>>”運算符“>>”執(zhí)行算術(shù)右移,它使用最高位填充移位后左側(cè)的空位。右移的結(jié)果為:每移一位,第一個操作數(shù)被2除一次,移動的次數(shù)由第二個操作數(shù)確定

128>>1 //得到64256>>4 //得到16-256>>4 //得到-16邏輯右移運算符邏輯右移或叫無符號右移運算符>>>只對位進行操作,而沒有算術(shù)含義,它用0填充左側(cè)的空位算術(shù)右移不改變原數(shù)的符號,而邏輯右移不能保證這一點0xa2>>>2 //得到40(byte)0xa2>>2 //得到-24(byte)0xa2>>>2 //得到1073741800(byte)0x80>>2 //得到-32移位運算符移位運算符約簡其右側(cè)的操作數(shù),當(dāng)左側(cè)操作數(shù)是int類型時,右側(cè)以32取模;當(dāng)左側(cè)是long類型時,右側(cè)以64取模

“>>>”運算符只用于整型,它只對int或long值起作用。如果用于short或byte值,則在進行“>>>”操作之前,使用符號擴展將其提升為int型,然后再移位intx;x=x>>>32;x的結(jié)果不改變,而不是通常期望的0。這樣可以保證不會將左側(cè)操作數(shù)完全移走。其他運算符Java中的運算符還包括擴展賦值運算符(=、+=、-=、*=、/=、%=、&=、|=、^=、>>=、<<=)及(>>>=),條件運算符(?:),點運算符(.),實例運算符(instanceof),(new)運算符,數(shù)組下標(biāo)運算符([])等擴展賦值運算符擴展賦值運算符是在賦值號(=)前再加上其他運算符,是對表達式的一種簡寫形式。如果有賦值語句: var=varopexpression; 其中,var是變量,op是算術(shù)運算符或位運算符,expression為表達式。使用擴展賦值運算符可表示為: varop=expression;條件運算符條件運算符(?:)是三元運算符,它的一般形式為: 邏輯表達式?表達式1:表達式2;邏輯表達式得到一個邏輯值,根據(jù)該值的真假決定執(zhí)行什么操作。如果值為真,計算表達式1,否則計算表達式2注意,表達式1和表達式2需要返回相同的類型,且不能是void運算符的優(yōu)先次序運算符的優(yōu)先次序在對一個表達式進行計算時,如果表達式中含有多種運算符,則要按運算符的優(yōu)先順序依次從高向低進行,同級運算符則按結(jié)合律進行。括號可以改變運算次序表達式的提升和轉(zhuǎn)換Java語言不支持變量類型間的自動任意轉(zhuǎn)換,有時必須顯式地進行變量類型的轉(zhuǎn)換。一般的原則是,變量和表達式可轉(zhuǎn)換為更一般的形式,而不能轉(zhuǎn)換為更受限制的形式例如,int型表達式可看作是long型的;而long型表達式當(dāng)不使用顯式轉(zhuǎn)換時是不能看作int型的自動類型轉(zhuǎn)換一般地,如果同為整數(shù)類型,或同為浮點數(shù)類型,那么,轉(zhuǎn)換的原則是位數(shù)少的類型可以轉(zhuǎn)換為位數(shù)多的類型對于不同類的數(shù)值類型,轉(zhuǎn)換的原則是整數(shù)類型可以轉(zhuǎn)換為浮點數(shù)類型有一個特例是字符類型,它可以轉(zhuǎn)換為位數(shù)更長的整數(shù)類型或浮點數(shù)類型類型轉(zhuǎn)換當(dāng)變量類型與表達式類型一致時,表達式的值可以給變量賦值。當(dāng)變量類型與表達式類型不一致時,如果能進行自動類型轉(zhuǎn)換,則賦值也是被允許的,這稱為賦值相容不同類型數(shù)據(jù)的轉(zhuǎn)換規(guī)則操作數(shù)1類型操作數(shù)2類型轉(zhuǎn)換后的類型Byte/shortintintByte/short/intlonglongByte/short/int/longfloatfloatByte/short/int/long/floatdoubledoublecharintint表達式的提升和轉(zhuǎn)換例3-7longbigval=6; //6是整型量,所以該語句正確intsmallval=99L; //99L是長整型量,該語句錯誤floatz=12.414F; //12.414F是浮點量,該語句正確floatz1=12.414; //12.414是雙精度量,該語句錯誤 99L是長整型量,smallval是int型量,賦值不相容。同樣,12.414是雙精度型的,不能賦給單精度變量z1表達式的提升和轉(zhuǎn)換longbigValue=99L;intsquashed=(int)(bigValue);當(dāng)表達式不是賦值相容時,有時需進行轉(zhuǎn)換以便讓編譯器認(rèn)可該賦值讓一個long型值“擠”入int型變量中。顯式轉(zhuǎn)換如下轉(zhuǎn)換時,目標(biāo)類型用括號括起來,放到要修改的表達式的前面。為避免歧義,被轉(zhuǎn)換的整個表達式最好也用括號括起來類型轉(zhuǎn)換當(dāng)位數(shù)多的類型向位數(shù)少的類型進行轉(zhuǎn)換時,需要用戶明確指明,即進行強制類型轉(zhuǎn)換一般地,高級類型(即位數(shù)較多的數(shù)據(jù)類型)轉(zhuǎn)為低級類型(即位數(shù)較少的數(shù)據(jù)類型)時,截斷高位內(nèi)容,因此會導(dǎo)致精度下降或數(shù)據(jù)溢出inti=3;byteb=(byte)i;類型轉(zhuǎn)換示例程序2-3ThankYou!第三章流程控制語句

學(xué)習(xí)目標(biāo)了解Java程序結(jié)構(gòu),理解包的概念,掌握package語句及import語句的用法掌握J(rèn)ava各主要語句的語法格式,能夠指出簡單程序的功能,給出運行結(jié)果,能夠編寫簡單的Java程序,能夠處理簡單的輸入輸出了解Java中異常處理的概念及處理機制,掌握try、catch、finally、throw和throws的使用方法Java程序的結(jié)構(gòu)12簡單的輸入輸出3流程控制處理異常4本章主要內(nèi)容第一節(jié)Java程序的結(jié)構(gòu)整體來看,Java程序的結(jié)構(gòu)如下:package語句:零個或1個,必須放在文件開始;import語句:零個或多個,必須放在所有類定義之前;公有的(public)類定義:零個或一個;類定義:零個或多個;接口定義:零個或多個;源文件命名時,若文件中含有public類,源文件必須與該類名字一致,注意區(qū)分大小寫Java包的概念

包是類的容器,包的設(shè)計人員利用包來劃分名字空間,用于分隔類名空間,以避免類名沖突.沒有包定義的源代碼文件成為未命名的包中的一部分,在未命名的包中的類不需要寫包標(biāo)識符

使用package指明源文件中的類屬于哪個具體的包。包語句的格式為:

packagepkg1[.pkg2[.pkg3...]];Java包的概念package語句一定是源文件中的第一條可執(zhí)行語句,它的前面只能有注釋或空行。一個文件中最多只能有一條package語句

包的名字有層次關(guān)系,各層之間以點分隔。包層次必須與Java開發(fā)系統(tǒng)的文件系統(tǒng)結(jié)構(gòu)相同。通常包名中全部用小寫字母

一個包可以包含若干個類文件,還可包含若干個包。一個包要放在指定目錄下,通常用classpath指定搜尋包的路徑。包名本身對應(yīng)一個目錄(用一個目錄表示)Java包的概念packagejava.awt.image;在Windows系統(tǒng)下,此文件必須存放在java\awt\image目錄下;如果在unix系統(tǒng)下,文件須放在java/awt/image目錄下。此定義語句說明當(dāng)前的編譯單元是包java.awt.image的一部分,文件中的每一個類名前都有前綴java.awt.image,因此不再會有重名問題

引入語句使用MyClass類,或mypackage包中的其它public類,則需要使用使用全名

mypackage.MyClassm=newmypackage.MyClass();先使用import語句引入所需要的類,程序中無需再使用全名

importmypackage.*;//…MyClassm=newMyClass();

packagemypackage;publicclassMyClass{ //…}引入語句import語句只用來將其他包中的類引入當(dāng)前名字空間中,程序中不需再引用同一個包或該包的任何元素,而當(dāng)前包總是處于當(dāng)前名字空間中

引入語句的格式如下importpkg1[.pkg2[.pkg3...]].(類名|*)“*”表示引入所有類語句次序示例正確的語句序列:錯誤的語句順序:packageTransportation;importjava.awt.Graphics;importjava.applet.Applet;importjava.awt.Graphics;importjava.applet.Applet;packageTransportation;該例中在包說明語句之前含有其他語句語句次序示例錯誤的語句順序:packageTransportation;packageHouse;importjava.applet.Applet;該例中含有兩個包說明語句第二節(jié)流程控制語句與表達式每個表達式都會得到一個值,即表達式的計算結(jié)果。語句也會有一個值,但這個值并不是語句的計算結(jié)果,而是執(zhí)行結(jié)果語句是Java的最小執(zhí)行單位,語句間以分號(;)作為分隔符。語句分為簡單語句及復(fù)合語句簡單語句就是通常意義下的一條語句,即單語句;而復(fù)合語句是一對花括號“{”和“}”括起來的語句組,也稱為“塊”,塊后沒有分號賦值語句表達式可當(dāng)作一個值賦給某個變量,有的表達式也可當(dāng)作語句方法調(diào)用通常返回一個值,一般用在表達式中。有的方法調(diào)用可直接當(dāng)作語句System.out.println("HelloWorld!");customer1=newCustomer();point2=newPoint();x=12;x++;塊塊是一對花括號“{”和“}”括起來的語句組。例如:方法體是一個塊。塊還用在流控制的語句中,如if語句、switch語句及循環(huán)語句{}{ Pointpoint1=newPoint(); intx=point1.x;}分支語句分支語句共有兩種:if語句和switch語句if語句是單重選擇,最多只有兩個分支。if語句的基本格式是:if(邏輯表達式)

語句1;[else

語句2;]分支語句if關(guān)鍵字之后的邏輯表達式必須得到一個邏輯值,不能象其他語言那樣以數(shù)值來代替。因為Java不提供數(shù)值與邏輯值之間的轉(zhuǎn)換intx=3;if(x){...}if(x!=0)if語句常見的形式形式一:形式二:if(邏輯表達式){ //邏輯表達式為true時要執(zhí)行的語句;}if(邏輯表達式){ //邏輯表達式為true時要執(zhí)行的語句;}else{ //邏輯表達式為false時要執(zhí)行的語句;}if語句常見的形式三形式三(if語句的嵌套):if(邏輯表達式1){ //邏輯表達式1為true時要執(zhí)行的語句;}elseif(邏輯表達式2){ //邏輯表達式1為false,但邏輯表達式2為true時要執(zhí)行的語句;}…else{ //前面的邏輯表達式全為false時要執(zhí)行的語句;}if語句1 if(firstVal==0)2 if(secondVal==1)3 firstVal++;4 else5 firstVal--;if語句else子句屬于邏輯上離它最近的if語句

if(firstVal==0) if(secondVal==1) firstVal++; else firstVal--;這兩個匹配if語句1 if(firstVal==0){2 if(secondVal==1)3 firstVal++;4 }5 else6 firstVal--;這兩個匹配switch語句switch語句含義與嵌套的if語句是類似的switch(表達式){ casec1:

語句組1; break; …… caseck:

語句組k; break; [default:

語句組; break;]}switch語句表達式的計算結(jié)果必須是int型或字符型,即是int型賦值相容的。當(dāng)用byte、short或char類型時,要進行提升。switch語句不允許使用浮點型或long型表達式。c1、c2、…、ck是int型或字符型常量。default子句是可選的,并且,最后一個break語句完全可以不寫。switch語句例1 //colorNum是整型變量2 switch(colorNum){3 case0:4 setBackground(Color.red);5 break;6 case1:7 setBackground(Color.green);8 break;9 default:10 setBackground(Color.black);11 break;12 }switch語句switch語句和if語句可以互相代替前一個示例用if語句實現(xiàn):if(colorum==0) setBackground(Color.red);elseif(colorNum==1) setBackground(Color.green); else setBackground(Color.black);例3.7使用if語句:staticintdaysInMonth(intmonth){ if(month<=0||month>12) return-1; //表示月份的數(shù)值不合理 if(month==2) return28; if((month==4)||(month==6)||(month==9)||(month==11)) return30; return31;}使用switch語句:staticintdaysInMonth(intmonth){ intdays; if(month<=0||month>12)return-1;//表示月份的數(shù)值不合理 switch(month){ case2: days=28;break; case4:case6:case9:case11: days=30;break; default: days=31; } returndays;}分支語句程序3.1當(dāng)主程序執(zhí)行時,如果第一個命令行參數(shù)的首字符分別是數(shù)字、小寫字母及大寫字母時,系統(tǒng)會顯示這個首字符。如果輸入的是非數(shù)字或字母,則顯示不是數(shù)字或字母。輸出如圖所示分支語句如果上述方法中的最后一個break語句(第32行)不寫的話,程序執(zhí)行完第30、31行后將不停止,一直執(zhí)行下去。程序的輸出如圖3-6所示:循環(huán)語句三種循環(huán)語句:for語句、while語句和do-while語句for語句語法格式:for語句的語義是先執(zhí)行初始語句,判斷邏輯表達式的值,當(dāng)邏輯表達式為真時,執(zhí)行循環(huán)體語句,執(zhí)行迭代語句,然后再去判別邏輯表達式的值。直到邏輯表達式的值為假時,循環(huán)結(jié)束

for(初始語句;邏輯表達式;迭代語句) 語句;循環(huán)語句例3.8的程序共執(zhí)行3次第2行的輸出語句(i為0,1,2時)。當(dāng)i等于3時,邏輯表達式的值為假,退出循環(huán),執(zhí)行第4行語句for(inti=0;i<3;i++){ System.out.println("Areyoufinishedyet?");}System.out.println("Finally!");Areyoufinishedyet?Areyoufinishedyet?Areyoufinishedyet?Finally!循環(huán)語句for(;;)

System.out.println("Alwaysprint!");該語句等價于for(;true;)

System.out.println("Alwaysprint!");這段循環(huán)不會停止循環(huán)語句下面是初始語句及迭代語句包含多個語句時的情況:例3.9intsumi=0,sumj=0;for(inti=0,j=0;j<10;i++,j++){ sumi+=i; sumj+=j;}增強for語句在Java的新版本中,提供了另一種形式的for語句,稱為增強for語句,也稱為for-each語句它對數(shù)組的所有元素提供順序訪問,而不能像基本的for語句那樣可以提供多樣化的處理程序中定義了一維整數(shù)數(shù)組 intmyTable[]={23,45,65,34,21,67,78};則for-each語句for(intelement:myTable)System.out.print(element+"");將輸出數(shù)組中的全部7個元素,各元素之間以三個空格分隔while循環(huán)while循環(huán)for語句中常常用循環(huán)控制變量顯式控制循環(huán)的執(zhí)行次數(shù)。當(dāng)程序中不能明確地指明循環(huán)的執(zhí)行次數(shù)時,可以僅用邏輯表達式來決定循環(huán)的執(zhí)行與否。這樣的循環(huán)可用while語句來實現(xiàn)while循環(huán)的語法是:while(邏輯表達式)

語句;和if語句一樣,while語句中的邏輯表達式亦不能用數(shù)值來代替循環(huán)語句while語句的語義:計算邏輯表達式,當(dāng)邏輯表達式為真時,重復(fù)執(zhí)行循環(huán)體語句,直到邏輯表達式為假時結(jié)束。如果第一次檢查時邏輯表達式為假,則循環(huán)體語句一次也不執(zhí)行。如果邏輯表達式始終為真,則循環(huán)不會終止循環(huán)語句for語句可以改寫為while語句示例inti=0;while(i<3){ System.out.println("Areyoufinishedyet?"); i++;}System.out.println("Finally!");do-while循環(huán)do-while語句與while語句很相似。它把while語句中的邏輯表達式移到循環(huán)體之后。do-while語句的語法格式是:do-while語句的語義是:首先執(zhí)行循環(huán)體語句,然后判定邏輯表達式的值,當(dāng)表達式為真時,重復(fù)執(zhí)行循環(huán)體語句,直到表達式為假時結(jié)束。不論邏輯表達式的值是真是假,do循環(huán)中的循環(huán)體都至少執(zhí)行一次do

語句;while(邏輯表達式);循環(huán)語句示例例3.111 //do-while語句

2 inti=0;3 do{4 System.out.println("Areyoufinishedyet?");5 i++;6 }while(i<3);7 System.out.println("Finally!");循環(huán)語句for、while及do-while語句可互相替代例如:do

語句1;while(邏輯表達式);等價于:語句1;while(邏輯表達式)

語句1;跳轉(zhuǎn)語句Java語言不再提供對有爭議的goto語句的支持,也就是程序中不能再寫goto語句。Java提供了break和continue語句標(biāo)號標(biāo)號可以放在for、while或do-while語句之前,其語法格式為:

標(biāo)號:語句;break語句break語句可用于三類語句中一類是switch語句中,一類是for、while及do-while等循環(huán)語句中,還有一類是塊語句中在switch語句及循環(huán)語句中break的語義是跳過本塊中余下的所有語句,轉(zhuǎn)到塊尾,執(zhí)行其后的語句for(inti=0;i<100;i++){ if(i==5) break; System.out.println("i="+i);}break語句break語句的第三種使用方法是和標(biāo)號結(jié)合使用,其語義是跳出標(biāo)號所標(biāo)記的語句塊,繼續(xù)執(zhí)行其后的語句。多用于嵌套塊中,控制從內(nèi)層塊跳到外層塊之后。其語法格式為:break標(biāo)號;intx=20;out:for(i=2;i<10;i++){ System.out.println("begini="+i); while(x<1000){ System.out.println("i="+i+",x="+x); if(i*x>=80)breakout; elsex+=5; }}System.out.println("afteroutblock");break與continue程序3.2continue語句在循環(huán)語句中,continue可以立即結(jié)束當(dāng)次循環(huán)而執(zhí)行下一次循環(huán),當(dāng)然執(zhí)行前先判斷循環(huán)條件是否滿足continue語句也可以和標(biāo)號一起使用,立即結(jié)束標(biāo)號標(biāo)記的那重循環(huán)的當(dāng)次執(zhí)行,開始下一次循環(huán)。多用于多重循環(huán)中。

其語法格式為:continue標(biāo)號;例3.13例3.13添加必要的代碼,執(zhí)行結(jié)果:*******************************************************第三節(jié)簡單的輸入/輸出Scanner類Scanner類屬于java.util包。它提供了許多方法,可用來方便地讀入不同類型的輸入值。要調(diào)用Scanner類的方法,必須先創(chuàng)建一個對象。下面的說明創(chuàng)建了一個Scanner類對象,它讀入鍵盤輸入:Scannerscan=newScanner(System.in);程序3.3和3.4程序3.3程序3.3中的Echo程序,讀入用戶鍵入的一行文本,將它保存到字符串變量message中,并回顯在屏幕上。第1行的import語句,表明程序中要使用Scanner類程序3.4簡單的輸入/輸出NumberFormat類和DecimalFormat類用于格式化輸出NumberFormat類提供對數(shù)值進行格式化操作的一般功能。不能使用new運算符實例化一個NumberFormat對象。DecimalFormat類按慣例使用new運算符來實例化對象。程序3.5和3.6程序3.5程序3.6第四節(jié)處理異常Java語言把程序運行中可能遇到的錯誤分為兩類,一類是非致命性的,通過某種修正后程序還能繼續(xù)執(zhí)行。這類錯誤稱作異常(Exception)。如打開一個文件時,發(fā)現(xiàn)文件不存在。又比如除零溢出、數(shù)組越界等。使用異常機制的情況當(dāng)方法因為自身無法控制的原因而不能完成其任務(wù)文件不存在,網(wǎng)絡(luò)連接無法建立等處理在方法、類庫、類中拋出的異常如FileInputStream.read產(chǎn)生IOException;

在大的項目中采用統(tǒng)一的方式處理異常時編寫文字處理器一類的程序等;不經(jīng)常發(fā)生但卻可能發(fā)生的故障

異常及其處理機制預(yù)定義了Exception類。在Exception類中定義了程序產(chǎn)生異常的條件簡化了代碼的編寫。常見的異常也可以統(tǒng)一處理,提高了效率,代碼重用率高允許程序員自己編寫特殊的異常處理程序,以滿足更獨特的需要異常機制的優(yōu)點把異常處理代碼從常規(guī)代碼中分離出來,增加了可讀性,方便修改按異常類型和差別進行分組,即從預(yù)定義的類Exception中派生自己的子類,對無法預(yù)測的異常也可以進行捕獲和處理,克服了傳統(tǒng)方法中錯誤信息有限的問題異常的處理借助于調(diào)用堆棧按先近后遠(yuǎn)的原則進行拋出和捕獲

方法的運行過程中,如果發(fā)生了異常,稱程序產(chǎn)生了一個異常事件,相應(yīng)地生成異常對象。生成異常對象并把它提交給運行時系統(tǒng)的這一過程稱為拋出(throw)異常

異常發(fā)生時,Java運行時系統(tǒng)從生成對象的代碼塊開始進行回溯,找到包含相應(yīng)異常處理的方法,并把異常對象交給該方法處理,這一過程稱為捕獲(catch)異常分類在Java中主要有三類異常。類java.lang.Throwable是使用異常處理機制可被拋出并捕獲的所有異常對象的父類。它有三個基本子類,圖示如下ExceptionErrorRuntimeExceptionThrowable每個類使用的目的

Error表示很難恢復(fù)的錯誤,如內(nèi)存越界。交給系統(tǒng)處理為好RuntimeException用來表示設(shè)計或?qū)崿F(xiàn)方面的問題,如數(shù)組越界等。因為設(shè)計和實現(xiàn)正確的程序不會引發(fā)這類異常,所以常常不處理它發(fā)生這類異常時,運行時環(huán)境會輸出一條信息,提示用戶修正錯誤其他異常表示運行時因環(huán)境的影響可能發(fā)生并可被處理的問題。如文件沒找到或不完整的URL等。程序員處理它們異常分類異常分為以下三組:受檢異常,必須被處理運行時異常,不需要處理錯誤,不需要處理異常分類受檢異常受檢異常(checkedexception)是程序執(zhí)行期間發(fā)生的嚴(yán)重事件的后果運行時異常運行時異常(runtimeexception)通常是程序中邏輯錯誤的結(jié)果錯誤錯誤(error)是標(biāo)準(zhǔn)類Error或其后代類的一個對象異常傳播方式method1method2method3method4探測拋出例外傳遞捕獲處理例外調(diào)用異常處理

try,catch和finally語句

try{ //此處為拋出具體異常的代碼}catch(ExceptionType1e){ //拋出ExceptionType1異常時要執(zhí)行的代碼}catch(ExceptionType2e){ //拋出ExceptionType2異常時要執(zhí)行的代碼...}catch(ExceptionTypeke){ //拋出ExceptionTypek異常時要執(zhí)行的代碼}finally{ //必須執(zhí)行的代碼}公共異常ArithmeticException整數(shù)除法中,如果除數(shù)為0,則發(fā)生該類異常NullPointerException

訪問沒有實例化的對象或調(diào)用它的方法

inti=12/0;imageim[]=newimage[4];System.out.println(im[0].toString());公共異常NegativeArraySizeException

創(chuàng)建數(shù)組時,元素個數(shù)是個負(fù)數(shù)ArrayIndexOutOfBoundsException

數(shù)組下標(biāo)越界SecurityException

一般在瀏覽器內(nèi)拋出。若Applet試圖進行下述操作,則拋出此異常:訪問本地文件。打開一個套接口,而不是返回到提供Applet的主機。在運行時環(huán)境中運行另一個程序。公共異常ArrayStoreException

程序試圖存取數(shù)組中錯誤的數(shù)據(jù)類型FileNotFoundException

試圖存取一個并不存在的文件IOException 通常的I/O錯誤異常示例

簡單擴展前面使用過的程序1.1的HelloWorldApp.java程序,循環(huán)打印一些信息。程序執(zhí)行到第4次循環(huán)時,會發(fā)生異常代碼見程序3.7

程序示例

程序3.8改寫了程序3.7。在程序中,捕獲所發(fā)生的異常,將越界的下標(biāo)重新置回0,然后讓程序繼續(xù)執(zhí)行

拋出異常如果一個方法確實引發(fā)了一個異常,那么在方法中必須寫明相應(yīng)的處理代碼。(Error或RuntimeException兩類錯誤除外)程序員處理異常有兩種方法:一種是使用try{}、catch(){}塊,捕獲到所發(fā)生的異常類,并進行相應(yīng)的處理。catch塊可以為空,表示對發(fā)生的異常不進行處理另一種方法是,程序員不在當(dāng)前方法內(nèi)處理異常,而是把異常拋出到調(diào)用方法中。在說明方法時使用如下格式就可做到這一點異常拋出

異常拋出格式<訪問權(quán)限修飾符><返回值類型><方法名>(參數(shù)列表)throws異常列表publicvoidtroubleSome()throwsIOException創(chuàng)建自己的異常用戶自定義的所有異常類都必須是Exception的子類在程序中發(fā)現(xiàn)異常情況時,可以拋出(throw)一個異常實例,將其放到異常隊列中去,并激活Java的異常處理機制publicclassMyExceptionextendsException{...}thrownewMyException()ThankYou!第四章面向?qū)ο蟪绦蛟O(shè)計學(xué)習(xí)目標(biāo)掌握類、對象及構(gòu)造方法的概念,能夠聲明類,正確使用訪問修飾符。能夠創(chuàng)建對象,進行對象的初始化,正確編寫及調(diào)用構(gòu)造方法能夠編寫成員方法,實現(xiàn)對成員變量的訪問,能夠正確編寫、選擇調(diào)用重載方法能夠正確定義、使用靜態(tài)成員。理解包裝類的概念,掌握自動拆箱與裝箱本章內(nèi)容類和對象1定義方法2靜態(tài)成員3包裝類4第一節(jié)類和對象Java中類定義的一般格式為:修飾符class

類名[extends

父類名]{

修飾符

類型成員變量1;

修飾符

類型成員變量2;......

修飾符類型成員方法1(參數(shù)列表){

類型局部變量;

方法體

}

修飾符類型成員方法2(參數(shù)列表){

類型局部變量;

方法體

}......}與OOP有關(guān)的關(guān)鍵字訪問權(quán)限修飾符public、private、protected類型無修飾符privateprotectedpublic同一類是是是是同一包中的子類是否是是同一包中的非子類是否是是不同包中的子類否否是是不同包中的非子類否否否是類定義示例publicclassPerson{ privateStringname; privateintage; privateStringsex,phonenumber; privateStringgetName(){/*此處是必要的代碼…*/}; privateintgetAge(){/*此處是必要的代碼…*/}; privatevoidsetPhoneNumber(Stringphonenumber){/*代碼*/};}publicclassBankAccount{ privateStringowner; privatefloatbalance; privatelongaccountNnumber; privatevoidwithdraw(floatneed){/*此處是必要的代碼…*/}; privatevoiddeposit(floatcash){/*此處是必要的代碼…*/}; privatefloatgetBalance(){/*此處是必要的代碼…*/};}類定義的幾點說明類定義中,類頭與類體是放在一起保存的,整個類必須在一個文件中,因此有時源文件會很大Java源文件名必須根據(jù)文件中的公有類名來定義,并且要區(qū)分大小寫類定義中可以指明父類,也可以不指明。若沒有指明從哪個類派生而來,則表明是從缺省的父類Object派生而來。Object是Java中所有類的父類。Java中除Object之外的所有類均有一個且只有一個父類。Object是唯一沒有父類的類class定義的大括號之后沒有分隔符“;”構(gòu)造方法

構(gòu)造方法是特殊的類方法,有著特殊的功能。它的名字與類名相同,沒有返回值,在創(chuàng)建對象實例時由new運算符自動調(diào)用為了創(chuàng)建實例的方便,一個類可以有多個具有不同參數(shù)列表的構(gòu)造方法,即構(gòu)造方法可以重載構(gòu)造方法不能說明為native,abstract,synchronized或final,也不能從父類繼承構(gòu)造方法

publicclassXyz{ intx; //成員變量 publicXyz(){//參數(shù)表為空的構(gòu)造方法

x=0; } publicXyz(inti){//帶一個參數(shù)的構(gòu)造方法

x=i;//使用參數(shù)創(chuàng)建對象 }}在創(chuàng)建Xyz的實例時,可以使用兩種形式:XyzXyz1=newXyz(); //調(diào)用的第一個XyzXyz2=newXyz(5); //調(diào)用的第二個構(gòu)造方法的特性

構(gòu)造方法的名字與類名相同沒有返回值類型必須為所有的變量賦初值通常要說明為public類型的,即公有的可以按需包含所需的參數(shù)列表默認(rèn)的構(gòu)造方法

每個類都必須至少有一個構(gòu)造方法。如果程序員沒有為類定義構(gòu)造方法,系統(tǒng)會自動為該類生成一個默認(rèn)的構(gòu)造方法默認(rèn)構(gòu)造方法的參數(shù)列表及方法體均為空,所生成的對象的屬性值也為零或空。如果程序員定義了一個或多個構(gòu)造方法,則將自動屏蔽掉默認(rèn)的構(gòu)造方法。構(gòu)造方法不能繼承默認(rèn)的構(gòu)造方法例classBankAccount{ StringownerName; intaccountNumber; floatbalance;}

publicclassBankTester{ publicstaticvoidmain(Stringargs[]){ BankAccountmyAccount=newBankAccount(); System.out.println("ownerName="+myAccount.ownerName); System.out.println("accountNumber="+ myAccount.accountNumber); System.out.println("balance="+myAccount.balance); }}輸出結(jié)果為:ownerName=nullaccountNumber=0balance=0.0我們可以在調(diào)用默認(rèn)的構(gòu)造方法之后直接對其狀態(tài)進行初始化,BankAccountmyAccount;myAccount=newBankAccount();myAccount.ownerName=“Wangli";myAccount.accountNumber=1000234;myAccount.balance=2000.00f;構(gòu)造方法重載在進行對象實例化時可能會遇到許多不同情況,于是要求針對所給定的不同的參數(shù)調(diào)用各個不同的構(gòu)造方法

在一個類中同時定義若干個構(gòu)造方法,亦即對構(gòu)造方法進行重載來實現(xiàn)

在其中一個構(gòu)造方法中引用另一個構(gòu)造方法的情況??梢允褂藐P(guān)鍵字this來指代本類中的其他構(gòu)造方法

publicclassStudent{ Stringname; intage;

publicStudent(Strings,intn){ name=s; age=n; } publicStudent(Strings){ this(s,20); } publicStudent(){ this("Unknown"); }}this引用類的成員方法中訪問類的成員變量,可以使用關(guān)鍵字this指明要操作的對象有些情況下關(guān)鍵字this是必需的例如,在完全獨立的類中調(diào)用一個方法,同時把對象實例作為一個自變量來傳送。此時,要用this指明對哪個對象實例進行操作BirthdaybDay=newBirthday(this);

在類定義的方法中,Java自動用this關(guān)鍵字把所有變量和方法引用結(jié)合在一起。所以,不管寫不寫this,在成員變量和成員方法的前面,系統(tǒng)都自動添加上。因此,例4.7中的this是不必要的,程序中可以不寫這個關(guān)鍵字//例4.7publicclassDate{ privateintday,month,year; publicvoidprintDate(){ System.out.println("Thecurrentdateis(dd/mm/yy):" +this.day+"/"+this.month+"/"+this.year); }}//例4.8publicclassDate{ privateintday,month,year; publicvoidprintDate(){ System.out.println("Thecurrentdateis(dd/mm/yy):" +day+"/"+month+"/"+year); }}創(chuàng)建一個對象對象引用類名變量名;對象實例化變量名=new類名(參數(shù)列表);對象使用對象引用.成員數(shù)據(jù)對象引用.成員方法(參數(shù)列表);對象的構(gòu)造和初始化

說明了一個引用后,要調(diào)用new為新對象分配空間,也就是要調(diào)用構(gòu)造函數(shù)在Java中,使用構(gòu)造方法是生成實例對象的唯一方法。在調(diào)用new時,既可以帶有變量,也可以不帶變量,這要視具體的構(gòu)造方法而定調(diào)用構(gòu)造方法時步驟如下:(1)分配新對象的空間,并進行缺省的初始化。在Java中,這兩步是不可分的,從而可確保不會有沒有初值的對象。(2)執(zhí)行顯式的成員初始化。(3)執(zhí)行構(gòu)造方法,構(gòu)造方法是一個特殊的方法。

顯式成員初始化

在成員說明中寫有簡單的賦值表達式,就可以在構(gòu)造對象時進行顯式的成員初始化

publicclassInitialized{ privateintx=5; //顯式的初始化 privateStringname="Fred"; //顯式的初始化 privateDatecreated=newDate(); ...}

Date

todaytoday=newDate();todaydaymonthyeartoday引用對象類實例????0000x01abcdef類引用與實例創(chuàng)建過程:classPoint{ //定義一個二維點類 publicintx,y; //橫縱坐標(biāo) Point(intx1,inty1){x=x1;y=y1;}//使用給定值為橫縱坐標(biāo)賦初值 Point(){this(0,0);} //使用默認(rèn)值0為橫縱坐標(biāo)賦初值 publicvoidmoveTo(intx1,inty1){ //移動到新的位置 x=x1;y=y1; }}publicclassPointTest{ publicstaticvoidmain(Stringargs[]){ Pointp=newPoint(1,1); p.x=p.y=20; //公有類型才可以直接訪問 System.out.println("p.x="+p.x+"p.y="+p.y); p.moveTo(30,30); System.out.println("p.x="+p.x+"p.y="+p.y); }}引用賦值Strings="Hello";Stringt=s;s="World";0x12345670x1234567Worldts第二節(jié)定義方法定義抽象數(shù)據(jù)類型后,需要為這個類型的對象定義操作,也就是方法。格式如下:

<修飾符><返回類型><名字>(<參數(shù)列表>)<塊>

<名字>是方法名,它必須使用合法的標(biāo)識符。<返回類型>說明方法返回值的類型。<修飾符>段可以含幾個不同的修飾符,其中限定訪問權(quán)限的修飾符包括public,protected和private。<參數(shù)列表>是傳送給方法的參數(shù)表。表中各元素間以逗號分隔,每個元素由一個類型和一個標(biāo)識符組成。<塊>表示方法體,是要實際執(zhí)行的代碼段。增加方法程序4.2Date類中增加tomorrow()、daysInMonth()和printDate()方法

按值傳送“按值”傳送自變量,即方法調(diào)用不會改變自變量的值當(dāng)對象實例作為自變量傳送給方法時,自變量的值是對對象的引用,也就是說,傳送給方法的是引用值。在方法內(nèi),這個引用值是不會被改變的,但可以修改該引用指向的對象內(nèi)容。因此,當(dāng)從方法中退出時,所修改的對象內(nèi)容可以保留下來

傳值實例程序4.3創(chuàng)建pt對象,方法內(nèi)局部變量val賦初值11。調(diào)用方法changeInt()后,val的值沒有改變。字符串變量str作為changeStr的參數(shù)傳入方法內(nèi),當(dāng)從方法中退出后,其內(nèi)容也沒有變化。當(dāng)對象pt作為參數(shù)傳給changeObjValue()后,該引用所保存的地址不改變,而該地址內(nèi)保存的內(nèi)容可以變化,因此退出方法后,pt對象中的ptValue改變?yōu)?9f重載方法名如果需要在同一個類中寫多個方法,讓它們對不同的變量進行同樣的操作,就需要重載方法名一個方法區(qū)別于另一個方法的要素:方法名、參數(shù)列表及返回值。根據(jù)參數(shù)來查找適當(dāng)?shù)姆椒ú⒄{(diào)用,包括參數(shù)的個數(shù)及類型方法的重載允許Java在同一個類中可以定義相同的方法名,但需要具有不同的參數(shù)表。不只如此,在不同的類中也可以定義相同的方法名

現(xiàn)在假定需要打印int、float和String類型的值。publicvoidprint(inti)publicvoidprint(floatf)publicvoidprint(Strings)

重載方法兩條規(guī)則

調(diào)用語句的自變量列表必須足夠判明要調(diào)用的是哪個方法自變量的類型可能要進行正常的擴展提升(如浮點變?yōu)殡p精度),但在有些情況下這會引起混淆

方法的返回類型可能不同如果兩個同名方法只有返回類型不同,而自變量列表完全相同則是不夠的,因為在方法執(zhí)行前不知道能得到什么類型的返回值,因此也就不能確定要調(diào)用的是哪個方法。重載方法的參數(shù)表必須不同,即參數(shù)個數(shù)或參數(shù)類型不同

第三節(jié)靜態(tài)成員

靜態(tài)成員,它包括類變量和類方法。它是不依賴于特定對象的內(nèi)容

不同對象的成員其內(nèi)存地址是不同的

系統(tǒng)只在實例化類的第一個對象的時候,為類成員分配內(nèi)存,以后再生成該類的實例對象時,將不再為類成員分配內(nèi)存,不同對象的類變量將共享同一內(nèi)存空間

靜態(tài)成員成員變量成員方法成員變量成員方法類變量類方法對象A對象B靜態(tài)變量讓一個變量被類的多個實例對象所共享,以實現(xiàn)多個對象之間的通信,或用于記錄已被創(chuàng)建的對象的個數(shù),這樣的變量有時也被稱為靜態(tài)變量(或類變量)將一個變量定義為類變量的方法就是將這個變量標(biāo)記上關(guān)鍵字static靜態(tài)變量Java語言中沒有全局變量的概念,靜態(tài)變量從某種意義

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論