版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第1章Java入門
1.1Java簡介Java的崛起面向?qū)ο蟮某淌皆O(shè)計(jì)語言Java平臺(tái)和虛擬機(jī)兩類Java程式Java程式開發(fā)環(huán)境——SDKJava的崛起1991年4月8日,從工作站起家的Sun公司為了把市場(chǎng)擴(kuò)大到消費(fèi)電子產(chǎn)品,成立了一個(gè)專門的工作小組,著手代號(hào)為“Green”的專案,目的是開發(fā)一個(gè)分佈式代碼系統(tǒng),讓人們可以把E-mail發(fā)給電冰箱、電視機(jī)等家用電器,對(duì)它們進(jìn)行控制,同它們進(jìn)行資訊交流應(yīng)用的C++進(jìn)行開發(fā)。但是C++太複雜,安全性也差,最後不得不定義一套新的語言系統(tǒng),於是便有了Oak的問世Oak一方面汲取了C++中的有益成分,同時(shí)融進(jìn)了網(wǎng)路應(yīng)用特性,可以稱上是一種的精巧而安全的語言了MarkArdreesen的Mosaic和Netscape的巨大成功給Oak專案組成員帶來了新的希望,他們重整旗鼓,對(duì)Oak進(jìn)行了一次新的整合,並取名為Java,後用Java編制了HotJava流覽器,吹響了進(jìn)軍Internet的號(hào)角Java所特有的“writeonce,runanywhere.”(一次編寫,到處運(yùn)行)的平臺(tái)無關(guān)性的概念,與Internet的異構(gòu)網(wǎng)路互連一拍即合,它特別適合於在網(wǎng)路開發(fā)中使用面向?qū)ο蟮某淌皆O(shè)計(jì)語言Java語言是一種面向?qū)ο蟮某淌皆O(shè)計(jì)語言,它通過描述對(duì)象本身以及對(duì)象間的相互關(guān)係,並通過激發(fā)對(duì)象間的相互作用,來求解問題對(duì)現(xiàn)實(shí)世界中事物的對(duì)象,要由兩個(gè)部分來描述,一是其靜態(tài)屬性——對(duì)象的狀態(tài),用“數(shù)據(jù)”來描述;一是其動(dòng)態(tài)屬性——對(duì)象的行為,用“方法”來描述在面向?qū)ο蟮某淌皆O(shè)計(jì)語言中,並不是去定義一個(gè)一個(gè)的對(duì)象,而是先定義同一類對(duì)象的範(fàn)本——類(class),再從類創(chuàng)建其對(duì)象電子時(shí)鐘的Java描述電子時(shí)鐘的靜態(tài)屬性——電子時(shí)鐘的狀態(tài),用變數(shù)hour(時(shí))、minute(分)、second(秒)描述電子時(shí)鐘的動(dòng)態(tài)屬性——電子時(shí)鐘的行為,如顯示時(shí)間,設(shè)置時(shí)間等,用以下方法描述:
·getMinute()——顯示“分”;
·getHour()——顯示“時(shí)”;
·setSecond()——設(shè)置“秒”;
·setMinute()——設(shè)置“分”;
·setHour()——設(shè)置“時(shí)”。classTimeClock{ privateintiSecond,iMinute,iHour; publicintgetMinute(); //顯示“分”
publicintgetHour(); //顯示“時(shí)”
publicvoidsetSecond(); //設(shè)置“秒”
publicvoidsetMinute(); //設(shè)置“分”
publicvoidsetHour(); //設(shè)置“時(shí)”}類描述符類名整數(shù)描述符語句結(jié)束符注釋符類體類的首部私有訪問許可權(quán)修飾符公共訪問許可權(quán)修飾符相關(guān)說明從結(jié)構(gòu)上看,類由類的首部和類體構(gòu)成類體由緊隨類的首部的一對(duì)花括弧及花括弧中的一些語句組成類體中含有類的數(shù)據(jù)部分和類的方法部分,分別稱為類的成員變數(shù)和成員方法,它們都是類的成員方法由方法首部和方法體組成有些方法執(zhí)行後要向調(diào)用者(不是標(biāo)準(zhǔn)輸出)送回一個(gè)數(shù)據(jù),這樣的數(shù)據(jù)稱為方法的返回值注釋是對(duì)程式、程式的局部或一個(gè)語句的說明,用於增加程式的可讀性這個(gè)TimeClock是一個(gè)時(shí)鐘類的介面,當(dāng)此介面中所有方法的方法體都定義後,就構(gòu)成了一個(gè)時(shí)鐘類,由這個(gè)時(shí)鐘類可以創(chuàng)建多個(gè)時(shí)鐘對(duì)象Java是區(qū)分大小寫字母的語言程式員可以自己定義類,也可以使用事先已經(jīng)定義好的類本例只是電子時(shí)鐘類的設(shè)計(jì)的一個(gè)例子,它不是唯一的計(jì)算圓的周長和麵積classCircle{ floatr; //半徑
finaldoublePI=3.14159; //最終變數(shù)
Circle(floatd){ //構(gòu)造方法
r=d; }
doublecircum(){ //求圓周長的方法
return2*PI*r; }
doublearea(){ //求圓面積的方法
returnPI*r*r; }}Circle類中含有兩個(gè)數(shù)據(jù)成員半徑r和一個(gè)常數(shù)PI(π),r使用了float型,PI使用了double型數(shù)據(jù)類型名(關(guān)鍵字)佔(zhàn)用記憶體空間數(shù)值範(fàn)圍十進(jìn)位表數(shù)精度int4位元組-231~231-1float4位元組(±3.4028235E+38f)~(±1.40239846E-45f)6~7位double8位元組(±1.79769313486231570E+308)~(±4.94065645841246544E-324)15位finalPI由於加了“final”,表示在程式執(zhí)行過程中其值不能再變化,PI稱為最終變數(shù)。最終變數(shù)在程式中一般用大寫Circle類中定義了方法的結(jié)構(gòu)方法首部方法體{}
方法首部描述方法名方法的返回值類型參數(shù)及其類型其他修飾符Java基本的運(yùn)算符+(加),-(減或負(fù)),*(乘),/(除)>(大於),>=(大於等於),==(等於),<(小於),<=(小於等於),!=(不等於)=稱為賦值號(hào),意即將其右面的值送到左面的變數(shù)中,相當(dāng)於往一個(gè)記憶體單元中存放入一個(gè)數(shù)據(jù)值。類的構(gòu)造方法類的構(gòu)造方法與類同名,描述由類生成對(duì)象的操作,在創(chuàng)建對(duì)象時(shí)由系統(tǒng)調(diào)用。下麵的主類定義中給出了構(gòu)造方法的作用主類Java應(yīng)用程式由很多類組成,其中有且只有一個(gè)主類。含有主方法main()的類稱為Java應(yīng)用程式的主類。Java規(guī)定,主類名必須與主類所在的檔案名相同。程式運(yùn)行後,Java首先執(zhí)行主類主方法中的第一個(gè)語句主類—UseCircle的定義classUseCircle{ publicstaticvoidmain(Stringargs[]){ CircleaCirc=newCircle(5.3f); //生成一個(gè)圓對(duì)象
doubles=aCirc.circum(); //計(jì)算該圓對(duì)象的周長
doubled=aCirc.area(); //計(jì)算該圓對(duì)象的面積
System.out.println("半徑為:"+aCirc.r+"的圓的周長為:"+s); //輸出周長
System.out.println("半徑為:"+aCirc.r+"的圓的面積為:"+d); //輸出面積
}}說明UseCircle類中,首先用new命令來調(diào)用Circle類的構(gòu)造方法來創(chuàng)建一個(gè)Circle類的對(duì)象aCirct用語法形式:對(duì)象名.成員名;調(diào)用Circle類中的成員調(diào)用系統(tǒng)方法System.out.println()輸出結(jié)果Java平臺(tái)Java平臺(tái)是一種純軟體平臺(tái),它需要其他基於硬體的平臺(tái)(如Window2000,Linux等)的支持。Java平臺(tái)由Java虛擬機(jī)(JavaVM)和Java應(yīng)用程式介面(JavaAPI)兩部分組成。Java虛擬機(jī)易於被移植到基於不同硬體的平臺(tái)上,是Java平臺(tái)的基礎(chǔ);Java應(yīng)用程式介面由大量已做好的Java組件(組件是一種類)構(gòu)成,這個(gè)介面提供了豐富的Java資源。Java虛擬機(jī)由於不同的機(jī)器有不同的機(jī)器語言,並且由於操作系統(tǒng)環(huán)境的排他性,使得在一種平臺(tái)上開發(fā)的程式運(yùn)行到另一個(gè)平臺(tái)上時(shí),多少還要進(jìn)行一些修改,這樣就比較麻煩Java破解各機(jī)器不同的機(jī)器語言的策略是定義出自己的一套虛擬機(jī)器——Java虛擬機(jī)Java虛擬機(jī)的工作原理編寫Java程式Java編譯器Java源代碼(*.java檔)位元組碼(*.class檔)Java虛擬機(jī)Java解釋器forWindowsJava解釋器forUnixJava解釋器forMacOSPC電腦Unix伺服器Mac電腦Java一臺(tái)Java虛擬機(jī)就是一臺(tái)Java解釋器。經(jīng)過Java解釋器的解釋,才得到具體的機(jī)器可以執(zhí)行的代碼通常把Java程式的翻譯過程稱為半編譯、半解釋。而其他語言程式要麼是全編譯,要麼是全解釋Java既是一種語言,也是一種平臺(tái)。作為一種語言,Java通過所謂“半編譯、半解釋”使得Java程式具有“一次編寫,到處運(yùn)行”的特點(diǎn)兩類Java程式按照運(yùn)行環(huán)境的不同,可將普遍使用的Java程式分為兩種:Java應(yīng)用程式(JavaApplication)。其是在本機(jī)上由Java解釋程式來啟動(dòng)Java虛擬機(jī)JavaApplet(Java小應(yīng)用程式)。其是通過流覽器來啟動(dòng)Java虛擬機(jī)它們都是在Java虛擬機(jī)中執(zhí)行JavaApplication在Java語言中,每個(gè)應(yīng)用程式都是以類的形式出現(xiàn)的。一個(gè)程式中既可以只包含一個(gè)類,也可以包含多個(gè)類,此時(shí)稱為是一個(gè)多類程式。Java提供了一個(gè)特殊的方法——main()方法,每個(gè)應(yīng)用程式的執(zhí)行都是從主方法main()開始的,沒有main()方法的應(yīng)用程式是不能執(zhí)行的。包含了main()方法的類叫做主類,程式的主文件名必須與主類相同一個(gè)問候程式該程式的功能是在螢?zāi)簧巷@示一個(gè)問候:
Hello,World!問候程式Java代碼classHelloWorld{ publicstaticvoidmain(StringArgs[]) { System.out.println(“Hello,World!”); }}main()方法main()方法是JavaApplication程式的入口,有著固定的書寫格式:publicstaticvoidmain(Stringargs[]){…}其中:·public表明所有的類都可以使用這一方法;·static指明該方法是一個(gè)靜態(tài)方法,可以通過類名來直接調(diào)用;·void則表示main()方法不返回任何值;·main(Stringargs[])是該方法的頭部,圓括號(hào)內(nèi)是該方法可接受的參數(shù)。Java解釋器總是從main()方法開始解釋和執(zhí)行應(yīng)用程式,因此一個(gè)可執(zhí)行的Application必須而且只能有一個(gè)main()方法本例中只有一條語句:System.out.println("Hello,World!");其中,System是一個(gè)系統(tǒng)類,System.out指代了標(biāo)準(zhǔn)輸出流,通過它的println()方法可以往標(biāo)準(zhǔn)輸出設(shè)備上輸出數(shù)據(jù)JavaAppletimportjava.applet.Applet; //將java.applet包中的系統(tǒng)類Applet引入本程式importjava.awt.Graphics; //將java.awt包中的系統(tǒng)類Graphics引入本程式publicclassHello_AppletextendsApplet{ publicvoidPaint(Graphicsg) { g.drawString(“Hellowold!),50,25); }}引入系統(tǒng)類語句類的首部類體關(guān)鍵字表示引入系統(tǒng)類import關(guān)鍵字import用於將系統(tǒng)類引入本程式本例中引入了兩個(gè)系統(tǒng)類——Applet和Graphics。這兩個(gè)系統(tǒng)類分別位於不同的系統(tǒng)包java.applet和java.awt中引用一個(gè)系統(tǒng)類時(shí)需要指明它們所在的包名類的聲明Applet與Application在結(jié)構(gòu)上是有較大不同的,最主要體現(xiàn)在Applet中沒有main()方法一般來說,Applet中的類必須是公共的(用public來修飾)或有一個(gè)public型的構(gòu)造方法,而且必須有一個(gè)類是系統(tǒng)類Applet的子類所謂一個(gè)類是另一個(gè)類的子類,就是說一個(gè)類繼承了另一個(gè)類,兩個(gè)類之間存在繼承關(guān)係。類的派生AppletHello_Applet…子類父類JavaApplet程式JavaApplet不像JavaApplication那樣是一個(gè)獨(dú)立的程式,它雖然也要先經(jīng)過半編譯生成位元組碼檔,但是這個(gè)位元組碼檔不能夠直接被執(zhí)行和使用。按照約定,它必須由支持Java的WWW流覽器(如IE、Netscape、Hotjava等)或appletviewer加載執(zhí)行Applet運(yùn)行的完整過程源代碼(*.java檔)位元組碼(*.class)檔Java編譯器HTML檔……Applet嵌入標(biāo)記……WWW伺服器②下載HTML檔①請(qǐng)求HTML檔WWW流覽器③請(qǐng)求Applet位元組碼④下載Applet位元組碼⑤解釋執(zhí)行Applet位元組碼Java程式開發(fā)環(huán)境——SDK工欲善其事,必先利其器。為了支持用戶的Java程式開發(fā)但是,SUN公司開發(fā)的Java2SDK(Java2SoftwareDevelopmentKit)比較適合初學(xué)者使用SDK集成有如下一些功能Java編譯器;Java解釋器:內(nèi)附Appletviewer——AppletBytecode解釋器;內(nèi)附Java——Application解釋器。簡單的除錯(cuò)工具。1.2Java程式開發(fā)過程1Java應(yīng)用程式開發(fā)過程舉例2JavaApplet開發(fā)過程舉例1.2Java程式開發(fā)過程Java應(yīng)用程式開發(fā)過程舉例編輯——?jiǎng)?chuàng)建Java根源程式.根源程式用Java編程語言直接編寫的程式,通常是由一個(gè)或多個(gè)類組成的正文檔,尾碼為.java
半編譯——用Java編譯器(Javac)將Java根源程式翻譯成Java虛擬機(jī)(theJavaVirtualMachine,簡稱JavaVM)能理解的指令、再將這些指令組織為位元組碼檔將根源程式編譯為位元組碼檔(尾碼為.class)的過程半解釋(運(yùn)行)——Java虛擬機(jī)(Java)解釋、運(yùn)行包含在位元組碼檔中的程式創(chuàng)建原始檔案保存過程輸入完畢,檢查無錯(cuò)後,應(yīng)將這些代碼保存到一個(gè)檔中。Java規(guī)定,Java應(yīng)用程式源代碼尾碼名必須為.java
半編譯在JDK中,Java的編譯器是javac.exe。使用javac命令,就可以將Java原始檔案編譯成位元組碼javac命令的一般格式為:
javac<檔案名>.java
path路徑設(shè)置path環(huán)境變數(shù)應(yīng)指定操作系統(tǒng)到什麼地方去查找Java工具,並可以將當(dāng)前所用機(jī)器的Java工具所在的路徑(一般在JDK檔夾下的BIN子檔夾中)賦給path環(huán)境變數(shù)。例如:path=%path%;c:\JDK1.2.2\BIN半解釋——運(yùn)行編譯生成的位元組碼檔可以在本機(jī)中由java解釋器——java.exe運(yùn)行。java命令的一般格式為: java檔案名
classpath環(huán)境變數(shù)classpath環(huán)境變數(shù)指定Java工具到什麼地方去查找類檔(.class檔)。系統(tǒng)提供的類檔相關(guān)資訊一般在JDK檔夾下的LIB子檔夾中,然後還需將用戶自己的類檔所在檔夾賦給classpath環(huán)境變數(shù)。例如:setclasspath=c:\jdk1.2.2\lib\.;d:\javaprogramHelloWorld程式的編譯、運(yùn)行過程向應(yīng)用程式傳遞參數(shù)Java應(yīng)用程式通常是在命令行下運(yùn)行的,允許用戶在這個(gè)命令行中向它傳遞資訊,運(yùn)行時(shí)向程式傳送數(shù)據(jù),增加了該程式的通用性假設(shè)用下麵的命令來運(yùn)行程式:javaWhoSayWhatMarry"GoodDay!"那麼程式的運(yùn)行結(jié)果為:Marrysay:GoodDay!JavaApplet開發(fā)過程舉例JavaApplet的創(chuàng)建過程也是分為三步:編輯、編譯和運(yùn)行,其前兩個(gè)步驟與Application大致相同。但由於Applet是不獨(dú)立的小應(yīng)用程式,所以不能直接用java命令來執(zhí)行第二步生成的位元組碼檔,而是應(yīng)該另外創(chuàng)建一個(gè)可以嵌入該Applet位元組碼的HTML檔,然後由支持Java的WWW流覽器或appletviewer來加載執(zhí)行。創(chuàng)建原始檔案半編譯用Java編譯器來進(jìn)行原始檔案的編譯,格式如下:
javacHello_Applet.java結(jié)果也是在當(dāng)前檔夾下產(chǎn)生位元組碼檔Hello_Applet.class創(chuàng)建HTML檔Applet是不獨(dú)立的程式,不能夠直接被執(zhí)行和使用,必須由支持Java的WWW流覽器或appletviewer加載執(zhí)行。在執(zhí)行小應(yīng)用程式之前,必須先準(zhǔn)備一個(gè)供其棲身的HTML檔,使用特殊的HTML標(biāo)記,把Applet嵌入其中HTML標(biāo)記形式<appletcode="……"width=……h(huán)eight=……>……</applet>其中,<applet>和</applet>說明在此插入一個(gè)Applet,位元組碼檔的名字放在“code=”後(擴(kuò)展名.class,必不可少!),而width和height參數(shù)說明了此Applet佔(zhàn)用的寬度和高度Hello.html檔運(yùn)行Appletviewer程式可以在JDK的bin檔夾下找到,用它可以流覽嵌有Applet的HTML檔。appletviewer.exe的一般格式為:appletviewer<檔案名>.html在MS-DOS平臺(tái)上,要流覽本例,只需輸入命令:
appletviewerHello.html
方法設(shè)計(jì)方法的基本概念運(yùn)算符與運(yùn)算式流程控制語句演算法設(shè)計(jì)舉例方法的基本概念Java類由狀態(tài)(或?qū)傩裕┖托袨閮刹糠纸M成。屬性是保存描述類對(duì)象狀態(tài)數(shù)據(jù)的途徑,但屬性並不具備任何活動(dòng)能力。一個(gè)類要真正能完成一定的操作,就必須為類創(chuàng)建行為。行為描述了該類需要完成的每項(xiàng)具體任務(wù)所用的不同程式段,每個(gè)這樣的就叫做“方法”方法分類在Java程式中,用“數(shù)據(jù)”來描述類的屬性,用“方法”來實(shí)現(xiàn)類的行為。方法可分為成員方法(instancemethod)和類方法(classmethod,即由static修飾的方法,又叫做靜態(tài)方法)兩種方法的聲明描述方法的處理過程及其所需的參數(shù),並用一個(gè)方法名來標(biāo)識(shí)這個(gè)處理過程方法定義中的參數(shù)並沒有實(shí)際值,僅僅是為了描述處理過程而引入的,因此稱為形式參數(shù)(簡稱形參)方法的使用
通過向客體發(fā)送消息執(zhí)行方法所定義的處理功能。使用方法時(shí)給出參數(shù)的實(shí)際值,這些實(shí)際值稱為實(shí)際參數(shù)(簡稱實(shí)參)方法首部的聲明語法形式如下:
[方法修飾符]方法返回值類型
方法名([形式參數(shù)表])其中:方法修飾符可以是static、final以及public、private和protected等。static、final本書不作專門介紹,“方法修飾符”是可選的語法部分。方法返回值類型說明方法返回值的數(shù)據(jù)類型,可是Java基本數(shù)據(jù)類型,也可是複合數(shù)據(jù)類型。當(dāng)無返回值時(shí),其返回值類型須說明為void。方法名標(biāo)識(shí)所聲明的方法,必須是合法的Java識(shí)別字;形式參數(shù)表說明方法所需要的參數(shù),當(dāng)方法有多個(gè)參數(shù)時(shí),參數(shù)間需用逗號(hào)“,”隔開;當(dāng)方法沒有參數(shù)時(shí),可以沒有“形式參數(shù)表”部分。形式參數(shù)的作用域是整個(gè)方法體。方法體方法體是一個(gè)語句序列,這一語句序列具體描述方法的返回值、方法的參數(shù)和方法所在類的成員變數(shù)之間的關(guān)係,以實(shí)現(xiàn)方法的功能。方法體中可以定義其內(nèi)部使用的局部變數(shù),其作用域是整個(gè)方法體。方法的返回值若方法的返回值類型不是void時(shí),方法體中必須用return語句來返回一個(gè)方法聲明時(shí)指定類型的值。return語句的語法形式為:
return[運(yùn)算式];其中,return是關(guān)鍵字。方法聲明的例子方法setCNumber:voidsetCNumber(intxNumber) //方法首部聲明:無方法修飾符,方法名為//setCNumber,方法的參數(shù)為xNumber,這一方法//無返回值{//方法體開始
cNumber=xNumber; //方法體中的語句,描述方法的功能}//方法體結(jié)束方法getCNumberintgetCNumber()//方法首部聲明:無方法修飾符,方法名為//getCNumber,這一方法無參數(shù),這一方法
//的返回值類型為int{//方法體開始returncNumber;//將cNumber的值作為getCNumber方法的返回值}//方法體結(jié)束方法的調(diào)用與參數(shù)傳遞調(diào)用對(duì)象成員方法的語法形式為:
對(duì)象名.成員方法名([實(shí)際參數(shù)表]);對(duì)象名指定所使用的對(duì)象;成員方法名指定所要調(diào)用的成員方法;實(shí)際參數(shù)表是0個(gè)或多個(gè)運(yùn)算式構(gòu)成,多個(gè)運(yùn)算式之間用逗號(hào)“,”分隔。實(shí)際參數(shù)的個(gè)數(shù)、順序及類型應(yīng)與被調(diào)用方法的形式參數(shù)表中的形式參數(shù)一致。調(diào)用對(duì)象成員方法的語義計(jì)算實(shí)際參數(shù)表中(各)運(yùn)算式的值,並將它(們)一一傳送給被調(diào)用方法中對(duì)應(yīng)的形式參數(shù),執(zhí)行被調(diào)用方法的方法體。方法調(diào)用的結(jié)果就是被調(diào)用方法的執(zhí)行結(jié)果實(shí)現(xiàn)兩float型數(shù)相加的方法例子classMethodDemo1{ floatadd(floatx,floaty)
//建議所取的方法名有助於說明方法的功能,以便閱讀程式和記憶
{ floatz;
//z是方法體的局部變數(shù),作用域是整個(gè)add方法的方法體
z=x+y; returnz; }}classTryMethodDemo1{ //主類
publicstaticvoidmain(Stringargs[]){ MethodDemo1a=newMethodDemo1(); System.out.println(a.add(5,8)); }}實(shí)現(xiàn)兩float型數(shù)相加的方法例子二classObjPara{//定義對(duì)象作為參數(shù)的類,為便於舉例,本方法只有一個(gè)成員變數(shù)
floattemp;}classMethodDemo2{voidadd(floatx,floaty,ObjParaz){//方法首部聲明,此方法沒有返回值。
z.temp=x+y;//將x+y的結(jié)果存入類變數(shù)z的成員變數(shù)temp中。
}}classTryMethodDemo2{//主類
publicstaticvoidmain(Stringargs[]){ObjParab=newObjPara(); MethodDemo2a=newMethodDemo2(); a.add(4,6,b); System.out.println(b.temp); }}演示方法之間的消息發(fā)送與參數(shù)傳遞classMethodDemo3{ floatadd(floatx,floaty){ floatz; z=x+y; returnz; } voidcallAdd(floatm,floatn){ floatt; t=add(m,n);
/*向方法add發(fā)消息,將參數(shù)m,n的值分別傳遞給x,y,然後執(zhí)行 方法add的方法體,計(jì)算x+y,計(jì)算結(jié)果作為add的返回值傳回給t*/ System.out.print(m+"+"+n+"="+t); }}classTryMethodDemo3{ //主類
publicstaticvoidmain(Stringargs[]){ MethodDemo3a=newMethodDemo3(); a.callAdd(4,6); }}方法間的消息發(fā)送與參數(shù)傳遞演示二classObjPara{ floattemp;}classMethodDemo4{ voidadd(floatx,floaty,ObjParaz){ z.temp=x+y; } voidcallAdd(floatm,floatn){ ObjParak=newObjPara(); add(m,n,k);/*向方法add發(fā)消息,將參數(shù)m,n的值分別傳遞給x,y,並將k的存儲(chǔ)地址值傳送給z,然後執(zhí)行方法Add的方法體,計(jì)算x+y,計(jì)算結(jié)果通過對(duì)象k的成員temp傳回*/ System.out.print(m+"+"+n+"="+k.temp); } //k.temp的值即為m+n}classTryMethodDemo4{ //主類
publicstaticvoidmain(Stringargs[]){MethodDemo4a=newMethodDemo4(); a.callAdd(4,6); }}2.2運(yùn)算符與運(yùn)算式1賦值運(yùn)算2算術(shù)運(yùn)算3關(guān)係運(yùn)算4邏輯運(yùn)算5位運(yùn)算符6三元運(yùn)算7其他運(yùn)算符基本定義對(duì)數(shù)據(jù)進(jìn)行的操作稱為運(yùn)算表示各種不同運(yùn)算的符號(hào)稱為運(yùn)算符參於運(yùn)算的數(shù)據(jù)稱為運(yùn)算元(operand)運(yùn)算式(Expression)是由運(yùn)算元和運(yùn)算符按一定的語法形式組成的符號(hào)序列通過算術(shù)運(yùn)算符將運(yùn)算對(duì)象連接起來的式子,就稱為算術(shù)運(yùn)算式
Java語言的運(yùn)算符分類運(yùn)算符結(jié)合性一元運(yùn)算符+-++--!~()*右算術(shù)運(yùn)算符*/%左+-移位運(yùn)算符<<>>>>>左比較運(yùn)算符<<=>>=instanceof左==!=按位運(yùn)算符&左^|短路運(yùn)算符&&左||條件(三元)運(yùn)算符?:右賦值運(yùn)算符=“op=”(複合賦值運(yùn)算符)右1賦值運(yùn)算給新定義的變數(shù)進(jìn)行初始化或修改變數(shù)的內(nèi)容需要用到賦值運(yùn)算。賦值運(yùn)算的一般形式為:
變數(shù)
=運(yùn)算式;複合賦值運(yùn)算符
在賦值運(yùn)算符“=”之前加上其他運(yùn)算符<op>,就構(gòu)成了複合賦值運(yùn)算符“<op>=”複合賦值運(yùn)算符“<op>=”集成了計(jì)算和賦值兩大功能,對(duì)於任何類型相容的運(yùn)算式x和y來說,x<op>=y複合賦值運(yùn)算符包括:*=、/=、%=、+=、-=、<<=、>>=、>>>=、&=、^=和|=2算術(shù)運(yùn)算算術(shù)運(yùn)算符作用於整型或浮點(diǎn)型數(shù)據(jù),完成算術(shù)運(yùn)算。按運(yùn)算元個(gè)數(shù)來分,有一元算術(shù)運(yùn)算符和二元算術(shù)運(yùn)算符
一元算術(shù)運(yùn)算符運(yùn)算符用法描述++op正值--op負(fù)值++++op或op++加1----op或op--減1++和--算術(shù)運(yùn)算符稱為增一運(yùn)算符和減一運(yùn)算符可以作為首碼運(yùn)算符可以作為尾碼運(yùn)算符++和--運(yùn)算符及用法運(yùn)算符用法描述++x++運(yùn)算式x++的值為x,然後x的值增1++++x運(yùn)算式++x的值為x+1,x的值增1--x--運(yùn)算式x--的值為x,然後x的值減1----x運(yùn)算式--x的值為x-1,x的值減1二元算術(shù)運(yùn)算符運(yùn)算符用法描述+op1+op2運(yùn)算元op1加上op2-op1-op2運(yùn)算元op1減去op2*op1*op2運(yùn)算元op1乘以op2/op1/op2運(yùn)算元op1除以op2%op1%op2求運(yùn)算元op1除以op2的餘數(shù)(取模)整數(shù)算術(shù)運(yùn)算的除法和取模遵循以下等式 (a/b)*b+(a%b)==a對(duì)於浮點(diǎn)算術(shù)運(yùn)算來說
a%b和a-((int)(a/b)*b)的語義相同在取模運(yùn)算時(shí),假設(shè)運(yùn)算元中至少有一個(gè)負(fù)數(shù),那麼一般採取這樣一個(gè)有用的規(guī)則先忽略掉所有運(yùn)算元的符號(hào)來計(jì)算得到結(jié)果,然後將“%”左邊的操作符的符號(hào)賦給它得到最終答案一個(gè)算術(shù)運(yùn)算的例子publicclassArithmaticOp{publicstaticvoidmain(Stringargs[]){ inta=5,b=3; intc=++a/b; intc2=a--/b; intc3=a*2%b; doubled=2.5; doubled2=d%3; System.out.println("c="+c); System.out.println("c2="+c2);
System.out.println("c3="+c3); System.out.println("d2="+d2);}}3關(guān)係運(yùn)算關(guān)係運(yùn)算實(shí)際上就是比較運(yùn)算,它的運(yùn)算結(jié)果是一個(gè)布爾類型的值。如果兩個(gè)運(yùn)算對(duì)象符合關(guān)係運(yùn)算符所要求的比較關(guān)係,則關(guān)係運(yùn)算結(jié)果為true,否則為false。Java語言提供的關(guān)係運(yùn)算符都是二元運(yùn)算符關(guān)係運(yùn)算符運(yùn)算符用法功能>op1>0p2如果op1大於op2則結(jié)果為true,否則為false>=op1>=op2如果op1大於或等於op2則結(jié)果為true,否則為false<op1<op2如果op1小於op2則結(jié)果為true,否則為false<=op1<=op2如果op1小於或等於op2則結(jié)果為true,否則為false==op1==op2如果op1等於op2則結(jié)果為true,否則為false!=op1!=op2如果op1不等於op2則結(jié)果為true,否則為false關(guān)係運(yùn)算式
用關(guān)係運(yùn)算符將兩個(gè)相同類型的運(yùn)算式連接起來的的式子,稱為關(guān)係運(yùn)算式
3>5 ‘a(chǎn)’<’z’ x+y!=z都是合法的關(guān)係運(yùn)算式賦值(“=”)和等價(jià)比較(“==”)關(guān)係運(yùn)算符(<、<=、>、>=)一般適用於兩側(cè)的運(yùn)算元均為整數(shù)型、浮點(diǎn)型或字元型數(shù)據(jù)的情形,布爾型數(shù)據(jù)只能用在==或!=比較中。關(guān)係運(yùn)算符(<、<=、>、>=)連接的運(yùn)算式本身不能是關(guān)係運(yùn)算式。例如:x>y>z是非法的。關(guān)係運(yùn)算的結(jié)果不能存放在一個(gè)非布爾型變數(shù)中一個(gè)關(guān)係運(yùn)算的例子publicclassRelationOp{publicstaticvoidmain(Stringargs[]){inta=25,b=3;booleand=a>b; booleand1=3.5<2.6; booleand2='A'<='A'; booleand3=false!=true; booleane=a>=a*2-b*9;System.out.println("d="+d); System.out.println("d1="+d1); System.out.println("d2="+d2); System.out.println("d3="+d3); System.out.println("e="+e);}}4邏輯運(yùn)算關(guān)係運(yùn)算只能表示一個(gè)簡單的條件,而邏輯運(yùn)算可以將幾個(gè)關(guān)係運(yùn)算式或者布爾值連接起來,表示一個(gè)較複雜的條件邏輯運(yùn)算的運(yùn)算對(duì)象必須是布爾值類型的運(yùn)算式,運(yùn)算結(jié)果也是布爾值類型的數(shù)據(jù)邏輯運(yùn)算符運(yùn)算符用法功能分類!(邏輯非)!op1op1為true,則結(jié)果為false,否則為true。一元&&(邏輯與)op1&&op2op1和op2都為true,則結(jié)果為true,否則為false。二元||(邏輯或)op1||op2op1和op2都為false,則結(jié)果為false,否則為true。邏輯運(yùn)算的真值表xy!x!yx&&yx||ytruetruefalsefalsetruetruetruefalsefalsetruefalsetruefalsetruetruefalsefalsetruefalsefalsetruetruefalsefalse短路運(yùn)算符
“&&”和“||“又叫做短路運(yùn)算符在由它們連接組成的邏輯運(yùn)算式的求解過程中,總是先求出運(yùn)算符左邊的運(yùn)算式的值,再根據(jù)具體情況決定是否需要計(jì)算運(yùn)算符右邊的運(yùn)算式對(duì)“||”運(yùn)算,如果左邊的運(yùn)算式的值為true,則不必對(duì)運(yùn)算符右邊的運(yùn)算式再進(jìn)行運(yùn)算,整個(gè)運(yùn)算式的結(jié)果就為true對(duì)“&&”運(yùn)算,如果左邊的運(yùn)算式的值為false,則不必對(duì)運(yùn)算符右邊的運(yùn)算式再進(jìn)行運(yùn)算,整個(gè)運(yùn)算式的結(jié)果就為false。關(guān)係運(yùn)算符和邏輯運(yùn)算符共用的例子publicclassRelationAndConditionOp{publicstaticvoidmain(Stringargs[]){inta=28,b=3;inte=3;if(e!=0&&a/e>5)System.out.println("a/e="+a/e);intf=0;//下麵不會(huì)發(fā)生除零溢出的錯(cuò)誤,因?yàn)閑!=0為false,所以不需要對(duì)a/f進(jìn)行運(yùn)算。
if(f!=0&&a/f>5)System.out.println("a/f="+a/f);elseSystem.out.println("f="+f);}}5位運(yùn)算符位運(yùn)算符用來對(duì)二進(jìn)位位進(jìn)行操作,其運(yùn)算元只能為整型或字元型數(shù)提示:在Java中,使用補(bǔ)數(shù)來表示二進(jìn)位數(shù),最高位為符號(hào)位,正數(shù)的符號(hào)位為0,負(fù)數(shù)的符號(hào)位為1位運(yùn)算符運(yùn)算符用法描述分類~~op1按位取反運(yùn)算按位運(yùn)算符一元&op1&0p2按位與運(yùn)算二元|op1|0p2按位或運(yùn)算^op1^0p2按位異或運(yùn)算<<op1<<0p2左移運(yùn)算移位運(yùn)算符>>op1>>0p2帶符號(hào)右移運(yùn)算>>>op1>>>0p2不帶符號(hào)右移運(yùn)算4種按位運(yùn)算“~”是按位取反運(yùn)算符“&”是按位與運(yùn)算符“|”是按位或運(yùn)算符“^”是按位異或運(yùn)算符按位取反運(yùn)算符對(duì)數(shù)據(jù)的每個(gè)二進(jìn)位位取反,即把1變成0,把0變成1。例如:
~00001111=11110000“&”是按位與運(yùn)算符要求有兩個(gè)運(yùn)算元進(jìn)行運(yùn)算。如果兩個(gè)相應(yīng)位均為1,則該位的結(jié)果為1,否則結(jié)果為0。即:
0&0=00&1=0 1&0=01&1=1提示: 對(duì)某個(gè)數(shù)中某些特定的位清零 用來取某個(gè)數(shù)中某些指定的位“|”是按位或運(yùn)算符只要兩個(gè)相應(yīng)位中有一個(gè)為1,則該位的結(jié)果為1,否則結(jié)果為0。即:
0|0=00|1=1 1|0=11|1=1提示: 按位或運(yùn)算可以用來將某個(gè)數(shù)中某些特定的位置1“^”是按位異或運(yùn)算符同樣要求有兩個(gè)運(yùn)算元進(jìn)行運(yùn)算。如果兩個(gè)相應(yīng)位相同,則該位的結(jié)果為0,否則結(jié)果為1。即:
0^0=00^1=1 1^0=11^1=0提示:
用來使某個(gè)數(shù)中某些特定的位取反 實(shí)現(xiàn)兩個(gè)值的交換,而不需使用臨時(shí)變數(shù)
布爾型運(yùn)算元上時(shí)的運(yùn)算規(guī)則Op1Op2Op1&Op2Op1|Op2Op1^Op2truetruetruetruefalsetruefalsefalsetruetruefalsetruefalsetruetruefalsefalsefalsefalsefalse其他3種移位運(yùn)算(a)左移運(yùn)算(<<)(b)帶符號(hào)右移運(yùn)算(>>,又稱為算術(shù)右移)(c)不帶符號(hào)的右移運(yùn)算(>>>,又稱為邏輯右移)移位運(yùn)算的例子x(十進(jìn)位表示)x的二進(jìn)位補(bǔ)數(shù)表示x<<2x>>2x>>>23000011110011110000000011100000111-17111011111011110011111011001110116三元運(yùn)算條件運(yùn)算符“?:”比較特殊,是Java語言中僅有的一個(gè)三元運(yùn)算符,它的一般形式為:
運(yùn)算式1?運(yùn)算式2:運(yùn)算式3其中運(yùn)算式e1的值必須是布爾值類型,如果該值為true,則對(duì)運(yùn)算式e2進(jìn)行求值,並將e2的求值結(jié)果作為整個(gè)運(yùn)算式的值;否則對(duì)運(yùn)算式e3進(jìn)行求值並將e3的結(jié)果作為整個(gè)運(yùn)算式的值。一個(gè)條件運(yùn)算符的例子/*編程從三個(gè)整數(shù)x,y,z中選出最大和最小者。*/classMax2{publicstaticvoidmain(Stringargs[]){intx=335;inty=212;intz=38;inta,b,max,min;System.out.println("原來的整數(shù)的值為:x="+x+",y="+y+",z="+z);a=(x>y?x:y);max=(a>z?a:z);b=(x<y?x:y);min=(b<z?b:z);System.out.println("最大的元素的值為:"+max);System.out.println("最小的元素的值為:"+min);}}7其他運(yùn)算符這裏主要介紹對(duì)象運(yùn)算符instanceof
它也可以說是一種比較運(yùn)算符,用來判斷一個(gè)運(yùn)行時(shí)的對(duì)象是否屬於某個(gè)指定類或其子類的實(shí)例,如果是則返回true,否則返回false其一般形式為:
對(duì)象名
instanceof類名對(duì)象運(yùn)算符的用法publicvoidmethod(Employeee){if(einstanceofManager){…//dosomethingasaManager}elseif(einstanceofContractor){ …//dosomethingasaContractor}else{ …//dosomethingelse} }2.3流程控制語句語句類型關(guān)鍵字迴圈while,do-while,for選擇if-else,switch-case轉(zhuǎn)向控制break,continue,label:,return*異常處理try-catch-finally,throw重點(diǎn)說明流程控制語句1迴圈結(jié)構(gòu)(LoopConstructs)2選擇語句(SelectionStatements)LoopConstructs迴圈的作用是反復(fù)執(zhí)行同一塊代碼直到滿足結(jié)束條件三種迴圈語句:
1)while語句
2)do-while語句
3)for語句while語句while語句實(shí)現(xiàn)“當(dāng)型”迴圈,它的語法形式為:
while(布爾運(yùn)算式)
循環(huán)體
while語句用於在布爾運(yùn)算式(即測(cè)試條件)的值保持為真(true)時(shí)反復(fù)地執(zhí)行其中的內(nèi)嵌語句(一般叫做循環(huán)體)
while語句的流程圖循環(huán)體布爾運(yùn)算式true例求100以內(nèi)所有奇數(shù)的和
publicclassWhileDemo{publicstaticvoidmain(String[]args){inti,sum;sum=0; //計(jì)數(shù)器清0i=1; //i的初始值為1(因?yàn)?是最小的奇數(shù))
while(i<=100){sum+=i;i+=2; //奇數(shù)的間隔為2}System.out.println(sum);}}do-while語句do-while語句實(shí)現(xiàn)“直到型”迴圈,它的語法形式如下:
do
循環(huán)體
while(布爾運(yùn)算式);
do-while語句執(zhí)行的過程為:先執(zhí)行一次循環(huán)體中的語句,然後測(cè)試布爾運(yùn)算式的值。如布爾運(yùn)算式的值為真,那就返回執(zhí)行循環(huán)體中的內(nèi)容
do-while語句的流程圖布爾運(yùn)算式循環(huán)體falsetrue例求100以內(nèi)所有奇數(shù)的和
publicclassDoWhileDemo{ publicstaticvoidmain(String[]args){ inti,sum; sum=0; //計(jì)數(shù)器清0 i=1; //i的初始值為1 do{ sum+=i; i+=2; }while(i<=100); System.out.println("sum="+sum); }}do-while語句和while語句的不同之處do-while語句總是先進(jìn)入迴圈,然後檢測(cè)條件,再?zèng)Q定是否繼續(xù)迴圈while語句是先測(cè)試條件,再?zèng)Q定是否進(jìn)入迴圈所以,用do-while語句時(shí),循環(huán)體至少執(zhí)行一次。體會(huì)while語句publicclassWhileDemo2{ publicstaticvoidmain(String[]args){ inti=88; while(i<88){ System.out.println("Print"+i); i++; } }}此例的運(yùn)行結(jié)果是什麼也不輸出體會(huì)do-while語句publicclassDoWhileDemo2{ publicstaticvoidmain(String[]args){ inti=88; do{ System.out.println("Print"+i); i++; }while(i<88); }}此例的運(yùn)行結(jié)果是:Print88for語句實(shí)現(xiàn)“當(dāng)型”迴圈,它的語法形式為:
for(運(yùn)算式1;運(yùn)算式2;運(yùn)算式3)
循環(huán)體
每個(gè)for語句都有一個(gè)用於決定迴圈開始和結(jié)束的變數(shù),通常稱這個(gè)變數(shù)為迴圈控制變數(shù)
for語句的執(zhí)行過程先求解運(yùn)算式1;求解運(yùn)算式2,若其值為true,則執(zhí)行for語句中的循環(huán)體,然後執(zhí)行下麵第(3)步。若值為false,則結(jié)束迴圈,轉(zhuǎn)到第(5)步。求解運(yùn)算式3。轉(zhuǎn)回上面第(2)步繼續(xù)執(zhí)行。執(zhí)行for語句下麵的一個(gè)語句。for語句的流程圖求解運(yùn)算式1運(yùn)算式2循環(huán)體求解運(yùn)算式3for語句的下一語句truefalse例求100以內(nèi)所有奇數(shù)的和
publicclassForDemo{ publicstaticvoidmain(String[]args){ intsum; sum=0; //計(jì)數(shù)器清0 for(inti=1;i<=100;i+=2){ sum+=i; } System.out.println(sum); }}例求1+2+…+999的和
/*試for後分號(hào)的作用*/publicclassForDemo2{ publicstaticvoidmain(String[]args){ intsum=0; inti; for(i=1;i<1000;i++);//注意此處圓括號(hào)後面有一個(gè)分號(hào)
{ sum+=i; } System.out.println("i="+i);System.out.println("sum="+sum);}}迴圈的嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的迴圈結(jié)構(gòu),稱為迴圈的嵌套內(nèi)嵌的迴圈中還可以嵌套迴圈,這就是多重迴圈上述三種迴圈(while迴圈,do-while迴圈和for迴圈)語句之間可以相互嵌套使用。例輸出一個(gè)0~9的乘法表
publicclassMultiTable{ publicstaticvoidmain(Stringargs[]){ intb,c,a; for(b=0;b<=9;b++){ for(a=0;a<=b;a++) System.out.print(a+"*"+b+"="+a*b+'\t'); System.out.println(); } }}迴圈結(jié)構(gòu)中的continue語句continue語句的一般語法格式為:
continue[標(biāo)號(hào)];其中,用“[]”括起的標(biāo)號(hào)部分是可選的,分兩種使用情況:不帶標(biāo)號(hào)的使用情況:此時(shí),continue語句用來結(jié)束本次迴圈(對(duì)於for語句,在進(jìn)行迴圈條件的判斷之前,還要先改變迴圈控制變數(shù)的值(即先執(zhí)行運(yùn)算式3))帶標(biāo)號(hào)的使用情況:此時(shí),continue語句跳過標(biāo)號(hào)所指語句塊中所有餘下部分的語句,回到標(biāo)號(hào)所指語句塊的條件測(cè)試部分進(jìn)行條件判斷,以決定迴圈是否繼續(xù)執(zhí)行。例不帶標(biāo)號(hào)的continue語句classEndInnerLoop{ publicstaticvoidmain(Stringargs[]){ System.out.println("21世紀(jì)的閏年有:"); intn=0; //計(jì)數(shù)
for(intyear=2000;year<3000;year+=4){ if(year%100==0&&year%400!=0) continue; System.out.print(year+"\t"); n++; if(n<10) continue; System.out.println(); n=0; } }}例帶標(biāo)號(hào)的continue語句classContinueLabel{ publicstaticvoidmain(Stringargs[]){ outer: for(inti=0;i<10;i++){ for(intj=0;j<10;j++){ if(j>i){ System.out.println(""); continueouter; } System.out.print(""+i+"*"+j+"="+(i*j)); } } }}列印一個(gè)三角形的0至9的乘法表break語句測(cè)試的條件為true,也希望迴圈立即終止,這時(shí)可以用break語句實(shí)現(xiàn)此功能break語句與continue語句一樣,對(duì)迴圈的執(zhí)行起限定轉(zhuǎn)向的作用與continue語句只能在迴圈中使用不同,break語句除了可以用在迴圈語句中之外,亦可以用於switch語句中continue語句只結(jié)束本次迴圈,而不是終止整個(gè)迴圈的執(zhí)行。而break語句則是結(jié)束整個(gè)迴圈語句的執(zhí)行break語句的一般語法格式break語句的一般語法格式為:
break[標(biāo)號(hào)];其中,用“[]”括起的標(biāo)號(hào)部分是可選的。分兩種使用情況:不帶標(biāo)號(hào)的情況:其功能是終止break所在的迴圈,轉(zhuǎn)去執(zhí)行其後的第一條語句。在執(zhí)行時(shí)有兩個(gè)特點(diǎn):一是在有多重迴圈時(shí),它只能使迴圈從本層的迴圈跳出來;二是此時(shí)程式一定轉(zhuǎn)移到本層迴圈的下一個(gè)語句。帶標(biāo)號(hào)的情況:其功能是終止由標(biāo)號(hào)指出的語句塊的執(zhí)行,並從緊跟該塊的第一條語句處開始往下執(zhí)行。典型用法是實(shí)現(xiàn)從其所處的多重迴圈的內(nèi)部直接跳出來,只要在欲跳出的迴圈開始處加上標(biāo)號(hào)即可。例不帶標(biāo)號(hào)的break語句publicclassBreakDemo{publicstaticvoidmain(String[]args){ intn=0; //計(jì)算素?cái)?shù)的個(gè)數(shù)
intb=999;outer: //外層迴圈,定義一個(gè)標(biāo)號(hào)
do{ b+=2; intm=(int)(Math.ceil(Math.sqrt(b))); for(inti=2;i<=m;i++){//內(nèi)層迴圈,判斷b是否為素?cái)?shù)
if(b%i==0) continueouter; } n++; if(n==3) break; }while(true); System.out.println("大於1000的第三個(gè)素?cái)?shù)為:"+b);}}例帶標(biāo)號(hào)的break語句publicclassBreakDemo{ publicstaticvoidmain(String[]args){ intsum=0; coloop: //定義標(biāo)號(hào)
while(sum<=100){ for(intcount=1;count<10;count++){ sum+=count; if(sum>60) breakcoloop; } } System.out.println("sum="+sum); }}SelectionStatements選擇語句提供了一種控制機(jī)制,使得程式根據(jù)相應(yīng)的條件去執(zhí)行對(duì)應(yīng)的語句Java中的選擇語句有兩個(gè):
1)負(fù)責(zé)實(shí)現(xiàn)兩路分支的if-else語句
2)負(fù)責(zé)實(shí)現(xiàn)多路分支的switch語句。if-else語句簡單形式
if-else語句的一般語法形式為:if(布爾運(yùn)算式){
語句1}[else{
語句2
}]if語句的流程圖無else部分
truefalse語句1後續(xù)語句布爾運(yùn)算式if語句的流程圖有else部分布爾運(yùn)算式truefalse語句1語句2後續(xù)語句例沒有else部分的if語句classIfExam{publicstaticvoidmain(String[]args){ System.out.println("請(qǐng)輸入一個(gè)要求其絕對(duì)值的數(shù):"); if(args.length!=1){ System.err.println("請(qǐng)重新執(zhí)行,一定要輸入一個(gè)數(shù)!"); System.exit(-1); } doublenumber=Double.valueOf(args[0]).doubleValue(); System.out.print("你輸入的數(shù)是:"+number); if(number<=0) number=-number; System.out.println("該數(shù)的絕對(duì)值為:"+number); }}例有else部分的if語句classIfTry{publicstaticvoidmain(String[]args){ System.out.println("請(qǐng)輸入你的成績:"); if(args.length!=1){ System.err.println("請(qǐng)重新執(zhí)行,一定要輸入一個(gè)整數(shù)!"); System.exit(-1); } intnumber=Integer.parseInt(args[0]); if(number>=60){ System.out.println("祝賀你,你及格了!"); } else{ System.out.println("真遺憾,你沒及格,請(qǐng)繼續(xù)努力!"); }}}if-else語句嵌套形式 if語句中內(nèi)嵌的語句1或語句2又是if語句的情況稱為if語句的嵌套,其常用形式為:
if(布爾運(yùn)算式1) {
語句1 } …… elseif(布爾運(yùn)算式m) {
語句m } else {
語句n }例實(shí)現(xiàn)多重嵌套classIfSeason{publicstaticvoidmain(String[]args){ System.out.println("請(qǐng)輸入一個(gè)有效月份:"); if(args.length!=1){ System.err.println("請(qǐng)重新執(zhí)行,一定要輸入一個(gè)整數(shù)!"); System.exit(-1);} intmonth=Integer.parseInt(args[0]); System.out.print("你輸入的月份是:"+month); Stringseason; if(month==12||month==1||month==2){ season="冬天"; }elseif(month==3||month==4||month==5){ season="春天"; }else{ season=“無效的月份或夏天、秋天!請(qǐng)重新執(zhí)行。";} System.out.println("所處季節(jié)為:"+season);}}switch語句上面所講的if語句的嵌套形式雖然能夠?qū)崿F(xiàn)多路分支,滿足程式流程控制的要求,但是它欠缺靈活性,程式書寫比較麻煩,而且可讀性不太好在Java中,為多路選擇流程控制專門提供了一個(gè)語句--switch語句switch語句根據(jù)一個(gè)供進(jìn)行判斷的運(yùn)算式的結(jié)果來執(zhí)行多個(gè)操作中的一個(gè)語法形式switch(運(yùn)算式){case常量1:
語句1 [break;]case常量2:
語句2 [break;] …case常量n:
語句n [break;][default:
缺省處理語句
[break;]}switch語句的流程圖常量1語句1缺省處理語句default常量n運(yùn)算式常量2語句2語句nbreakbreakbreakbreak…後續(xù)語句switch語句的注意點(diǎn)使用switch語句時(shí),要注意用作判斷的運(yùn)算式必須是符合byte,char,short,int類型的運(yùn)算式,而不能使用浮點(diǎn)類型或long類型,也不能為一個(gè)字串;switch語句將運(yùn)算式的值依次與每個(gè)case子句中的常量值相比較。如果匹配成功,則執(zhí)行該case子句中常量值後的語句,直到遇到break語句為止;case子句中常量的類型必須與運(yùn)算式的類型相容,而且每個(gè)case子句中常量的值必須是不同的;default子句是可選的,當(dāng)運(yùn)算式的值與任一case子句中的值都不匹配時(shí),就執(zhí)行default後的語句。(e)break語句用來在執(zhí)行完一個(gè)case分支後,使程式跳出switch語句,執(zhí)行switch語句的後續(xù)語句。(f)在一些特殊的情況下,例如多個(gè)不同的case值要執(zhí)行一組相同的操作,可以寫成如下形式:
case常量n:
case常量n+1:語句
[break;](g)case分支中包括多個(gè)執(zhí)行語句時(shí),可以不用花括弧“{}”括起;(h)通過if-else語句可以實(shí)現(xiàn)switch語句所有的功能。但通常使用switch語句更簡練,且可讀性強(qiáng),程式的執(zhí)行效率也高;例用switch語句實(shí)現(xiàn)判斷某月份
classSwitchSeason{publicstaticvoidmain(String[]args){System.out.println("請(qǐng)輸入一個(gè)有效月份:");
if(args.length!=1){ System.err.println("請(qǐng)重新執(zhí)行,一定要輸入一個(gè)整數(shù)!"); System.exit(-1); }intmonth=Integer.parseInt(args[0]); System.out.print("你輸入的月份是:"+month);Stringseason;switch(month){case12:case1:case2:seaso
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 漢真有趣說課稿部編版
- 滴滴司服經(jīng)理述職報(bào)告
- 醫(yī)療物聯(lián)網(wǎng)科技公司勞動(dòng)合同
- 劇場(chǎng)版編劇合作協(xié)議樣本
- 通訊技術(shù)助理聘用合同
- 農(nóng)村供水工程招投標(biāo)制度研究
- 漁業(yè)發(fā)展項(xiàng)目魚塘施工合同模板
- 倉儲(chǔ)物流區(qū)域副總招聘協(xié)議
- 特種設(shè)備應(yīng)急演練
- 2022年大學(xué)生物科學(xué)專業(yè)大學(xué)物理二期末考試試卷D卷-含答案
- 建筑材料知識(shí)點(diǎn)匯總
- 平面構(gòu)成作品欣賞
- 英語管道專業(yè)術(shù)語
- 淺談?wù)Z文課程內(nèi)容的橫向聯(lián)系
- 職業(yè)衛(wèi)生防護(hù)設(shè)施臺(tái)賬
- 社會(huì)工作畢業(yè)論文(優(yōu)秀范文8篇)
- 五篇500字左右的短劇劇本
- 新形勢(shì)下如何加強(qiáng)醫(yī)院新聞宣傳工作
- 輸變電工程電子化移交測(cè)錄費(fèi)用標(biāo)準(zhǔn)研究
- 第十一章總集與別集(杜澤遜版)
- 圖形創(chuàng)意的聯(lián)想方式及訓(xùn)練
評(píng)論
0/150
提交評(píng)論