




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JAVA語(yǔ)言程序設(shè)計(jì)第一章
計(jì)算機(jī)語(yǔ)言概述
第一節(jié)程序設(shè)計(jì)語(yǔ)言第二節(jié)語(yǔ)言翻譯程序第三節(jié)Java虛擬機(jī)與運(yùn)行環(huán)境第四節(jié)Java程序的運(yùn)行第五節(jié)Java程序的開發(fā)、執(zhí)行流程小結(jié)習(xí)題Basic、Fortran語(yǔ)言擅長(zhǎng)描述問題解決的過程,也就是說,描述怎樣解決問題。人們把這些語(yǔ)言稱為面向過程的語(yǔ)言。1.1程序設(shè)計(jì)語(yǔ)言
低級(jí)程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)語(yǔ)言:高級(jí)程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言匯編程序設(shè)計(jì)語(yǔ)言Basic語(yǔ)言Fortran語(yǔ)言Prolog語(yǔ)言C++Java語(yǔ)言Prolog語(yǔ)言:面向邏輯的語(yǔ)言。Java、C++語(yǔ)言:面向?qū)ο蟮恼Z(yǔ)言,第一種可以編寫普通的應(yīng)用程序也可以編寫專用于internet或intrant應(yīng)用程序的語(yǔ)言。有人說:Java是網(wǎng)絡(luò)上的世界語(yǔ)。1.1程序設(shè)計(jì)語(yǔ)言
一次編譯,到處運(yùn)行1完全面向?qū)ο?移植性3穩(wěn)定性4簡(jiǎn)單性5高性能性6動(dòng)態(tài)特性7分布式1.1程序設(shè)計(jì)語(yǔ)言Java語(yǔ)言的特點(diǎn)1.2語(yǔ)言翻譯程序X86機(jī)器碼Powerpc機(jī)器碼MIPS機(jī)器碼ALPHA機(jī)器碼MIPS機(jī)器ALPHA機(jī)器Powerpc機(jī)器X86機(jī)器“一次編譯,到處運(yùn)行”原理Java虛擬機(jī)(JVM-JavaVirtualMachine)是什么:虛擬機(jī)是運(yùn)行在主操作系統(tǒng)頂層的軟件層,是一種虛擬計(jì)算機(jī)。作用:使得一臺(tái)實(shí)際的機(jī)器能夠運(yùn)行Java字節(jié)碼程序。Java虛擬機(jī)與操作系統(tǒng)和計(jì)算機(jī)硬件無(wú)關(guān)。Java經(jīng)過編譯后的字節(jié)碼程序可以在網(wǎng)絡(luò)上流動(dòng)到任意支持Java虛擬機(jī)的網(wǎng)點(diǎn)機(jī)上運(yùn)行。1.3java虛擬機(jī)與運(yùn)行環(huán)境Java是解釋型的高級(jí)編程語(yǔ)言編譯型源程序字節(jié)碼程序Java源程序可執(zhí)行程序EXE裸機(jī)操作系統(tǒng)解釋器編譯連接編譯運(yùn)行解釋運(yùn)行.java.classJava虛擬機(jī)
Java編譯系統(tǒng)和運(yùn)行系統(tǒng)的功能如圖所示。1.4java程序的運(yùn)行
Java編譯和運(yùn)行系統(tǒng)功能圖
編譯源程序(如hello-java)字節(jié)碼文件Hello.class網(wǎng)絡(luò)或本地類裝載器解釋器字節(jié)碼檢驗(yàn)器代碼生成器即時(shí)運(yùn)行部件運(yùn)行系統(tǒng)創(chuàng)建,編譯運(yùn)行1.
編寫Java源程序:文件以Java作為后綴。
2.源程序編譯成字節(jié)碼
3.由運(yùn)行系統(tǒng)解釋和執(zhí)行。開發(fā)流程如圖所示。
1.5java程序的開發(fā)執(zhí)行流程源文件(java文件)編譯器編譯字節(jié)碼(class文件)運(yùn)行系統(tǒng)解釋運(yùn)行結(jié)果2.1JDKJDK的安裝與配置下載地址:/j2se/1.4.2/download.html安裝后生成的目錄:lib目錄保存的是庫(kù)文件classes目錄保存的是Java類庫(kù)bin目錄一些執(zhí)行文件和動(dòng)態(tài)連接庫(kù)文件demo目錄一些Applet的實(shí)例
2.1JDKJDK的安裝與配置配置環(huán)境變量:從桌面上選擇“我的電腦”(右鍵)→屬性→高級(jí)→環(huán)境變量在其中選擇“系統(tǒng)變量”的“新建”在變量名中輸入CLASSPATH,變量值中輸入類庫(kù)名c:\jdk13\LIB\dt.JAR;c:\jdk13\LIB\TOOLS.JAR;然后選擇確定。再次選擇“系統(tǒng)變量”的“新建”,在變量名中輸入PATH,變量值中輸入c:\jdk13\BIN,然后選擇確定。
注意:在配置完成后,要重新啟動(dòng)計(jì)算機(jī),環(huán)境變量才能生效。
2.1JDKJDK中的常用命令:javac編譯命令把Java語(yǔ)言源碼編譯成字節(jié)碼
java解釋執(zhí)行命令執(zhí)行由javac命令生成的字節(jié)代碼
2.1JDKJDK下開發(fā)Java應(yīng)用的步驟
編寫源文件打開文本編輯器:【開始】→【程序】→【附件】→【記事本】
將源文件編譯成字節(jié)碼文件運(yùn)行程序
開始編寫我們第一個(gè)Java程序!Applet和ApplicationJavaApplet(小應(yīng)用程序):不是一個(gè)完整的應(yīng)用程序,而是框架程序中的一個(gè)模塊,所以只能在WWW瀏覽器環(huán)境下運(yùn)行。JavaApplication(Java應(yīng)用程序):是一個(gè)完整的應(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=MyFirstMyAppletWIDTH=500HEIGHT=500></APPLET></BODY></HTML>Test.html測(cè)試網(wǎng)頁(yè)JavaApplet工作原理HTML文件嵌入Appletwww服務(wù)器www服務(wù)器www瀏覽器請(qǐng)求HTML文件下載HTML文件請(qǐng)求Applet字節(jié)碼下載Applet字節(jié)碼解釋執(zhí)行Applet字節(jié)碼編寫Java程序需要注意的幾點(diǎn)Java區(qū)分大小寫類定義不能嵌套一個(gè)程序中可以有一個(gè)或多個(gè)類,但其中只能有一個(gè)主類源程序編寫完畢,應(yīng)該用主類名作為文件名,再加后綴.java存儲(chǔ)成磁盤文件3.2標(biāo)識(shí)符、注釋和分隔符
標(biāo)識(shí)符用來(lái)標(biāo)記語(yǔ)言中元素名稱Java標(biāo)識(shí)符的規(guī)則:以字母、下劃線或美元符$開頭字母、下劃線、數(shù)字組成的序列,而且,標(biāo)識(shí)符的長(zhǎng)度任意標(biāo)識(shí)符分為兩類:保留字用戶定義標(biāo)識(shí)符保留字:一律小寫abstractdoubleintstrictfpbooleanelseinterfacesuperbreakextendslongswitchbytefinalnativesynchronizedcasefinallynewthiscatchfloatpackagethrowcharforprivatethrowsclassgotoprotectedtransientconstifpublictrycontinueimplementsreturnvoiddefaultimportshortvolatiledoinstanceofstaticwhiletruefalse程序設(shè)計(jì)者根據(jù)自己的需要定義的類、變量、方法、接口的名字。用戶定義標(biāo)識(shí)符注意:
1.禁止用保留字作為用戶標(biāo)識(shí)符;
2.遵守先定義后使用的原則。即只有定義了的標(biāo)識(shí)符,才可在語(yǔ)句部分使用。合法標(biāo)識(shí)符:
A,a1,$Systembol,square,ex_sa不合法標(biāo)識(shí)符:
1a(以數(shù)字1開頭)
break(禁止使用保留字)
TWOWORDS(含有空格)
.NO(有圓點(diǎn))
Java有三種注釋形式:“//”單行注釋:表示從此向后,直到行尾都是注釋。“/*……*/”塊注釋:在“/*”和“*/”之間都是注釋,塊注釋不能嵌套?!?**……*/”文檔注釋:所有在“/**”和“*/”之間的內(nèi)容可以用來(lái)自動(dòng)形成文檔。3.2標(biāo)識(shí)符、注釋和分隔符空格、逗號(hào)、分號(hào)及行結(jié)束符稱為分隔符3.2標(biāo)識(shí)符、注釋和分隔符注意:分隔符(逗號(hào)、分號(hào)等)不能是中文下的。變量:Java的變量有兩種:局部變量、類成員變量。變量必須先說明后使用。變量的說明形式如下:
類型
變量名表當(dāng)變量名列表中說明多個(gè)變量為同一類型時(shí),變量名之間用逗號(hào)分隔
注意:
局部變量在使用前必須給定初值,否則,Java將不編譯,而類成員變量無(wú)此要求。3.3變量與常量習(xí)慣上,變量名以小寫字母開頭,若一個(gè)變量名由超過一個(gè)單詞所組成,則第一個(gè)單詞之后的所有單詞都以大寫字母開頭,以便于理解該變量名。例如,anIntVar、myName變量名變量類型用于表述數(shù)據(jù)的格式和結(jié)構(gòu)。Java中的數(shù)據(jù)類型可分為兩大類:基本數(shù)據(jù)類型:整數(shù)浮點(diǎn)數(shù)字符布爾型構(gòu)造數(shù)據(jù)類型:
Java語(yǔ)言中構(gòu)造類型用類來(lái)描述。
變量的類型數(shù)據(jù)類型名占用內(nèi)存空間數(shù)值范圍缺省值說明byte1字節(jié)(-128)--1270整
型short2字節(jié)(-32768)--327670int4字節(jié)(-2147483648)--21474836470long8字節(jié)(-9223372036854775808)--92233720368547758070float4字節(jié)(±3.4028347E+38)--(±1.40239846E-45)0.0F
浮點(diǎn)型double8字節(jié)(±1.79769313486231570E+308)--(±4.94065645841246544E-324)0.0Dchar2字節(jié)\u0000--\uFFFF\u0000字符型boolean1位true或false
False布爾型
基本數(shù)據(jù)類型表注:缺省值就是默認(rèn)的初值,只對(duì)成員變量有用.局部變量在使用前必須人為地給定初值
變量的作用域是指什么范圍的程序可以訪問該變量。變量說明時(shí)就確定了其作用域。
變量按作用域分為:
類成員變量方法參數(shù)局部變量變量的作用域常量
常量是指在程序運(yùn)行過程中其值不變的量。常量的表示形式:
final變量類型變量名3.3變量與常量3.4基本類型和一維數(shù)組整型浮點(diǎn)型布爾型字符型一維數(shù)組
采用不同的整數(shù)類型表達(dá)同一數(shù)值,在存儲(chǔ)單元中的存儲(chǔ)情況是不同的。下圖表示的是數(shù)值20的不同存儲(chǔ)形式:00010100byte型
0000000000010100short型
00000000000000000000000000010100int型0000000000000000000000000000000000000000000000000000000000010100
long型
3.4.1整型
整數(shù)變量有三種表示形式:(1)十進(jìn)制整數(shù)(2)八進(jìn)制整數(shù)(3)十六進(jìn)制整數(shù)
420520x2A0X2a
Java缺省整數(shù)常量類型為int類型,如果要表示long類型整數(shù)需要在整數(shù)后加上后綴L或l
整數(shù)變量整型變量類型有int、short、long、byte,由于byte和short類型表示的數(shù)范圍較小,不常使用。整型變量說明如下:例3.2intanIntVar;
//說明變量anIntVar是int整型longaLongVar=12345;//說明變量aLongVar是long整
//型,并賦以初值12345shortaShortVar;
//說明變量aShortVar是short整型byteaByteVar;
//說明變量aByteVar是byte整型
整數(shù)變量
浮點(diǎn)型包括兩種不同的實(shí)型:float和double。1Java缺省的浮點(diǎn)型常數(shù)是double型2如果要表示float型,要在數(shù)字后加后綴F或f。如果要表示double型,也可以在數(shù)字后加后綴D或d。
3.4.2浮點(diǎn)型浮點(diǎn)型有兩種表示法:(1)浮點(diǎn)型十進(jìn)制表示法
-3.5f0.0f123.45f+678.9f要注意,采用十進(jìn)制表示法時(shí),小數(shù)點(diǎn)的兩側(cè)都必須有數(shù)字,缺一不可,如+123.和.56都是不合法的。
浮點(diǎn)型變量(2)浮點(diǎn)型科學(xué)表示法:
-1.234567E+12
(-1.2345678901×1012)
尾數(shù)
階碼注意:尾數(shù)必須有,但小數(shù)部分可無(wú);階碼必須有,必須是整數(shù)。下列表示都是不正確的。
E-6(缺尾數(shù))
3E(無(wú)階碼)
2.E3(尾數(shù)出錯(cuò))
2E1.2(階碼非整數(shù))
浮點(diǎn)型常量布爾數(shù)據(jù)類型用于表達(dá)邏輯狀態(tài):布爾型數(shù)據(jù)只有兩個(gè)值:true和false。注意:
Java中不可將布爾類型看做整型值。3.4.3布爾型
字符類型數(shù)據(jù)只有一個(gè)字符,采用16位二進(jìn)制Unicode編碼表示。
字符型表示字符用兩個(gè)單引號(hào)括起來(lái)一個(gè)字符來(lái)表述。例如:
‘A’;’a’;’2’;’大’;3.4.4字符型
字符型變量表述
轉(zhuǎn)義字符
Java允許在字符串中出現(xiàn)轉(zhuǎn)義字符,轉(zhuǎn)義字符見下表?yè)Q碼序列名稱Unicode值\b退格\u0008\tTab(制表)\u0009\n換行\(zhòng)u000a\r硬回車\u000d\”雙引號(hào)\u0022\ˊ單引號(hào)\u0027\\反斜杠\u005c字符串常量一個(gè)字符串常量是括在兩個(gè)雙引號(hào)之間的字符序列。若兩個(gè)雙引號(hào)之間沒有任何字符,則為空串。以下是字符串的一些例子:"Thisisastringconstant"JAVA""Yousee"Java語(yǔ)言把字符串常量當(dāng)作String類型的一個(gè)對(duì)象來(lái)處理,以后有詳細(xì)介紹。3.5運(yùn)算符及表達(dá)式運(yùn)算符表達(dá)式運(yùn)算符表明對(duì)操作數(shù)的運(yùn)算方式。運(yùn)算符按其要求的操作數(shù)個(gè)數(shù)分為:1.一元運(yùn)算符如++、--2.二元運(yùn)算符如+、-、*、/、%3.三元運(yùn)算符如?:運(yùn)算符按其功能分為七類:1.算術(shù)運(yùn)算符+、-、*、/、%、++、--a++(a=a+1)2.關(guān)系運(yùn)算符>、<、>=、<=、==、!=3.邏輯運(yùn)算符!、&&、||、&、|4.位運(yùn)算符>>、<<、>>>、&、|、^、~5.條件運(yùn)算符?:6.賦值運(yùn)算符=、+=、-=7.其他:分量運(yùn)算符.、下標(biāo)運(yùn)算符[]、實(shí)例運(yùn)算instanceof3.5.2運(yùn)算符單元運(yùn)算符如
+(一元加,取正值)、
-(一元減,取負(fù)值)、
++
(自加)、--
(自減)雙元運(yùn)算符如+(加)、-(減)、*(乘)
/(除)、%(取余數(shù))。3.5.3算術(shù)運(yùn)算符1單目運(yùn)算(一元運(yùn)算)
intx=10,y1,y2;y1=++x;//x先加1,再賦于y1y2=x++;//x先賦于y2,再自增13.5.3算術(shù)運(yùn)算符2雙目運(yùn)算符:%
(1)操作數(shù)可以是整型,實(shí)型,字符型
(2)運(yùn)算的結(jié)果為int,long,float,double例:‘a(chǎn)’%7.5;8%3;
4%3.0;1關(guān)系運(yùn)算符有七種:
==
,!=,<,<=,>,>=
instanceof(對(duì)象運(yùn)算符)
操作數(shù):
==和!=可作用于所有簡(jiǎn)單型別身上;
instanceof用來(lái)確定一對(duì)象是否是某一指定類的對(duì)象。
3.5.4關(guān)系運(yùn)算符1邏輯運(yùn)算符:
!(非),&&(與),||(或),^(異或)。這些運(yùn)算符要求的操作數(shù)和結(jié)果值都是布爾型。
2邏輯運(yùn)算的直通計(jì)算:
表達(dá)式后面對(duì)計(jì)算布爾值沒有作用的部分忽略掉
3.5.5邏輯運(yùn)算符1位運(yùn)算符用來(lái)操作基本整數(shù)型別中的個(gè)別的位。
~
按位取反
&
按位與
|
按位或
^
按位異或
>>
有符號(hào)二進(jìn)制右移一定位
<<
有符號(hào)二進(jìn)制左移一定位
>>>
無(wú)符號(hào)二進(jìn)制右移一定位3.5.6位運(yùn)算符2boolean值被視為單一的位,可以執(zhí)行&,|,^三種位運(yùn)算賦值運(yùn)算的表述
注意:賦值運(yùn)算符“=”與數(shù)學(xué)的等號(hào)含義不同。
變量名=表達(dá)式;例:x=4;
算術(shù)運(yùn)算符,位操作符和賦值運(yùn)算符結(jié)合起來(lái),形式如下:
+=、-=、*=、/=、%=
例:x+=y等價(jià)于x=x+y3.5.7賦值運(yùn)算符Java中唯一的三元運(yùn)算符,其格式如下:
變量=<布爾表達(dá)式>?<表達(dá)式1>:<表達(dá)式2>含義是:當(dāng)<布爾表達(dá)式>為真時(shí),變量的值為<表達(dá)式1>的值,否則為<表達(dá)式2>的值。舉例(見下頁(yè)):3.5.8條件運(yùn)算符publicclasssss{ publicstaticvoidmain(Stringargs[]){ intx=20; absX=x>0?x:-x; //如x>0,absX等于x,否則等于x的相反數(shù)
System.out.println(“x的絕對(duì)值:”+absX); }}3.5.8條件運(yùn)算符
表達(dá)式是由操作數(shù)和運(yùn)算符按一定語(yǔ)法形式組成的符號(hào)序列,以下是合法的表達(dá)式例如:
a+b(a+b)*(a-b)“name=”+“李明”
每個(gè)表達(dá)式經(jīng)過運(yùn)算后都會(huì)產(chǎn)生一個(gè)確定的值。一個(gè)常量或一個(gè)變量是最簡(jiǎn)單的表達(dá)式。表達(dá)式作為一個(gè)整體(如同一個(gè)操作數(shù))還可以看成一個(gè)操作數(shù)參與到其他運(yùn)算中,形成復(fù)雜的表達(dá)式。
3.5.1表達(dá)式3.6運(yùn)算符的優(yōu)先級(jí)優(yōu)先級(jí)運(yùn)算符類型1()2+、-、++、--、!、~單目運(yùn)算符3*、/、%算術(shù)運(yùn)算符4+、-算術(shù)運(yùn)算符5<<、>>、>>>移位運(yùn)算符6<、<=、>、>=關(guān)系運(yùn)算符7==、!=關(guān)系運(yùn)算符8&&邏輯運(yùn)算符9||邏輯運(yùn)算符10?:條件運(yùn)算符11=、+=、-=、*=、/=、%=、^=賦值運(yùn)算符12&=、|=、<<=、>>=、>>>=表達(dá)式寫法的習(xí)慣:(1)除非是簡(jiǎn)單的直觀運(yùn)算,應(yīng)該盡量使用括號(hào)(2)盡量不要寫太長(zhǎng)的表達(dá)式,過長(zhǎng)的表達(dá)式容易引起對(duì)求值次序的誤解。(3)有時(shí)為了表達(dá)清楚,可以引進(jìn)多余的括號(hào)3.6運(yùn)算符的優(yōu)先級(jí)3.7數(shù)據(jù)類型轉(zhuǎn)換自動(dòng)類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換
Java中整型、實(shí)型、字符型數(shù)據(jù)可以混合運(yùn)算。運(yùn)算過程中,不同類型的數(shù)據(jù)會(huì)自動(dòng)轉(zhuǎn)換為同一類型。自動(dòng)類型轉(zhuǎn)換原則:
從低數(shù)據(jù)類型向高數(shù)據(jù)類型轉(zhuǎn)換即:
(byte
,char)→short→int
→long→float→double注意:布爾型與其它基本類型之間不能轉(zhuǎn)換舉例:3+4.5=3.0+4.5=7.53.7.1自動(dòng)類型轉(zhuǎn)換形式為:
(類型名)表達(dá)式例如:
longl=156;byteb;
b=(byte)l;
3.7.2強(qiáng)制類型轉(zhuǎn)換注意:1.
一般使用強(qiáng)制類型轉(zhuǎn)換可能會(huì)導(dǎo)致數(shù)值溢出或精度的下降,應(yīng)盡量避免。
2.布爾型與其它基本類型之間不能轉(zhuǎn)換3.8簡(jiǎn)單語(yǔ)句和復(fù)合語(yǔ)句變量說明語(yǔ)句復(fù)制語(yǔ)句方法調(diào)用語(yǔ)句空語(yǔ)句標(biāo)準(zhǔn)輸入輸出復(fù)合語(yǔ)句語(yǔ)句是程序的基本組成單位。一個(gè)基本的簡(jiǎn)單語(yǔ)句總是以分號(hào)結(jié)尾的。變量說明語(yǔ)句用來(lái)聲明一個(gè)變量,變量說明語(yǔ)句的格式為:類型變量名1,變量名2…;
例:charc=‘a(chǎn)’;inti=1;3.8.1變量聲明語(yǔ)句3.8.2賦值語(yǔ)句賦值語(yǔ)句是將表達(dá)式的值賦給變量其格式為:
變量=表達(dá)式;例:charc;c=‘a(chǎn)’;方法調(diào)用語(yǔ)句的一般形式為:
對(duì)象.方法名(實(shí)參數(shù)列表);例如:
System.out.println(“Example!”);3.8.3方法調(diào)用語(yǔ)句3.8.4空語(yǔ)句空語(yǔ)句是什么都不做的語(yǔ)句,其形式為:
;//這是一條空語(yǔ)句
輸入和輸出是Java程序的重要組成部分,它提供了人機(jī)交互的手段,它們屬于方法調(diào)用語(yǔ)句。3.8.5標(biāo)準(zhǔn)輸入輸出(I/O)1輸入輸出
輸入是指把需要加工的數(shù)據(jù)放到程序中
輸出則把程序處理的結(jié)果呈現(xiàn)給用戶2標(biāo)準(zhǔn)輸入輸出
一般用鍵盤作為標(biāo)準(zhǔn)的輸入設(shè)備
顯示器則是標(biāo)準(zhǔn)的輸出設(shè)備通過System.in和System.out對(duì)象分別與鍵盤和顯示器發(fā)生聯(lián)系進(jìn)行輸入和輸出System.out對(duì)象中包含的最常用的方法是:
println(參數(shù))方法向標(biāo)準(zhǔn)輸出設(shè)備(顯示器)打印一行文本并換行
print(參數(shù))方法向標(biāo)準(zhǔn)輸出設(shè)備(顯示器)打印一行文本,但不換行標(biāo)準(zhǔn)輸出System.out對(duì)象System.in中最常用的方法:intread()返回所輸入的字符串的第一個(gè)字符的ASCII碼intread(byteb[])返回讀取的字符的數(shù)量intread(byteb[],intoff,intlen)
返回讀取的字節(jié)的數(shù)量,將輸入的字符串的前
len位,存放在字符數(shù)組b的下標(biāo)為off以后的元素中標(biāo)準(zhǔn)輸入System.in對(duì)象例子:publicclasstestinput{publicstaticvoidmain(String[]args){try{byte[]by=newbyte[256];System.out.println("Pleaseinput:");inti=System.in.read(by);System.out.println(i);Strings;s=newString(by,0,i);System.out.println(s);}catch(Exceptione){e.printStackTrace();}}}
將相關(guān)語(yǔ)句組合在一起就構(gòu)成復(fù)合語(yǔ)句,復(fù)合語(yǔ)句由{}括起來(lái),{}內(nèi)的每條語(yǔ)句的語(yǔ)法與上面介紹的一樣。
{}也叫一個(gè)語(yǔ)句塊。3.8.6復(fù)合語(yǔ)句3.9控制語(yǔ)句表達(dá)式語(yǔ)句:表達(dá)式后加一個(gè)分號(hào)a+=a*6;a++;a+3;復(fù)合語(yǔ)句:包含在一對(duì)大括號(hào)中的語(yǔ)句序列流程控制語(yǔ)句:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)選擇結(jié)構(gòu)if(布爾型表達(dá)式)語(yǔ)句1;[else
語(yǔ)句2;]
switch(表達(dá)式){
case
常量1:語(yǔ)句塊1;
......
case
常量n:語(yǔ)句塊n;
default:語(yǔ)句塊n+1;}使用switch語(yǔ)句需要注意:表達(dá)式必須是符合byte、char、short和int類型的表達(dá)式,而不能使用浮點(diǎn)類型或long類型,也不能為一個(gè)字符串;要有用于跳轉(zhuǎn)的break語(yǔ)句;switch語(yǔ)句中的每個(gè)case子句都必須對(duì)應(yīng)一個(gè)單值。循環(huán)結(jié)構(gòu)—while
格式:
while(循環(huán)條件){循環(huán)體}含義:當(dāng)循環(huán)條件為true時(shí),重復(fù)執(zhí)行循環(huán)體。intx=2;while(x<7){ System.out.println(“x=”+x); x++;}注意:while表達(dá)式的括號(hào)后面一定不要寫“;”循環(huán)結(jié)構(gòu)—do格式:do{
循環(huán)體}while(循環(huán)條件);含義:重復(fù)執(zhí)行循環(huán)體,直到循環(huán)條件為false。循環(huán)結(jié)構(gòu)—for格式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體;表達(dá)式1:循環(huán)初值表達(dá)式2:布爾型表達(dá)式,循環(huán)條件表達(dá)式3:循環(huán)增量表達(dá)式控制轉(zhuǎn)移語(yǔ)句break語(yǔ)句:使程序的流程從一個(gè)語(yǔ)句塊內(nèi)部轉(zhuǎn)移出去。通常在switch和循環(huán)語(yǔ)句中使用。continue語(yǔ)句:只能在循環(huán)語(yǔ)句中使用。其作用是終止當(dāng)前這一輪的循環(huán),直接進(jìn)入下一輪的循環(huán)。3.4.5數(shù)組為什么會(huì)有數(shù)組?棧內(nèi)存和堆內(nèi)存int[]x;x=newint[100];x=null;的內(nèi)存狀態(tài)變化情況3.4.5數(shù)組數(shù)組類型屬于復(fù)合數(shù)據(jù)類型,它是由類型相同的元素組成的有順序的數(shù)據(jù)集合。特點(diǎn):元素類型相同;元素有順序;所有元素共用一個(gè)名稱。第一步數(shù)組的聲明:格式:數(shù)組元素類型數(shù)組名[];數(shù)組元素類型[]數(shù)組名;舉例:
intmyarray[];doublearray_double[];String[]str;Point[]P;注意:聲明數(shù)組時(shí)不能指定其長(zhǎng)度inta[3];第二步創(chuàng)建數(shù)組空間:與其他的語(yǔ)言不同,在Java語(yǔ)言中,聲明數(shù)組時(shí)不能指定它的長(zhǎng)度,而是利用new來(lái)為數(shù)組型變量分配內(nèi)存空間,我們將其稱之為創(chuàng)建數(shù)組。
myarray=newint[10];array_double=newdouble[1000];intString[]str=newString[10];注意:數(shù)組創(chuàng)建后,系統(tǒng)自動(dòng)為數(shù)組元素賦初值。第三步數(shù)組的初始化:數(shù)組元素的默認(rèn)初值:整型:0實(shí)型:0.0f或0.0d字符:‘\0’類對(duì)象:nullIntarray_int[]={1,2,3,4,5,6,7};String[]str={“Fortran”,“QBasic”,“Pascal”};數(shù)組元素的使用:int[]x;x=newint[10];x[0]=3;x[4]=8;x[i]使用數(shù)組時(shí)要注意的問題:空指針異常如何得到數(shù)組長(zhǎng)度數(shù)組越界異常main函數(shù)的輸入?yún)?shù)(String[]args)的使用多維數(shù)組:如何理解多維數(shù)組?Java中沒有真正的多維數(shù)組,只有數(shù)組的數(shù)組。Java中只有數(shù)組的數(shù)組。定義一個(gè)多維數(shù)組:int[][]x;x=int[3][];x[0]=newint[3];x[1]=newint[2];4.1面向?qū)ο蟮睦碚摶A(chǔ)面向過程在一個(gè)結(jié)構(gòu)體中定義窗口的大小、位置、顏色背景等屬性,對(duì)窗口操作的函數(shù)與窗口本身的定義沒有任何關(guān)系,如HideWindow,MoveWindow和MinimizeWindow,這些函數(shù)都需要接受一個(gè)代表要被操作的窗口參數(shù),是一種謂語(yǔ)與賓語(yǔ)的關(guān)系。面向?qū)ο蠖x窗口時(shí),除了要指定在面向過程中規(guī)定的那些屬性,如大小、位置、顏色、背景等外,還要制定該窗口可能具有的動(dòng)作,如隱藏、移動(dòng)、最小化等,這些函數(shù)被調(diào)用時(shí),都是以某個(gè)窗口要怎樣來(lái)使用的,是一種主語(yǔ)與謂語(yǔ)的關(guān)系。
4.2對(duì)象和類classperson{intname;booleansextype;
intage;
voideat(){…}voidsleep(){…};voidwork(){…}}
計(jì)算機(jī)中的數(shù)據(jù)原型,即我們定義的類
現(xiàn)實(shí)生活中的對(duì)象
現(xiàn)實(shí)生活中的對(duì)象
抽象得到類的定義
類實(shí)例化得到對(duì)象現(xiàn)實(shí)世界
計(jì)算機(jī)中的數(shù)據(jù)4.2對(duì)象和類對(duì)象和類的關(guān)系對(duì)象是類的實(shí)例化類是對(duì)象的抽象電視機(jī)設(shè)計(jì)圖電視機(jī)1電視機(jī)2電視機(jī)3類對(duì)象
什么是類:類是描述對(duì)象的“基本原型”,它定義一種對(duì)象所能擁有的數(shù)據(jù)和能完成的操作(成員變量,方法)。什么是對(duì)象:是類的一個(gè)實(shí)例,是一個(gè)實(shí)實(shí)在在的個(gè)體。4.2對(duì)象和類data數(shù)據(jù)元素
方法一個(gè)例子:age是屬性,也叫成員變量;showAge叫類的成員函數(shù);showAge方法可以直接訪問同一個(gè)類中的age變量,如果該方法中有與成員變量同名的局部變量,該方法對(duì)這個(gè)變量名的訪問是局部變量,不再是成員變量。classPerson{}intage;publicvoidshowAge(){ System.out.println(age);}對(duì)象的產(chǎn)生:Personp1=newPerson();執(zhí)行后的內(nèi)存狀態(tài):比較:int[]xx=newint[30];執(zhí)行后的內(nèi)存狀態(tài):對(duì)象的使用:創(chuàng)建新的對(duì)象之后,我們就可以使用“對(duì)象名.對(duì)象成員”的格式,來(lái)訪問對(duì)象的成員(包括屬性和方法)ClassTestPerson{ publicstaticvoidmain(String[]args) { Personp1=newPerson(); Personp2=newPerson(); p1.age=-30; p1.showAge(); p2.showAge(); }}對(duì)象的使用:上面程序運(yùn)行的內(nèi)存布局圖如下:對(duì)象的生命周期:包的概念:為解決同一任務(wù)或子任務(wù)的類組成一個(gè)包 由包、子包和類構(gòu)成的一般Java程序的樹型結(jié)構(gòu),Java程序保存在文件系統(tǒng)時(shí),包名對(duì)應(yīng)于一目錄名,子包名對(duì)應(yīng)于目錄的子目錄,類對(duì)應(yīng)于它目錄樹型結(jié)構(gòu)的結(jié)點(diǎn)。
---包名1----包名1_1---類1_1_1---類1_1_2---類1_1_3----包名1_2---類1_2_1---類1_2_24.3java的包與類4.3.1類描述對(duì)象特征publicclassPoint{ publicintx;//成員變量說明,定義點(diǎn)的x坐標(biāo)
publicinty;//成員變量說明,定義點(diǎn)的y坐標(biāo)
publicPoint(intX,intY)//帶參數(shù)的構(gòu)造方法;
{x=X;y=Y;} publicdoubledistance()//計(jì)算點(diǎn)到原點(diǎn)的距離
{ returnMath.sqrt(x*x+y*y); }}類首說明的形式如下:[package說明][import說明][修飾符]class類名[extends父類名][implements接口列表]1.類修飾符分類:friendly(默認(rèn)) 類只能被本包中的其他類使用public(公共) 類能被所有的類訪問,注意。。。abstract(抽象) 類不能被實(shí)例化,含未實(shí)現(xiàn)的方法final(最終) 類不能被繼承,即不能有子類2.extends:實(shí)現(xiàn)單繼承4.3.2類首說明類體形式說明如下:
{
[成員變量說明][構(gòu)造方法說明][靜態(tài)方法說明][方法說明]}注意:類體中說明都是可選的,也沒有先后順序之分4.3.2類體說明形式:
[修飾符]類型成員變量名1,…,成員變量名n;修飾符兩類:
1訪問修飾符:
默認(rèn)的成員變量可以被定義同一包中的任何類訪問;
public成員變量可以被項(xiàng)目文件中的任何方法所訪問;
protected變量可以被有繼承關(guān)系的類和同一包中的類的訪問;
private成員變量只能在同一個(gè)類中定義的方法中使用,此法安全
2其它:final(常量)、static(靜態(tài))成員變量說明修飾符類內(nèi)子類包內(nèi)其他類其他包內(nèi)的類缺省(friendly)√×√×public√√√√private√×××protected√√√×變量的訪問權(quán)限在表格中:√表示允許訪問,×表示禁止訪問大小public>protected>缺省>private
1用static修飾的成員變量叫類變量(或靜態(tài)變量),而沒有用static修飾的成員變量叫對(duì)象變量。2static修飾的數(shù)據(jù)和方法不局限于所屬的對(duì)象所以它不需要?jiǎng)?chuàng)建對(duì)象就可以直接訪問。static(靜態(tài))類的內(nèi)部:只用變量名即可訪問類的外部:1對(duì)象變量:只有在構(gòu)造對(duì)象后才能訪問到
格式為:對(duì)象名.對(duì)象變量
2類變量:
(1)通過類名訪問
格式:類名.類變量名
(2)通過對(duì)象名來(lái)訪問成員變量使用例:classA{static
intax;
intay;}
publicclassB{static
intbx;
intby;
publicstaticvoid
main(Stringargs[]){A.ax=5;bx=A.ax+2;//訪問類變量(不需建對(duì)象)
AA1=newA();//創(chuàng)建類A的一個(gè)對(duì)象A1
BB1=newB();//創(chuàng)建類B的一個(gè)對(duì)象B1
A1.ay=6;//訪問對(duì)象A1的成員變量ayB1.by=A1.ax;//訪問對(duì)象B1的成員變量by
System.out.println(A.ax+“”+B.bx);//輸出二變量的值
System.out.println(B1.bx+B1.by);
//輸出二變量的和
}
}//程序結(jié)束成員變量訪問的例子訪問本類的類變量可省略類名訪問類變量也可通過類對(duì)象名訪問本類的類變量時(shí),也可加上類名或類對(duì)象名實(shí)現(xiàn)類的封裝性如果外面的程序可以隨意修改一個(gè)類的成員變量,會(huì)造成不可預(yù)料的程序錯(cuò)誤,就像一個(gè)人的身高,不能被外部隨意修改,只能通過各種攝取營(yíng)養(yǎng)的方法去修改這個(gè)屬性。在定義一個(gè)類的成員(包括變量和方法)時(shí),使用private關(guān)鍵字說明這個(gè)成員的訪問權(quán)限,這個(gè)成員就成了類的私有成員,該類能被這個(gè)類的其他成員方法使用,而不能不其他的類中的方法所調(diào)用。實(shí)現(xiàn)類的封裝性為了實(shí)現(xiàn)更好的封裝性,我們通常將類的成員變量聲名為private,在通過public的方法來(lái)對(duì)這個(gè)變量進(jìn)行訪問。對(duì)一個(gè)變量的操作,一般都有讀取和賦值操作,我們分別定義兩個(gè)方法來(lái)實(shí)現(xiàn)這兩種操作,一個(gè)是getXxx()(Xxx表示要訪問的成員變量的名字),用來(lái)讀取這個(gè)成員變量操作,另外一個(gè)是setXxx()用來(lái)對(duì)這個(gè)成員變量賦值。一個(gè)類通常就是一個(gè)小的模塊,我們應(yīng)該讓模塊僅僅公開必須要讓外界知道的內(nèi)容,而隱藏其他一切內(nèi)容。我們?cè)谶M(jìn)行程序的詳細(xì)設(shè)計(jì)時(shí),應(yīng)盡量避免一個(gè)模塊直接修改或操作另一個(gè)模塊的數(shù)據(jù),模塊設(shè)計(jì)追求強(qiáng)內(nèi)聚(許多功能盡量在類的內(nèi)部獨(dú)立完成,不讓外面干預(yù)),弱耦合(提供給外部盡量少的方法調(diào)用)。構(gòu)造方法構(gòu)造方法的作用: 當(dāng)一個(gè)類的實(shí)例對(duì)象剛產(chǎn)生時(shí),這個(gè)類的構(gòu)造方法就會(huì)被自動(dòng)調(diào)用,我們可以在這個(gè)方法中加入要完成的初始化工作的代碼。這就好像我們規(guī)定每個(gè)“人”一出生就必須先洗澡,我們就可以在“人”的構(gòu)造方法中加入完成“洗澡”的程序代碼,于是,每個(gè)“人”一出生就會(huì)自動(dòng)完成“洗澡”,程序不必再在每個(gè)人剛出生是一個(gè)一個(gè)告訴他們要“洗澡”了。作用:專門用于創(chuàng)建類對(duì)象的方法。形式:
[修飾符]
方法名([形式參數(shù)列表])[throws異常列表]
方法體
調(diào)用:創(chuàng)建對(duì)象時(shí)被Java編譯器自動(dòng)調(diào)用的。當(dāng)構(gòu)造一個(gè)類的實(shí)例時(shí),便以其主要完成以下工作:為對(duì)象分配內(nèi)存空間初始化對(duì)象中的成員變量的值調(diào)用對(duì)象的構(gòu)造方法一個(gè)類的構(gòu)造方法可以有多個(gè),他們具有相同的方法名,編譯器會(huì)根據(jù)參數(shù)的類型及個(gè)數(shù)來(lái)判斷使用哪個(gè)構(gòu)造方法。構(gòu)造方法說明注意:沒有返回值類型(void也不行)1)缺省的構(gòu)造方法:無(wú)參數(shù)2)自定義構(gòu)造方法:可帶、也可不帶參數(shù) 用戶定義的構(gòu)造方法可以帶有或不帶有參數(shù)
構(gòu)造函數(shù)分類:自定義構(gòu)造方法p1=newperson(“tom”,78),該代碼會(huì)做這樣幾件事:創(chuàng)建指定的類的新實(shí)例對(duì)象在堆內(nèi)存中為實(shí)例對(duì)象分配內(nèi)存空間,并調(diào)用指定的類的構(gòu)造方法最后將實(shí)例對(duì)象的首地址賦值給引用變量p1p1=newperson(“tom”,78)的內(nèi)存變化過程分析this是什么?如果func2方法被調(diào)用,一定是事先已經(jīng)有了一個(gè)存在的對(duì)象,func2作為那個(gè)對(duì)象的方法被使用。在func2內(nèi)部能引用別的對(duì)象,同樣也能引用func2所屬的那個(gè)對(duì)象。在func2中,自己所屬的那個(gè)對(duì)象的引用名稱是什么呢?this關(guān)鍵字在java程序里的作用和它的詞義很接近,它在函數(shù)內(nèi)部就是這個(gè)函數(shù)所屬的對(duì)象的引用變量。this引用句柄所在的位置每個(gè)成員方法內(nèi)部,都有一個(gè)this引用變量,指向調(diào)用這個(gè)方法的對(duì)象,類中的成員方法與this之間的關(guān)系如圖this引用句柄的應(yīng)用一個(gè)類中的成員方法可以直接調(diào)用同類中的其他成員,其實(shí)我們?cè)谝粋€(gè)方法內(nèi)部使用“this.其他成員”的引用方式和直接用“其他成員”的效果是一樣的,那this還有多大的作用呢?在下面的情況下,我們還是非得用this關(guān)鍵字不可的:讓類的成員變量名和對(duì)其賦值的成員方法的參數(shù)變量同名是必要的;在一個(gè)構(gòu)造方法里調(diào)用其他的構(gòu)造方法,不是用構(gòu)造方法名,而是用this(參數(shù)列表的形式),根據(jù)其中的參數(shù)列表,選擇相應(yīng)的構(gòu)造方法。方法首部說明
方法體方法的調(diào)用
方法說明及調(diào)用說明形式:[修飾符]返回值類型方法名([形參列表][throws異常列表]修飾符分類:訪問修飾符:缺省、public、protected、private
非訪問修飾符:static:靜態(tài)方法
abstract:抽象方法,無(wú)方法體
final:最終方法,子類不能改變其方法實(shí)現(xiàn)
native:本地方法,即方法實(shí)現(xiàn)與本機(jī)系統(tǒng)有關(guān)
synchronized(同步):執(zhí)行前要給方法設(shè)置同步機(jī)制1.方法首部說明一定要有返回類型(1)方法體方法體是由一對(duì)大括號(hào)括起來(lái)的一段代碼,格式如下:
{//方法體開始
實(shí)現(xiàn)方法的代碼段
}//方法體結(jié)束
方法體也可以是一個(gè)分號(hào)“;”,表示無(wú)具體方法(方法還沒有實(shí)現(xiàn),即只是一個(gè)方法框架。注意:只有方法的修飾符中有abstract或native時(shí),方法才可無(wú)方法體。2.方法體return語(yǔ)句用于從當(dāng)前方法中退出,返回到調(diào)用該方法的語(yǔ)句處繼續(xù)程序的執(zhí)行。其格式如下:
格式1:return表達(dá)式;格式2:return;
格式1返回一個(gè)值給調(diào)用該方法的語(yǔ)句,返回值的數(shù)據(jù)類型必須與方法聲明中的返回值類型一致??梢允褂脧?qiáng)制類型轉(zhuǎn)換來(lái)使類型一致;
格式2用于返回類型為void的方法中,使用該語(yǔ)句以結(jié)束方法,返回調(diào)用處。(2)return語(yǔ)句 return語(yǔ)句通常用在一個(gè)方法體的最后,以退出該方法并返回一個(gè)值。?。?!在Java中,單獨(dú)的return語(yǔ)句用在一個(gè)方法體的中間時(shí),會(huì)產(chǎn)生編譯錯(cuò)誤,因?yàn)檫@時(shí)有一些語(yǔ)句執(zhí)行不到。例如:intmethod(intnum){
returnnum;
∥將導(dǎo)致編譯錯(cuò)誤,因?yàn)樗鼘⑹购竺娴恼Z(yǔ)句執(zhí)行不到
……
}(2)return語(yǔ)句(2)return語(yǔ)句
可以通過把return語(yǔ)句嵌入到某些語(yǔ)句(如if-else)來(lái)使程序在未執(zhí)行完方法中的所有語(yǔ)句時(shí)退出,例如:intmethod(intnum){
if(num>0)returnnum; ∥可能執(zhí)行,也可能不執(zhí)行,取決于num的值
……
}
成員變量分為對(duì)象變量和類變量。同樣地,成員方法也有對(duì)象方法和類方法之分,其意義與對(duì)象變量、類變量一樣。即類方法是屬于整個(gè)類的,而對(duì)象方法是屬于類中的某個(gè)對(duì)象的。由于類方法是屬于整個(gè)類的,并不屬于類的哪個(gè)對(duì)象,所類方法的方法體中不能有與類的對(duì)象有關(guān)的內(nèi)容。即類方法體有如下限制:(1)類方法中不能引用對(duì)象變量;(2)類方法中不能調(diào)用類的對(duì)象方法;(3)在類方法中不能使用super、this關(guān)鍵字。
如果違反這些限制,就會(huì)導(dǎo)致程序編譯錯(cuò)誤。(3)
類方法(static)
和類方法相比,對(duì)象方法幾乎沒有什么限制:(1)對(duì)象方法中可以引用對(duì)象變量,也可以引用類變量;(2)對(duì)象方法中可以調(diào)用類方法;(3)對(duì)象方法中可以使用super、this關(guān)鍵字。在程序設(shè)計(jì)中,一些通用的、公用型的方法與類的對(duì)象無(wú)關(guān),因此常常被作為類方法實(shí)現(xiàn)。Java類庫(kù)中Math類,其中多數(shù)的數(shù)學(xué)運(yùn)算操作都被定義成靜態(tài)方法。因此,可以使用類方法把一些通用的、公用型的方法放在合適的類中,從而很好地將它們組織起來(lái)。應(yīng)用程序中的主方法main就是類方法。(3)
類方法(static)(3)
類方法(static)main()方法是靜態(tài)的,因此JVM在執(zhí)行main()方法是不創(chuàng)建main()方法所在的類的實(shí)例對(duì)象,因此在main()方法中,我們不能直接訪問該類中的非靜態(tài)成員,必須創(chuàng)建該類的一個(gè)實(shí)例對(duì)象后,才能通過這個(gè)對(duì)象去訪問類中的非靜態(tài)成員。外部調(diào)用類方法
1.類名.類方法名([實(shí)型參數(shù)列表]) 2.對(duì)象名.類方法名([實(shí)型參數(shù)列表])對(duì)象方法:
對(duì)象名.對(duì)象方法名([實(shí)型參數(shù)列表])3.方法的調(diào)用內(nèi)部調(diào)用:直接調(diào)用
1)類方法中不能引用對(duì)象變量
2)在類方法中不能使用super,this關(guān)鍵字
3)類方法不能調(diào)用對(duì)象方法4.遞歸方法
如果一個(gè)方法的方法體中又調(diào)用自身,則這種方法被稱為直接遞歸方法。如果一個(gè)方法通過調(diào)用其它方法而間接地調(diào)用到自身,則被稱為間接遞歸方法。
Java中遞歸方法的編寫方法與C++中遞歸函數(shù)的編寫方法是完全一樣的。下面用一個(gè)實(shí)例來(lái)說明它。4.遞歸方法例4.3用遞歸方法求1+2+3+…+n。程序編寫方法分析:假設(shè)編寫了一個(gè)成員方法sum(n)用于求出1+2+…+n,則調(diào)用sum(n-1)就可求出1+2+3+…+(n-1)。于是,求sum(n)可用“求出sum(n-1)后再加上n”的方法實(shí)現(xiàn)。即sum(n)方法的方法體就是調(diào)用sum(n-1)再加上n。程序如下:import
java.io.*;publicclass
Sum{
publicstaticintsum(int
n)
{if(n<1)
return0;elsereturnsum(n-1)+n;}publicstaticvoid
main(String
args[]){byte[]by=newbyte[20];intresult=0,num=0;Stringstr;
System.out.print(“Pleaseinputthenumber:”);try
{
System.in.read(by);//從鍵盤讀一個(gè)數(shù)字串保存于str中
str=newString(by);
num=Integer.parseInt(str);//數(shù)字串轉(zhuǎn)換成整數(shù)
}
catch
(Exceptione){}
//catch語(yǔ)句,Exception為異常類
result=sum(num);
//調(diào)用sum()求和
System.out.print(result);}
}
方法的final修飾符表明方法不得被覆蓋。帶有final修飾符的方法稱為最終方法。Java中除非說明為最終方法,否則方法是可以覆蓋的。Java之所以這樣規(guī)定,主要是因?yàn)镴ava的純面向?qū)ο筇匦?,它把覆蓋當(dāng)作面象對(duì)象的重要特性,給予了最大限度的實(shí)現(xiàn)。
把方法聲明為最終方法有時(shí)可增加代碼的安全性。5.方法的final修飾符5.方法的final修飾符例4.5最終方法例finalbooleanGetSwitchState()//獲取開關(guān)狀態(tài){returnPower-On;
//返回Power-On值}6.單態(tài)設(shè)計(jì)模式設(shè)計(jì)模式是在大量的實(shí)踐中總結(jié)和理論化之后優(yōu)選的代碼結(jié)構(gòu)、編程風(fēng)格、以及解決問題的思考方式。設(shè)計(jì)模式就像是經(jīng)典的棋譜,不同的棋局,我們用不同的棋譜,免得我們自己再去思考和摸索。失敗為成功之母,但是要以大量的時(shí)間和精力為代價(jià),如果有成功經(jīng)驗(yàn)可借鑒,沒有人再愿意去甘冒失敗的風(fēng)險(xiǎn),我們沒有理由不去了解和掌握設(shè)計(jì)模式,這也是Java開發(fā)者提高自身的素質(zhì)的一個(gè)很好的選擇。使用模式也許會(huì)制約你去創(chuàng)新,不過真正有意義的創(chuàng)新只能出自少數(shù)天才,即使你就是那個(gè)天才,雖不必因循守舊,但也不可能完全不去了解和借鑒前人的成功經(jīng)驗(yàn)。6.單態(tài)設(shè)計(jì)模式所謂的類的單態(tài)設(shè)計(jì)模式,就是采取一定的方法保證在整個(gè)軟件系統(tǒng)中,對(duì)某個(gè)類只能存在一個(gè)對(duì)象實(shí)例,并且該類只提供一個(gè)取得其對(duì)象實(shí)例的方法。我們首先必須將類的構(gòu)造方法的訪問權(quán)限設(shè)置為private;因?yàn)樵陬惖耐獠块_始還無(wú)法得到類的對(duì)象,只能調(diào)用該類的某個(gè)靜態(tài)方法以返回類內(nèi)部創(chuàng)建的對(duì)象;靜態(tài)方法只能訪問類中的靜態(tài)成員變量,所以,指向類內(nèi)部產(chǎn)生的該類對(duì)象的變量也必須定義成靜態(tài)的。4.4繼承4.4.1繼承概述4.4.2父類和子類的單繼承定義格式4.4.3子類對(duì)父類成員重載4.4.4null、this、super4.4.5多態(tài)性4.4.6最終類4.4.1繼承概述繼承是從現(xiàn)有的一個(gè)類創(chuàng)建新類的過程,可以簡(jiǎn)化類的定義。Java只支持單繼承,不允許多重繼承。如果在聲明類B時(shí),指明類B繼承了類A(類A是一個(gè)已定義了的類),則類B通常就擁有了類A的成員變量和方法。此時(shí),類A稱為類B的父類(superclass),父類也稱為超類或基類;類B稱為類A的子類(subclass),子類也稱為派生類。4.4.1繼承概述繼承是面向?qū)ο缶幊痰囊粋€(gè)主要優(yōu)點(diǎn)之一,它對(duì)如何設(shè)計(jì)Java類有著直接的影響。繼承有如下幾點(diǎn)好處:它可以利用已有的類來(lái)創(chuàng)建自己的類,只需要指出自己的類和已有的其他的類有什么不同即可,而且還可以動(dòng)態(tài)訪問其他有關(guān)的類中的信息。通過繼承,可以利用Java類庫(kù)所提供的豐富而有用的類,這些類都已經(jīng)被很好地實(shí)現(xiàn)。當(dāng)設(shè)計(jì)很大的程序時(shí),繼承可以使程序組織得更加層次清晰,有利于程序設(shè)計(jì)和減少錯(cuò)誤的發(fā)生。4.4.2父類和子類的單繼承定義格式
類繼承語(yǔ)法形式如下:
classSubClassNameextendsSupperClassNameextends是繼承關(guān)鍵詞。SubClassName是新的子類名,SupperClassName是繼承的父類名。父類名是必需的,而且只能有一個(gè)。父類名所指定的類必須是在當(dāng)前編譯單元中可以訪問的類,否則會(huì)產(chǎn)生編譯錯(cuò)誤。4.4.2父類和子類的單繼承定義格式注意:子類不能繼承父類的私有成員(變量、方法)。supersuper: 代表父類,用于對(duì)類的父類的引用。使用情況:
1子類隱藏了超類中的變量或方法,而在程序中又要使用超類中被隱藏的變量或方法時(shí)
格式:super.變量;
super.方法([參數(shù)表])2在子類的構(gòu)造方法中引用超類的構(gòu)造方法時(shí),
格式:super([參數(shù)表])補(bǔ)充:子類對(duì)象的實(shí)例化過程分配成員變量的存儲(chǔ)空間并進(jìn)行默認(rèn)的初始化;綁定構(gòu)造方法參數(shù),就是newPerson(實(shí)際參數(shù)列表)中所傳遞進(jìn)的參數(shù)賦值給構(gòu)造方法中的形式參數(shù)變量;如果有this()調(diào)用,則調(diào)用相應(yīng)的構(gòu)造方法,執(zhí)行結(jié)束后,回到當(dāng)前構(gòu)造方法,當(dāng)前構(gòu)造方法直接跳轉(zhuǎn)到步驟6執(zhí)行;顯式或隱式追溯調(diào)用父類的構(gòu)造方法(一直到object類為止,object類是Java類的最頂層父類),執(zhí)行結(jié)束后,回到當(dāng)前構(gòu)造方法,當(dāng)前構(gòu)造方法繼續(xù)往下執(zhí)行;進(jìn)行實(shí)例變量的顯式初始化操作,也就是執(zhí)行在定義成員變量時(shí)就對(duì)其進(jìn)行賦值的語(yǔ)句;執(zhí)行當(dāng)前構(gòu)造方法的方法體中的程序代碼。補(bǔ)充:子類對(duì)象的實(shí)例化過程補(bǔ)充:子類對(duì)象的實(shí)例化過程思考:為什么super()和this()語(yǔ)句不能同時(shí)在一個(gè)構(gòu)造函數(shù)中出現(xiàn)?為什么super()和this()語(yǔ)句只能作為構(gòu)造函數(shù)中的第一句出現(xiàn)?子類的特性:①子類擁有其父類的所有屬性和方法。但父類中說明為private的屬性和方法,子類不可直接訪問。
②子類可以對(duì)父類的方法覆蓋或重載。
方法覆蓋:
子類的方法首部與父類的方法首部相同(如何理解首部相同?),但是子類重新實(shí)現(xiàn)了該方法。
方法重載:
子類的方法名與父類的方法名相同,但是子類該方法的形式參數(shù)列表與父類的方法的形式參數(shù)列表不同,并且重新實(shí)現(xiàn)了該方法。
如果子類聲明了一個(gè)與父類的成員變量同名的成員變量,則稱父類的該成員變量被隱藏(Hiding)。4.4.3子類對(duì)父類成員重載4.4.3子類對(duì)父類成員重載注意:子類覆蓋父類的方法,子類方法的訪問權(quán)限一定不能比父類方法的訪問權(quán)限弱。被覆蓋的父類的方法,不能被子類的對(duì)象訪問。4.4.5多態(tài)性(Polymorphism)含義:同一操作對(duì)不同類可以呈現(xiàn)不同的行為。在繼承的情形下,當(dāng)調(diào)用繼承結(jié)構(gòu)中不同類的同一操作時(shí),實(shí)際現(xiàn)行對(duì)象的操作被調(diào)用。特點(diǎn):
final修飾符定義一個(gè)不能被繼承的類。目的:
增強(qiáng)代碼的安全性。4.4.6最終類總結(jié):final關(guān)鍵字在Java中聲明類、屬性和方法時(shí),可使用final關(guān)鍵字來(lái)修飾。final標(biāo)記的類不能被繼承。final標(biāo)記的方法不能被子類重寫。final標(biāo)記的變量(成員變量或局部變量)即成為常量,只能賦值一次。null:為“空”變量,表示這個(gè)對(duì)象不存在相應(yīng)的實(shí)例
例:Rectanglerect=null;this:表示引用對(duì)象本身.使用情況:1方法體中訪問類的同名成員變量格式:this.成員變量
2在某一個(gè)構(gòu)造函數(shù)中使用本類的其它構(gòu)造函數(shù)格式:this(實(shí)參列表);總結(jié):null,this和super例4.9this引用自身class
Rectangle
{
int
width,length;
Rectangle(int
width,int
length)
//構(gòu)造方法
{
this.width=width;
//this代表對(duì)象自身
this.length=length;}
publicvoid
drawRect(){System.out.println("thisisRectangle!");}}
上面這個(gè)例子中,用this表示引用對(duì)象本身??偨Y(jié):null,this和supersuper用于對(duì)類的父類的引用。在構(gòu)造方法中,super代表對(duì)父類的構(gòu)造方法的引用。例4.10用super引用類的父類class
fillRectangleextendsRectangle{public
fillRectangle(int
w,int
h)
//構(gòu)造方法
{
super(w,h);
}
//調(diào)用父類的構(gòu)造方法
private
StringmakeString(char
ch,int
num)
{StringBufferstr=new
StringBuffer();for(int
i=num;i>0;i--)str.append(ch);
return
str.toString();}總結(jié):null,this和superpublicvoid
drawRect(){
for(int
i=length;i>0;i--)//用字符“#”繪制(填滿)一個(gè)矩形
System.out.pringln(makeString('#',width));}}
在這個(gè)類的構(gòu)造方法中并沒有寫新的程序,而是調(diào)用了父類的構(gòu)造函數(shù),用于初始化實(shí)例變量??偨Y(jié):null,this和super4.5接口接口的概念4.5.1接口的說明4.5.2接口的使用
4.5.3接口與類的比較接口的概念概念:就是一些常量和抽象方法的定義的集合,它是一個(gè)設(shè)計(jì)框架作用: 使設(shè)計(jì)與實(shí)現(xiàn)分離注意:接口可以繼承:一個(gè)接口可以繼承多個(gè)其它的接口;接口中的方法要用類來(lái)實(shí)現(xiàn);一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。接口與類的比較接口類只能單繼承,而接口可以多繼承。類中的方法可以是具體的,也可以抽象的。接口中的方法都是抽象的。接口中的方法要用類來(lái)實(shí)現(xiàn),一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。4.5.1接口的說明接口首說明
[pubic]interface接口名[extends
接口序列]{接口體}像類一樣,編譯好的接口保存在Class文件中。接口名前有pubic修飾符,則任何一個(gè)類都可以調(diào)用該接口接口名前沒有pubic修飾符,則只有那些與本接口在同一個(gè)包中的類才能訪問該接口。
接口體說明接口的成員——常量和抽象方法。
{[常量說明][抽象方法說明]}
變量:默認(rèn)為publicstaticfinal
抽象方法:默認(rèn)為publicabstract4.5.1接口的說明4.5.1接口的說明接口體說明注意:(1)接口中的成員變量(常量)說明聲明形式:
[修飾符]類型名變量名;接口中的成員變量的修飾符都只能用public、static、final,而且也都隱含著修飾符,所以修飾符是不必寫的。就是說,接口中的成員變量都是公用的靜態(tài)最終變量,即公用的靜態(tài)常量。
例如:在接口中,下面這行代碼:
int
STEP=5;
等同于:publicstaticfinal
int
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高科技產(chǎn)業(yè)投資入股合作協(xié)議書
- 二零二五年度生態(tài)保護(hù)區(qū)無(wú)償用地共建協(xié)議
- 二零二五年度手車背戶資產(chǎn)管理合作協(xié)議
- 二零二五年度研發(fā)團(tuán)隊(duì)技術(shù)人員保密協(xié)議與技術(shù)資料保密合同
- 2025年度手摩托車環(huán)保標(biāo)準(zhǔn)制定與執(zhí)行合同
- 2025年度城市中心地下住宅租賃合同及配套設(shè)施使用協(xié)議
- 2025年度女方婚前財(cái)產(chǎn)保全及婚姻安全協(xié)議書
- 商務(wù)、清洗服務(wù)項(xiàng)目績(jī)效評(píng)估報(bào)告
- 機(jī)器人輔助經(jīng)呼吸道活檢的變剛度鞘管設(shè)計(jì)與研究
- 情緒勞動(dòng)策略對(duì)安檢視覺搜索績(jī)效的影響研究
- 婦產(chǎn)科學(xué)(甲)知到智慧樹章節(jié)測(cè)試課后答案2024年秋浙江大學(xué)
- 2025年春新外研版(三起)英語(yǔ)三年級(jí)下冊(cè)課件 Unit3第1課時(shí)startup
- FSC培訓(xùn)課件教學(xué)課件
- 2025年福建福州地鐵集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 《小學(xué)數(shù)學(xué)“對(duì)分課堂”教學(xué)模式的實(shí)踐探索》3900字(論文)
- 初中數(shù)學(xué)幾何《旋轉(zhuǎn)模型費(fèi)馬點(diǎn)》壓軸題含答案解析
- 康復(fù)健康小屋課件
- 《內(nèi)部審計(jì)程序》課件
- 江西省宜春市豐城市第九中學(xué)2024-2025學(xué)年九年級(jí)上學(xué)期第二次段考化學(xué)試卷(日新班)(無(wú)答案)
- 江蘇省2024-2025年跨地區(qū)職業(yè)學(xué)校職教高考一輪聯(lián)考(機(jī)械專業(yè)綜合理論試卷含答案)
- 2024年事業(yè)單位租車服務(wù)滿意度調(diào)查及改進(jìn)協(xié)議3篇
評(píng)論
0/150
提交評(píng)論