版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章Java入門初學(xué)者必須首先掌握命令行進(jìn)行Java程序的編寫和編譯。后續(xù)可以選擇輕量級(jí)的文本編輯器,如Notepad++,也可以使用集成開發(fā)環(huán)境(IDE),如IntelliJIDEA,Eclipse等,它們提供了代碼編輯、編譯、調(diào)試等一站式服務(wù),提高開發(fā)效率。掌握命令行后,再使用IDE時(shí)不會(huì)有困難。建議初學(xué)者不直接使用IDE學(xué)習(xí)Java語言。導(dǎo)讀主要內(nèi)容Java的地位Java誕生Java的特點(diǎn)安裝JDK簡(jiǎn)單的Java應(yīng)用程序重點(diǎn)與難點(diǎn):重點(diǎn):Java平臺(tái)無關(guān)性、Java程序的結(jié)構(gòu)。難點(diǎn):Java程序的開發(fā)過程。Java之父與Java的誕生
Java是1995年6月由Sun公司引進(jìn)到我們這個(gè)世界的革命性的編程語言。1990年Sun公司成立了由JamesGosling領(lǐng)導(dǎo)的開發(fā)小組,開始致力于開發(fā)一種可移植的、跨平臺(tái)的語言,該語言能生成正確運(yùn)行于各種操作系統(tǒng)、各種CPU芯片上的代碼。他們的精心專研和努力促成了Java語言的誕生。印度尼西亞有一個(gè)重要的盛產(chǎn)咖啡的島嶼叫Java,中文譯名為爪哇,開發(fā)人員為這種新的語言起名為Java,其寓意是為世人端上一杯熱咖啡。Java的先導(dǎo)知識(shí)與后繼技術(shù)
學(xué)習(xí)Java語言需要讀者曾系統(tǒng)地學(xué)習(xí)過一門面向過程的編程語言,例如C語言。讀者學(xué)習(xí)過Java語言之后,可以繼續(xù)學(xué)習(xí)和Java相關(guān)的一些重要內(nèi)容,例如,學(xué)習(xí)和嵌入式程序設(shè)計(jì)相關(guān)的
JavaMicroEdition(JavaME)
、Web設(shè)計(jì)相關(guān)的JavaServerPage(JSP)、Android手機(jī)程序設(shè)計(jì)、數(shù)據(jù)交換技術(shù)相關(guān)的eXtensibleMarkupLanguage(XML)以及網(wǎng)絡(luò)中間件設(shè)計(jì)相關(guān)的JavaEnterpriseEdition(JavaEE)
。
1.1Java的地位1.1.1網(wǎng)絡(luò)地位
Java的平臺(tái)無關(guān)性讓Java成為編寫網(wǎng)絡(luò)應(yīng)用程序的佼佼者,而且Java也提供了許多以網(wǎng)絡(luò)應(yīng)用為核心的技術(shù),使得Java特別適合于網(wǎng)絡(luò)應(yīng)用軟件的設(shè)計(jì)與開發(fā)。1.1.2語言地位 是一門很好的面向?qū)ο笳Z言,通過學(xué)習(xí)Java語言可以學(xué)習(xí)怎樣使用對(duì)象來完成某些任務(wù)、掌握面向?qū)ο缶幊痰幕舅枷?1.1.3需求地位
IT行業(yè)對(duì)Java人才的需求正在不斷的增長(zhǎng),掌握J(rèn)ava語言及其相關(guān)技術(shù)意味著較好的就業(yè)前景和工作酬金。1.2Java的特點(diǎn)_11.2.1簡(jiǎn)單Java要比C++簡(jiǎn)單,C++中許多容易混淆的概念,或者被Java棄之不用了,或者以一種更清楚更容易理解的方式實(shí)現(xiàn)。
1.2.2面向?qū)ο?/p>
Java是面向?qū)ο蟮木幊陶Z言,本書將在第4章、第5章和第6章詳細(xì)、準(zhǔn)確地討論類、對(duì)象、繼承、多態(tài)、接口等重要概念。1.2.3平臺(tái)無關(guān)
在一個(gè)計(jì)算機(jī)上編譯得到的字節(jié)碼文件可以復(fù)制到任何一個(gè)安裝了Java運(yùn)行環(huán)境的計(jì)算機(jī)上直接使用。字節(jié)碼由Java虛擬機(jī)負(fù)責(zé)解釋運(yùn)行,即Java虛擬機(jī)負(fù)責(zé)將字節(jié)碼翻譯成本地計(jì)算機(jī)的機(jī)器碼,并將機(jī)器碼交給本地的操作系統(tǒng)來運(yùn)行。1.平臺(tái)與機(jī)器指令
這里所指的平臺(tái)是由操作系統(tǒng)(OperatingSystem,OS)和處理器CPU所構(gòu)成。與平臺(tái)無關(guān)是指軟件的運(yùn)行不因操作系統(tǒng)、處理器的變化而無法運(yùn)行或出現(xiàn)運(yùn)行錯(cuò)誤。
每個(gè)平臺(tái)都會(huì)形成自己獨(dú)特的機(jī)器指令,所謂平臺(tái)的機(jī)器指令就是可以被該平臺(tái)直接識(shí)別、執(zhí)行的一種由0,1組成的序列代碼。相同的CPU和不同的操作系統(tǒng)所形成的平臺(tái)的機(jī)器指令可能是不同的。比如,某個(gè)平臺(tái)可能用8位序列代碼00001111表示加法指令,以10000001表示減法指令,而另一種平臺(tái)可能用8位序列代碼10101010表示加法指令,以10010011表示減法指令。2.C/C++程序依賴平臺(tái)C/C++針對(duì)當(dāng)前C/C++源程序所在的特定平臺(tái)對(duì)其源文件進(jìn)行編譯、鏈接,生成機(jī)器指令,即根據(jù)當(dāng)前平臺(tái)的機(jī)器指令生成可執(zhí)行文件.
不能保證C/C++源程序所產(chǎn)生的可執(zhí)行文件在所有的平臺(tái)上都能正確地被運(yùn)行,其原因是不同平臺(tái)可能具有不同的機(jī)器指令(如圖1.2所示)3.Java虛擬機(jī)與字節(jié)碼
Java語言提供的編譯器不針對(duì)特定的操作系統(tǒng)和CPU芯片進(jìn)行編譯,而是針對(duì)Java虛擬機(jī)把Java源程序編譯成稱為字節(jié)碼的“中間代碼”可以被Java虛擬機(jī)直接識(shí)別、執(zhí)行的一種由0,1組成的序列代碼。
字節(jié)碼并不是機(jī)器指令,因?yàn)樗缓吞囟ǖ钠脚_(tái)相關(guān),不能被任何平臺(tái)直接識(shí)別、執(zhí)行。Java針對(duì)不同平臺(tái)提供的Java虛擬機(jī)的字節(jié)碼指令都是相同的,Java虛擬機(jī)負(fù)責(zé)將字節(jié)碼翻譯成虛擬機(jī)所在平臺(tái)的機(jī)器碼,并讓當(dāng)前平臺(tái)運(yùn)行該機(jī)器碼,如圖1.3所示。1.2Java的特點(diǎn)_21.2.4多線程 Java的特點(diǎn)之一就是內(nèi)置對(duì)多線程的支持。多線程允許同時(shí)完成多個(gè)任務(wù)。1.2.5動(dòng)態(tài) Java程序的基本組成單元就是類,有些類是自己編寫的,有一些是從類庫中引入的,而類又是運(yùn)行時(shí)動(dòng)態(tài)裝載的,這就使得Java可以在分布環(huán)境中動(dòng)態(tài)地維護(hù)程序及類庫。
1.3安裝JDK1.3.1三種平臺(tái)簡(jiǎn)介
目前Java平臺(tái)主要分為下列3個(gè)版本:
(1)JavaSE(曾稱為J2SE)稱為Java標(biāo)準(zhǔn)版或Java標(biāo)準(zhǔn)平臺(tái). (2)JavaEE(曾稱為J2EE)稱為Java企業(yè)版或Java企業(yè)平臺(tái). (3)JavaME(曾稱為J2ME)稱為Java微型版或Java小型平臺(tái).
無論上述哪種Java運(yùn)行平臺(tái)都包括了相應(yīng)的Java虛擬機(jī)(JavaVirtualMachine),虛擬機(jī)負(fù)責(zé)將字節(jié)碼文件(包括程序使用的類庫中的字節(jié)碼)加載到內(nèi)存,然后采用解釋方式來執(zhí)行字節(jié)碼文件,即根據(jù)相應(yīng)平臺(tái)的機(jī)器指令翻譯一句執(zhí)行一句。
1.3.2安裝JavaSE平臺(tái)
JavaSE平臺(tái)是學(xué)習(xí)掌握J(rèn)ava語言的最佳平臺(tái),而掌握J(rèn)avaSE又是進(jìn)一步學(xué)習(xí)JavaEE和Android所必須的。下載JDK21。本書將使用針對(duì)Window操作系統(tǒng)平臺(tái)的JDK,因此下載的版本為jdk-21_windows-x64_bin.zip
安裝。JDK21版本提供的zip安裝文件,使得安裝更加便利。將下載的jdk-21_windows-x64_bin.zip解壓到C:\磁盤。1.系統(tǒng)環(huán)境path的設(shè)置①首先設(shè)置系統(tǒng)變量JAVA_HOME
右鍵單擊“我的電腦或計(jì)算機(jī)”,在彈出的快捷菜單中選擇“屬性”,彈出“系統(tǒng)特性”對(duì)話框,再單擊該對(duì)話框中的“高級(jí)屬性設(shè)置”,然后單擊按鈕“環(huán)境變量”,添加系統(tǒng)環(huán)境變量JAVA_HOME,讓該環(huán)境變量的值是JDK目錄結(jié)構(gòu)的根目錄,例如
C:\jdk-21
②設(shè)置系統(tǒng)環(huán)境path的的值
用鼠標(biāo)右鍵單擊“計(jì)算機(jī)”/“我的電腦”,在彈出的快捷菜單中選擇“屬性”命令彈出“系統(tǒng)”對(duì)話框單擊該對(duì)話框中的“高級(jí)系統(tǒng)設(shè)置”/“高級(jí)選項(xiàng)”,然后單擊按鈕“環(huán)境變量”彈出環(huán)境變量設(shè)置對(duì)話框,在該對(duì)話框中的“系統(tǒng)變量(S)”中找到path、單擊按鈕“編輯(I)彈出編輯系統(tǒng)變量對(duì)話框,在該對(duì)話框中編輯path的值即可。這里,我們?yōu)閜ath添加的新值就是C:\jdk-21。由于已經(jīng)設(shè)置了系統(tǒng)變量JAVA_HOME的值是C:\jdk-21,因此可以用%JAVA_HOME%代替C:\jdk-21。在彈出編輯系統(tǒng)變量對(duì)話框中為path添加的新值是%JAVA_HOME%\bin,如圖。在彈出的編輯對(duì)話框中,單擊右側(cè)的新建按鈕,并在左邊的列表里為path添加新的值:%JAVA_HOME%\bin
建議將新添加的值移動(dòng)到列表的最上方。如果計(jì)算機(jī)中安裝了多個(gè)JDK版本,那么默認(rèn)使用列表中最上方給出的版本。
1.4Java程序的開發(fā)步驟
開發(fā)步驟: 1)編寫源文件:擴(kuò)展名必須是.java。 2)編譯Java源程序:用Java編譯器(javac.exe)編譯源文件,得到字節(jié)碼文件。 3)運(yùn)行Java程序:使用Java解釋器(java.exe)來解釋執(zhí)行字節(jié)碼文件。1.5簡(jiǎn)單的Java應(yīng)用程序1.5.1源文件的編寫與保存 Java應(yīng)用程序的源文件是由若干個(gè)書寫形式互相獨(dú)立的類組成,有關(guān)Java應(yīng)用程序結(jié)構(gòu)的細(xì)節(jié)在第4章還會(huì)講解(4.4節(jié))
例子1中的Java源文件Hello.java是由兩個(gè)名字分別為Hello和Student的類組成。
publicclassHello{publicstaticvoidmain(Stringargs[]){System.out.println("大家好!");
System.out.println("Nicetomeetyou");Studentstu=newStudent();stu.speak("Wearestudents");}}classStudent{publicvoidspeak(Strings){System.out.println(s);}}例子1編寫與保存源文件1編寫源文件使用一個(gè)文本編輯器,如Edit或記事本編寫上述例子1給出的源文件。Java源程序中語句所涉及到的小括號(hào)及標(biāo)點(diǎn)符號(hào)都是英文狀態(tài)下輸入的括號(hào)和標(biāo)點(diǎn)符號(hào),比如“大家好!”中的引號(hào)必須是英文狀態(tài)下的引號(hào),而字符串里面的符號(hào)不受漢字符或英文字符的限制。2.保存源文件如果源文件中有多個(gè)類,那么只能有一個(gè)類是public類;如果有一個(gè)類是public類,那么源文件的名字必須與這個(gè)類的名字完全相同,擴(kuò)展名是java;如果源文件沒有public類,那么源文件的名字只要和某個(gè)類的名字相同(不是必須的,也可以是其他名字,但不提倡?。⑶覕U(kuò)展名是java就可以了。上述例子1中的源文件必須命名為Hello.java。我們將Hello.java保存到C:\chapter1文件夾中。編寫與保存源文件在保存文件時(shí),將“保存類型”選擇為“所有文件”,將“編碼”選擇為UTF-8或ANSI(不可以選擇“帶有BOM的UTF-8”)。ANSI編碼在不同的系統(tǒng)中代表著不同的編碼。在Windows簡(jiǎn)體中文系統(tǒng)下,ANSI編碼代表GBK編碼,在Windows日文系統(tǒng)下,ANSI編碼代表JIS編碼。JDK21版本開始,編譯器使用的默認(rèn)編碼是UTF-8(-encoding參數(shù)的默認(rèn)值是UTF-8),因此,本教材(第7版和第6版使用的JDK版本不同)使用記事本編輯器保存Java源文件時(shí)選擇的編碼是UTF-8,然后直接使用javac編譯源文件。1.5.2編譯1.編譯器(javac)進(jìn)入邏輯分區(qū)C的chapter1目錄中,使用編譯器javac編譯源文件。如果保存java源文件時(shí)選擇的編碼是utf-8,那么可以直接使用javac編譯源文件C:\chapter1>javacHello.java
1.5.2編譯
編譯源文件時(shí)顯式地使用-encoding參數(shù)是一個(gè)好習(xí)慣,以避免不清楚當(dāng)前JDK版本提供的編譯器所使用的默認(rèn)編碼是否是UTF-8導(dǎo)致出現(xiàn)“不可映射字符”這樣的錯(cuò)誤,例如,保存源文件選擇的編碼是GBK(假設(shè)ANSI默認(rèn)是GBK),那么編譯源文件時(shí)使用-encoding參數(shù)(從JDK21版本開始,必須顯式地使用-encoding參數(shù))1.5.3運(yùn)行1.應(yīng)用程序的主類
一個(gè)Java應(yīng)用程序必須有一個(gè)類含有publicstaticvoidmain(String
args[])方法,稱這個(gè)類是應(yīng)用程序的主類。2.解釋器(java)
使用Java虛擬機(jī)中的Java解釋器(java.exe)來解釋執(zhí)行其字節(jié)碼文件。Java應(yīng)用程序總是從主類的main方法開始執(zhí)行。因此,需進(jìn)入主類字節(jié)碼所在目錄,比如C:\chapter1,然后使用Java解釋器(java.exe)運(yùn)行主類的字節(jié)碼.使用java解釋器運(yùn)行程序
C:\chapter1\>javaHello
再看一個(gè)簡(jiǎn)單的Java應(yīng)用程序不要求讀者看懂程序的細(xì)節(jié),但讀者必須知道怎樣保存例子2中的Java源文件(源文件里有2個(gè)類)
怎樣使用編譯器編譯源程序怎樣使用解釋器運(yùn)行程序例子21.6Java反編譯JDK提供的反編譯器是javap.exe(也有真對(duì)Java的許多商業(yè)反編譯軟件,例如dj-gui反編譯)。如果想反編譯例子1中的Hello.class,可使用javap命令:javapHello.class,例如:C:\chapter1\>javapHello.class
如果想反編譯類庫中的Date類(其包名是java.util)Date.class,可使用javap命令:javapjava.util.Date.class,例如:C:\chapter1\>javapjava.util.Date.class1.7編程風(fēng)格遵守一門語言的編程風(fēng)格是非常重要的,否則編寫的代碼將難以閱讀,給后期的維護(hù)帶來諸多不便1.7.1Allmans風(fēng)格 Allmans風(fēng)格也稱“獨(dú)行”風(fēng)格,即左、右大括號(hào)各自獨(dú)占一行,如下列代碼所示意.當(dāng)代碼量較小時(shí)適合使用“獨(dú)行”風(fēng)格,代碼布局清晰,可讀性強(qiáng)classAllmans{publicstaticvoidmain(Stringargs[]){intsum=0,i=0,j=0;for(i=1;i<=100;i++){sum=sum+i;}System.out.println(sum);}}1.7編程風(fēng)格1.7.2Kernighan風(fēng)格
Kernighan風(fēng)格也稱“行尾”風(fēng)格,即左大括號(hào)在上一行的行尾,而右大括號(hào)獨(dú)占一行,如下列代碼所示意。當(dāng)代碼量較大時(shí)不適合使用“獨(dú)行”風(fēng)格,因?yàn)樵擄L(fēng)格將導(dǎo)致代碼的左半部分出現(xiàn)大量的左、右大括號(hào),導(dǎo)致代碼清晰度下降,這時(shí)應(yīng)當(dāng)使用“行尾”風(fēng)格。classKernighan{publicstaticvoidmain(Stringargs[]){intsum=0,i=0,j=0;for(i=1;i<=100;i++){sum=sum+i;}System.out.println(sum);}}1.7.3注釋編譯器忽略注釋內(nèi)容,注釋的目的是有利于代碼的維護(hù)和閱讀,因此給代碼增加注釋是一個(gè)良好的編程習(xí)慣。Java支持兩種格式的注釋:?jiǎn)涡凶⑨尯投嘈凶涡凶⑨屖褂谩?/”表示單行注釋的開始,即該行中從“//”開始的后續(xù)內(nèi)容為注釋.多行注釋的使用“/*”表示注釋的開始,以“*/”表示注釋結(jié)束.總結(jié)1Java語言是面向?qū)ο缶幊蹋帉懙能浖c平臺(tái)無關(guān)。2開發(fā)一個(gè)Java程序需經(jīng)過三個(gè)步驟:編寫源文件、編譯源文件生成字節(jié)碼、加載運(yùn)行字節(jié)碼。3編寫代碼務(wù)必遵守行業(yè)的習(xí)慣風(fēng)格。本節(jié)結(jié)束咯~偶都會(huì)了~太聰明了1命名保存源文件2編譯3執(zhí)行作業(yè)按時(shí)完成老師布置的作業(yè)額。教材提供了題庫練習(xí)系統(tǒng)(見前言二維碼)。本章結(jié)束ThankYou!第2章基本數(shù)據(jù)類型與數(shù)組
導(dǎo)讀主要內(nèi)容標(biāo)識(shí)符與關(guān)鍵字基本數(shù)據(jù)類型類型轉(zhuǎn)換運(yùn)算輸入、輸出數(shù)據(jù)數(shù)組重點(diǎn)和難點(diǎn)重點(diǎn):標(biāo)示符、Java語言的數(shù)據(jù)類型、數(shù)組難點(diǎn):基本數(shù)據(jù)類型的精度和數(shù)組§2.1標(biāo)識(shí)符與關(guān)鍵字
標(biāo)識(shí)符用來標(biāo)識(shí)類名、變量名、方法名、類型名、數(shù)組名、文件名的有效字符序列稱為標(biāo)識(shí)符,簡(jiǎn)單地說,標(biāo)識(shí)符就是一個(gè)名字。Java語言規(guī)定標(biāo)識(shí)符由字母、下劃線、美元符號(hào)和數(shù)字組成,長(zhǎng)度不受限制。標(biāo)識(shí)符的第一個(gè)字符不能是數(shù)字字符。標(biāo)識(shí)符不能是關(guān)鍵字(關(guān)鍵字見下面的2.1.3節(jié))。標(biāo)識(shí)符不能是true、false和null(盡管true、false和null不是關(guān)鍵字)。關(guān)鍵字關(guān)鍵字就是具有特定用途或被賦予特定意義的一些單詞,不可以把關(guān)鍵字作為標(biāo)識(shí)符來用。例如:boolean、byte、short、int、float、double、char、if、else等。關(guān)鍵字都是小寫的。遇到大寫肯定不是關(guān)鍵字?!?.2基本數(shù)據(jù)類型有8種基本數(shù)據(jù)類型:boolean、byte、short、int、long、float、double、char。8種基本數(shù)據(jù)類型習(xí)慣上可分為以下四大類型:邏輯類型:boolean整數(shù)類型:byte、short、int、long字符類型:char浮點(diǎn)類型:float、double
§2.2.1邏輯類型變量使用關(guān)鍵字boolean來聲明邏輯變量,聲明時(shí)也可以賦給初值。常量true、false例如:
booleanx,ok=true,關(guān)閉=false;§2.2.2整數(shù)類型int型變量:使用關(guān)鍵字int來聲明int型變量,聲明時(shí)也可以賦給初值.例如:intx=12,平均=9898,jiafei;常量:int型常量共有4種表示方法:
十進(jìn)制:123,6000(十進(jìn)制)
八進(jìn)制:077(八進(jìn)制,數(shù)字零做前綴)
十六進(jìn)制:0x3ABC(十六進(jìn)制,0x或0X做前綴)
二進(jìn)制
:0b111(用0b或0B做前綴)。
對(duì)于int型變量,分配給它的內(nèi)存是4個(gè)字節(jié)(byte),占32位.byte型
變量:使用關(guān)鍵字byte來聲明byte型變量.例如:bytex=-12,tom=28,漂亮=98;
常量:一定范圍內(nèi)的int型常量賦值給byte型變量.
對(duì)于byte型變量,分配給它的內(nèi)存是1個(gè)字節(jié),占8位.short型
變量:使用關(guān)鍵字short來聲明short型變量。例如:shortx=12,y=1234;
常量:和byte型類似,Java中也不存在short型常量的表示法,但可以把一定范圍內(nèi)的int型常量賦值給short型變量。對(duì)于short型變量,分配給它的內(nèi)存是2個(gè)字節(jié),占16位.long型
變量:使用關(guān)鍵字long來聲明long型變量。常量:long型常量用后綴L來表示,例如108L(十進(jìn)制)、07123L(八進(jìn)制)、0x3ABCL(十六進(jìn)制)。例如:longwidth=12L,height=2005L,length;對(duì)于long型變量,分配給它的內(nèi)存是8個(gè)字節(jié),占64位?!?.2.3字符類型char類型常量:‘A’,‘b’,‘?’,‘!’,‘9’,‘好’,‘\t’,‘き’,‘モ’等,即用單引號(hào)擴(kuò)起的Unicode表中的一個(gè)字符。
變量:使用關(guān)鍵字char來聲明char型變量,對(duì)于char型變量,分配給它的內(nèi)存是2個(gè)字節(jié),占16位例如:charch=‘A’,home=‘家’,handsome=‘酷’;
轉(zhuǎn)意字符常量:有些字符(如回車符)不能通過鍵盤輸入到字符串或程序中,就需要使用轉(zhuǎn)意字符常量,
例如:\n(換行),\b(退格),\t(水平制表),\‘(單引號(hào)),\“(雙引號(hào)),\\(反斜線)等。Java語言使用Unicode標(biāo)準(zhǔn)字符集,最多可以識(shí)別65536個(gè)字符.例子例子1§2.2.4浮點(diǎn)類型float型常量:453.54F(小數(shù)表示法),2e40f(2乘10的40次方,指數(shù)表示法).變量:使用關(guān)鍵字float來聲明float型變量,例如:floatx=22.76f,tom=1234.987f,weight=1e-12F;
精度:float變量在存儲(chǔ)時(shí)保留7~8位有效數(shù)字。實(shí)際精度取決于具體數(shù)值。對(duì)于float型變量,分配給它的內(nèi)存是4個(gè)字節(jié),占32位。
需要特別注意的是float常量后面必須要有后綴f或F?!?.2.4浮點(diǎn)類型double型常量:238.539d,231.987(小數(shù)表示法),1e-90(1乘10的-90次方,指數(shù)表示法).對(duì)于double常量,后綴有“d”或“D”,但允許省略后綴.變量:使用關(guān)鍵字double來聲明double型變量,例如:doubleheight=23.345,width=34.56D,length=1e12;
對(duì)于double型變量,分配給它的內(nèi)存是8個(gè)字節(jié),占64位。精度:double變量在存儲(chǔ)double型數(shù)據(jù)時(shí)保留15~16位有效數(shù)字,實(shí)際精度取決于具體數(shù)值。特別注意一個(gè)具有小數(shù)部分的數(shù)據(jù)的缺省類型是double而不是float。所以float常量后面必須要有后綴“f”或“F”。§2.3類型轉(zhuǎn)換運(yùn)算Java中數(shù)據(jù)的基本類型(不包括邏輯類型)按精度從“低”到“高”排列:byteshortcharintlongfloatdouble
規(guī)則:當(dāng)把級(jí)別低的變量的值賦給級(jí)別高的變量時(shí),系統(tǒng)自動(dòng)完成數(shù)據(jù)類型的轉(zhuǎn)換。例如:floatx=100;
當(dāng)把級(jí)別高的變量的值賦給級(jí)別低的變量時(shí),必須使用顯示類型轉(zhuǎn)換運(yùn)算。顯示轉(zhuǎn)換的格式:(類型名)要轉(zhuǎn)換的值;例如:intx=(int)34.89;當(dāng)把一個(gè)int型常量賦值給一個(gè)byte和short型變量時(shí),不可以超出這些變量的取值范圍,否則必須進(jìn)行類型轉(zhuǎn)換運(yùn)算;
例如:
byteb=128;(error)byteb=(byte)128(ok)下面的例子2使用了類型轉(zhuǎn)換運(yùn)算,運(yùn)行效果如圖2.2。
例子2例題§2.4輸入、輸出數(shù)據(jù)_12.4.1輸入基本型數(shù)據(jù)可以使用Scanner類創(chuàng)建一個(gè)對(duì)象:
Scannerreader=newScanner(System.in); 其中:reader對(duì)象調(diào)用下列方法,讀取用戶在命令行輸入的各種基本類型數(shù)據(jù):
nextBoolean()、nextByte()、nextShort()、nextInt()、 nextLong()、nextFloat()、nextDouble()。上述方法執(zhí)行時(shí)都會(huì)堵塞,程序等待用戶在命令行輸入數(shù)據(jù)回車確認(rèn)。reader對(duì)象用空白做分隔標(biāo)記,讀取當(dāng)前程序的鍵盤緩沖區(qū)中的“單詞”。reader對(duì)象每次調(diào)用上述某方法都試圖返回鍵盤緩沖區(qū)中的下一個(gè)“單詞”,并把每個(gè)“單詞”看作是方法要返回的數(shù)據(jù),如果“單詞”符合方法的返回類型要求,就返回該數(shù)據(jù),否則將觸發(fā)讀取數(shù)據(jù)異常。例題例子3中,用戶用空格或回車做分隔,輸入若干個(gè)數(shù)最后輸入數(shù)字0并按回車結(jié)束輸入操作,程序?qū)⒂?jì)算出這些數(shù)的和。
例子3§2.4輸入、輸出數(shù)據(jù)_22.4.2輸出基本型數(shù)據(jù)
java使用System類中的方法實(shí)現(xiàn)數(shù)據(jù)輸出
例如:System.out.println()或System.out.print()輸出串值,表達(dá)式的值。二者的區(qū)別是前者輸出數(shù)據(jù)后換行,后者不換行。如:System.out.println(m+"個(gè)數(shù)的和為"+sum);System.out.println(":"+123+"大于"+122);如果需要輸出的字符串的長(zhǎng)度較長(zhǎng),可以將字符串分解成幾部分,然后使用并置符號(hào):“+”將它們首尾相接,例如:System.out.println("你好,"+"很高興認(rèn)識(shí)你");§2.4輸入、輸出數(shù)據(jù)_2續(xù)JDK1.5新增了和C語言中printf函數(shù)類似的輸出數(shù)據(jù)的方法,格式如下:
System.out.printf("格式控制部分",表達(dá)式1,表達(dá)式2,…表達(dá)式n)格式控制部分由格式控制符號(hào):%d、%c、%f、%s和普通的字符組成,普通字符原樣輸出。格式符號(hào)用來輸出表達(dá)式的值。%d輸出int類型數(shù)據(jù)值;%c輸出char型數(shù)據(jù);%f輸出浮點(diǎn)型數(shù)據(jù),小數(shù)部分最多保留6位;%s輸出字符串?dāng)?shù)據(jù)。輸出數(shù)據(jù)時(shí)也可以控制數(shù)據(jù)在命令行的位置,例如:%md輸出的int型數(shù)據(jù)占m列;%m.nf輸出的浮點(diǎn)型數(shù)據(jù)占m列,小數(shù)點(diǎn)保留n位。例如:System.out.printf("%d,%f",12,23.78);§2.5數(shù)組數(shù)組是相同類型的數(shù)據(jù)按順序組成的一種復(fù)合數(shù)據(jù)類型。通過數(shù)組名加數(shù)組下標(biāo),來使用數(shù)組中的數(shù)據(jù)。下標(biāo)從0開始排序。2.5.1聲明數(shù)組聲明一維數(shù)組有下列兩種格式:數(shù)組的元素類型數(shù)組名[];數(shù)組的元素類型[]數(shù)組名;
例如:floatboy[];char[]cat;
聲明二維數(shù)組有下列兩種格式:數(shù)組的元素類型數(shù)組名[][];數(shù)組的元素類型[][]數(shù)組名;
例如:floata[][];Char[][]b;2.5.2為數(shù)組分配元素空間為數(shù)組分配元素的格式如下:數(shù)組名=new數(shù)組元素的類型[數(shù)組元素的個(gè)數(shù)];
例如:boy=newfloat[4];說明:數(shù)組屬于引用型變量,數(shù)組變量中存放著數(shù)組的首元素的地址,通過數(shù)組變量的名字加索引使用數(shù)組的元素(內(nèi)存示意如圖2.4所示).比如:boy[0]=12;boy[1]=23.908F;boy[2]=100;boy[3]=10.23f;注意:數(shù)組的聲明和分配空間可以在聲明時(shí)同時(shí)完成:
floatboy[]=newfloat[4];2.5.3數(shù)組元素的使用數(shù)組元素的使用一維數(shù)組通過索引(下標(biāo)運(yùn)算)符訪問自己的元素。如:boy[0],boy[1]等.需要注意的是索引從0開始,因此,數(shù)組若有4個(gè)元素,那么索引到3為止,如果程序使用了如下語句:
boy[4]=384.98f;程序可以編譯通過,但運(yùn)行時(shí)將發(fā)生ArrayIndexOutOfBoundsException異常,因此在使用數(shù)組時(shí)必須謹(jǐn)慎,防止索引越界。注意下標(biāo)2.5.4length的使用length字段的使用對(duì)于一維數(shù)組,“數(shù)組名.length”的值就是數(shù)組中元素的個(gè)數(shù);對(duì)于二維數(shù)組“數(shù)組名.length”的值是它含有的一維數(shù)組的個(gè)數(shù)例如:floatboy[]=newfloat[4];
boy.length的值為4.int[][]a=newint[3][8];a.length的值是3.a[0].length的值是8a[1].length的值是8a[2].length的值是82.5.5數(shù)組的初始化數(shù)組初始化創(chuàng)建數(shù)組后,系統(tǒng)會(huì)給數(shù)組的每個(gè)元素一個(gè)默認(rèn)的值例如,float型是0.0。如果需要賦值,就要為每個(gè)元素賦值:例如:
floatboy[]=newfloat[4];
boy[0]=12;boy[1]=23.908F;boy[2]=100;boy[3]=10.23f;在聲明數(shù)組的同時(shí)也可以給數(shù)組的元素一個(gè)初始值,如:
floatboy[]={21.3f,23.89f,2.0f,23f,778.98f};2.5.6數(shù)組的引用數(shù)組的引用數(shù)組屬于引用型變量,兩個(gè)相同類型的數(shù)組如果具有相同的引用,它們就有完全相同的元素。.下面的例子4使用了數(shù)組,請(qǐng)讀者注意程序的輸出結(jié)果,運(yùn)行效果如圖2.7。例子4
數(shù)組屬于引用型變量,兩個(gè)相同類型的數(shù)組如果具有相同的引用,它們就有完全相同的元素。重要結(jié)論對(duì)于inta[]={1,2,3},b[]={4,5};數(shù)組變量a和b分別存放著引用de6ced和c17164,內(nèi)存模型如圖2.5所示進(jìn)行賦值a=b;那么,a中存放的引用和b的相同,這時(shí)系統(tǒng)將釋放最初分配給數(shù)組a的元素,使得a的元素和b的元素相同,a、b的內(nèi)存模型變成如圖2.6所示?!?.6應(yīng)用舉例折半法:對(duì)于從小到大排序的數(shù)組,我們只要判斷數(shù)據(jù)是否和數(shù)組中間的值相等,如果不相等,當(dāng)該數(shù)據(jù)小于數(shù)組中間元素的值,就在數(shù)組的前一半數(shù)據(jù)中繼續(xù)折半找,否則就在數(shù)組的后一半數(shù)據(jù)中繼續(xù)折半找,如此這般,就可以比較快地判斷該數(shù)據(jù)是否在數(shù)組中。
例子5能判斷用戶輸入的一個(gè)整數(shù)是否在已知的數(shù)組中。例子5
總結(jié)1標(biāo)識(shí)符由字母、下劃線、美元符號(hào)和數(shù)字組成,并且第一個(gè)字符不能是數(shù)字字符(關(guān)鍵字不能做標(biāo)識(shí)符).Java語言有8種基本數(shù)據(jù)類型(booleanbyteshortcharintlongfloatdouble)3數(shù)組是相同類型的數(shù)據(jù)元素按順序組成的一種復(fù)合數(shù)據(jù)類型,數(shù)組屬于引用型變量.4兩個(gè)相同類型的數(shù)組如果具有相同的引用,它們就有完全相同的元素。作業(yè)按時(shí)完成老師布置的作業(yè)額。教材提供了題庫練習(xí)系統(tǒng)(見前言二維碼)。本章結(jié)束ThankYou!第3章
運(yùn)算符、表達(dá)式和語句
配合例子源代碼一起使用課件制作人張躍平導(dǎo)讀主要內(nèi)容運(yùn)算符與表達(dá)式語句概述if條件分支語句switch開關(guān)語句循環(huán)語句break和continue語句數(shù)組與for語句重點(diǎn)和難點(diǎn)重點(diǎn):運(yùn)算符、表達(dá)式和各種控制語句難點(diǎn):各種控制語句用法§3.1運(yùn)算符與表達(dá)式Java提供了豐富的運(yùn)算符,如算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符等。Java語言中的絕大多數(shù)運(yùn)算符和C語言相同,基本語句,如條件分支語句、循環(huán)語句等也和C語言類似,因此,本章就主要知識(shí)點(diǎn)給予簡(jiǎn)單的介紹?!?.1.1算術(shù)運(yùn)算符與算術(shù)表達(dá)式加減運(yùn)算符:+,-加減運(yùn)算符是二目運(yùn)算符;加減運(yùn)算符的結(jié)合方向是從左到右;加減運(yùn)算符的操作元是整型或浮點(diǎn)型數(shù)據(jù),加減運(yùn)算符的優(yōu)先級(jí)是4級(jí)。乘、除和求余運(yùn)算符:*/%以上運(yùn)算符是二目運(yùn)算符,結(jié)合方向是從左到右,乘、除和求余運(yùn)算符的操作元是整型或浮點(diǎn)型數(shù)據(jù)。運(yùn)算符的優(yōu)先級(jí)是3級(jí)。算術(shù)表達(dá)式用算術(shù)符號(hào)和括號(hào)連接起來的符合java語法規(guī)則的式子,稱為算術(shù)表達(dá)式。 如:x+2*y-30+3*(y+5)§3.1.2自增,自減運(yùn)算符自增、自減運(yùn)算符:++,--單目運(yùn)算符,可以放在操作元之前,也可以放在操作元之后。操作元必須是一個(gè)整型或浮點(diǎn)型變量。作用是使變量的值增1或減1,如:++x(--x)表示在使用x之前,先使x的值增(減)1。x++(x--)表示在使用x之后,使x的值增(減)1。
例如:intf=2;intm=2;intx=(f*m++)+m;//x=7;inty=(f*++m)+m;//y=9;§3.1.3算術(shù)混合運(yùn)算的精度java中數(shù)據(jù)類型的精度從“低”到“高”排列的順序是:
byteshortcharintlongfloatdoubleJava在計(jì)算算術(shù)表達(dá)式的值時(shí),使用下列計(jì)算精度規(guī)則:如果表達(dá)式中有雙精度浮點(diǎn)數(shù)(double型數(shù)據(jù)),則按雙精度進(jìn)行運(yùn)算.如果表達(dá)式中最高精度是單精度浮點(diǎn)數(shù)(float型數(shù)據(jù)),則按單精度進(jìn)行運(yùn)算.如果表達(dá)式中最高精度是long型整數(shù),則按long精度進(jìn)行運(yùn)算.如果表達(dá)式中最高精度低于int型整數(shù),則按int精度進(jìn)行運(yùn)算.char型數(shù)據(jù)和整型數(shù)據(jù)運(yùn)算結(jié)果的精度是int。例如:5/2的結(jié)果是2,要想得到2.5,必須寫成5.0/2或5.0f/2。例如:bytex=7;
則執(zhí)行表達(dá)式‘B’+x;的結(jié)果是int型。§3.1.3算術(shù)混合運(yùn)算的精度Java允許把不超出byte、short和char的取值范圍的常量算術(shù)表達(dá)式的值賦給byte、short和char型變量。例如,(byte)30+‘a(chǎn)’是結(jié)果為127的int型常量。特別注意的是當(dāng)表達(dá)式中有變量時(shí),編譯只檢查變量的類型,不檢查變量中的值,型,例如,bytex=97+1;bytey=1;都是正確的,但是,bytez=97+y是錯(cuò)誤的,其原因是編譯器不檢查表達(dá)式97+y中變量y的值,只檢查y的類型,并認(rèn)為表達(dá)式的結(jié)果是int型精度。所以,對(duì)于bytez=97+y;編譯器會(huì)提示“不兼容的類型:從int轉(zhuǎn)換到byte可能會(huì)有損失”的信息§3.1.4關(guān)系運(yùn)算符與關(guān)系表達(dá)式關(guān)系運(yùn)算符:>,<,>=,<=,==,!=特點(diǎn):關(guān)系運(yùn)算符是二目運(yùn)算符,用來比較兩個(gè)值的關(guān)系,見表4.1。關(guān)系運(yùn)算符的運(yùn)算結(jié)果是boolean型,當(dāng)運(yùn)算符對(duì)應(yīng)的關(guān)系成立時(shí),運(yùn)算結(jié)果是true,否則是false。運(yùn)算規(guī)則:在關(guān)系運(yùn)算符中,當(dāng)操作數(shù)是基本數(shù)據(jù)類型時(shí),比較的是數(shù)據(jù)內(nèi)容;在關(guān)系運(yùn)算符中,當(dāng)操作數(shù)是引用類型時(shí),比較的是引用對(duì)象的引用值,判斷是否是同一對(duì)象,而沒有比較對(duì)象的內(nèi)容。如,4>8,(x+y)>80?!?.1.5邏輯運(yùn)算符與邏輯表達(dá)式邏輯運(yùn)算符包括:&&、||、!其中:&&、||為二目運(yùn)算符,實(shí)現(xiàn)邏輯與、邏輯或;!為單目運(yùn)算符,實(shí)現(xiàn)邏輯非。規(guī)則:邏輯運(yùn)算符的操作元必須是boolean型數(shù)據(jù),邏輯運(yùn)算符可以用來連接關(guān)系表達(dá)式,見表4.2。&&,||也稱短路運(yùn)算符當(dāng)前面的表達(dá)式op1的值為false時(shí),&&運(yùn)算符在運(yùn)算時(shí)就不再去計(jì)算op2表達(dá)式的值;當(dāng)op1為true時(shí),||運(yùn)算符就不再計(jì)算op2的值。(op1&&op2;op1||op2)。x的值0,但注意y的值仍然是10classTest{
publicstaticvoidmain(Stringargs[]){intx=10,y=10;if(
((x=0)==0)||((y=20)==20)
){System.out.println("現(xiàn)在x的值是:"+x);System.out.println("現(xiàn)在y的值是:"+y);}}}§3.1.6賦值運(yùn)算符與賦值表達(dá)式賦值運(yùn)算符:=賦值運(yùn)算符是二目運(yùn)算符,左面的操作元必須是變量,不能是常量或表達(dá)式。賦值運(yùn)算符的優(yōu)先級(jí)較低,是14級(jí),結(jié)合方向右到左。賦值表達(dá)式的值就是“=”左面變量的值。注意:不要將賦值運(yùn)算符“=”與等號(hào)邏輯運(yùn)算符“==”混淆。例如:x=20;b=true;§3.1.7位運(yùn)算符位運(yùn)算符:是指對(duì)兩個(gè)整型數(shù)據(jù)按照對(duì)應(yīng)的位進(jìn)行運(yùn)算,結(jié)果為新的整型數(shù)據(jù)?!鞍次慌c”運(yùn)算“&”是雙目運(yùn)算符。運(yùn)算法則是:如果a,b兩個(gè)數(shù)據(jù)對(duì)應(yīng)位都是1,則c的該位是1,否則是0?!鞍次换颉边\(yùn)算“|”是雙目運(yùn)算符。運(yùn)算法則是:如果a,b兩個(gè)數(shù)據(jù)對(duì)應(yīng)位都是0,則c的該位是0,否則是1?!鞍次环恰边\(yùn)算“~”是單目運(yùn)算符。運(yùn)算法則是:如果a對(duì)應(yīng)位都是0,則c的該位是1,否則是1。“按位異或”運(yùn)算“^”是雙目運(yùn)算符。運(yùn)算法則是:如果a,b兩個(gè)數(shù)據(jù)對(duì)應(yīng)位相同,則c的該位是0,否則是1。例題例子1中利用“異或”運(yùn)算的性質(zhì),對(duì)幾個(gè)字符進(jìn)行加密并輸出密文,然后再解密。例子1classExample3_1{publicstaticvoidmain(Stringargs[]){chara1='十',a2='點(diǎn)',a3='進(jìn)',a4='攻';charsecret='8';a1=(char)(a1^secret);a2=(char)(a2^secret);a3=(char)(a3^secret);a4=(char)(a4^secret);System.out.println("密文:"+a1+a2+a3+a4);a1=(char)(a1^secret);a2=(char)(a2^secret);a3=(char)(a3^secret);a4=(char)(a4^secret);System.out.println("原文:"+a1+a2+a3+a4);}}§3.1.8instanceof運(yùn)算符instanceof運(yùn)算符是二目運(yùn)算符,左面的操作元是一個(gè)對(duì)象;右面是一個(gè)類。當(dāng)左面的對(duì)象是右面的類或子類創(chuàng)建的對(duì)象時(shí),該運(yùn)算符運(yùn)算的結(jié)果是true,否則是false。例如:classTest{publicstaticvoidmain(Stringargv[]){Strings=newString("abc");if(sinstanceofString)System.out.println("s是String對(duì)象");Testb=newTest();if(binstanceofTest)System.out.println("bTest對(duì)象");}}§3.1.9運(yùn)算符綜述Java的表達(dá)式就是用運(yùn)算符連接起來的符合Java規(guī)則的式子。運(yùn)算符的優(yōu)先級(jí)決定了表達(dá)式中運(yùn)算執(zhí)行的先后順序。在編寫程序時(shí)盡量使用括號(hào)()運(yùn)算符號(hào)來實(shí)現(xiàn)想要的運(yùn)算次序,以免產(chǎn)生難以閱讀或含糊不清的計(jì)算順序。運(yùn)算符的結(jié)合性決定了具有相同級(jí)別運(yùn)算符的先后順序。§3.2語句概述Java里的語句可分為以下六類方法調(diào)用語句:如:System.out.println("Hello");表達(dá)式語句:表示式尾加上分號(hào)。比如賦值語句:x=23;復(fù)合語句:可以用{}把一些語句括起來構(gòu)成復(fù)合語句,如:{z=123+x;System.out.println("Howareyou");}空語句:一個(gè)分號(hào)也是一條語句,稱做空語句??刂普Z句:控制語句分為條件分支語句、開關(guān)語句和循環(huán)語句。package語句和import語句:它們和類、對(duì)象有關(guān),將在第4章講解?!?.3if條件分支語句條件分支語句按著語法格式可細(xì)分為三種形式:
if語句if-else語句if-elseif-……-elseif-else語句§3.3.1if語句if語句是單條件分支語句,即根據(jù)一個(gè)條件來控制程序執(zhí)行的流程(如圖3.2)。if語句的語法格式:if(表達(dá)式){若干語句}
注:表達(dá)式的值必須是boolean型的;不能用0代表false;用1代表true;例題例子2publicclassExample3_2{publicstaticvoidmain(Stringargs[]){inta=9,b=5,c=7,t=0;if(b<a){t=a;a=b;b=t;}if(c<a){t=a;a=c;c=t;}if(c<b){t=b;b=c;c=t;}System.out.println("a="+a+",b="+b+",c="+c);}}例子2將變量a,b,c內(nèi)存中的數(shù)值按大小順序進(jìn)行互換(從小到大排列)。
§3.3.2if-else語句if-else語句是雙條件分支語句,即根據(jù)一個(gè)條件來控制程序執(zhí)行的流程。if-else語句的語法格式:
if(表達(dá)式){若干語句}else{若干語句}例題例子3中有兩條if-else語句,其作用是根據(jù)成績(jī)輸出相應(yīng)的信息,運(yùn)行效果如圖3.4。例子3§3.3.3if-elseif-else語句if-elseif語句是多條件分支語句,即根據(jù)多個(gè)條件來控制程序執(zhí)行的流程。if-elseif-else語句的語法格式:if(表達(dá)式){若干語句}elseif(表達(dá)式){若干語句}……else{若干語句}多分支流程示意圖§3.4switch開關(guān)語句switch語句是單條件多分支的開關(guān)語句它的一般格式定義如下(其中break語句是可選的):switch(表達(dá)式){
case常量值1:若干個(gè)語句
break;case常量值2:若干個(gè)語句
break;...case常量值n:
若干個(gè)語句
break;default:
若干語句}說明:1)表達(dá)式的值可以是:byte,short,int,char或String,但不可以是long型的2)根據(jù)需要設(shè)置break語句,否則,就會(huì)匹配顯示從匹配的常量值到最后。3)default語句放的位置是任意的。4)檢查時(shí)case常量必須與switch表達(dá)式可用的類型相同。
例子4使用了switch語句判斷用戶從鍵盤輸入的正整數(shù)是否為中獎(jiǎng)號(hào)碼。
例子4§3.5.1for循環(huán)語句for語句的語法格式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3){若干語句}
for語句的執(zhí)行規(guī)則是:(1)計(jì)算“表達(dá)式1”,完成必要的初始化工作。(2)判斷“表達(dá)式2”的值,若“表達(dá)式2”的值為true,則進(jìn)行(3),否則進(jìn)行(4)。(3)執(zhí)行循環(huán)體,然后計(jì)算“表達(dá)式3”,以便改變循環(huán)條件,進(jìn)行(2)。(4)結(jié)束for語句的執(zhí)行?!?.5循環(huán)語句例題例子5:計(jì)算8+88+888+8888……的前12項(xiàng)和。publicclassExample3_5{publicstaticvoidmain(Stringargs[]){longsum=0,a=8,item=a,n=12,i=1;
for(i=1;i<=n;i++){sum=sum+item;item=item*10+a;}System.out.println(sum);}}例子5§3.5.2while循環(huán)while語句的語法格式:while(表達(dá)式){若干語句}
while語句的執(zhí)行規(guī)則是:(1)計(jì)算表達(dá)式的值,如果該值是true時(shí),就進(jìn)行(2),否則執(zhí)行(3)。(2)執(zhí)行循環(huán)體,再進(jìn)行(1)。(3)結(jié)束while語句的執(zhí)行。
§3.5.3do-while循環(huán)do-while語句的語法格式:
do{若干語句}while(表達(dá)式);
do-
while語句的執(zhí)行規(guī)則是:(1)執(zhí)行循環(huán)體,再進(jìn)行(2)。(2)計(jì)算表達(dá)式的值,如果該值是true時(shí),就進(jìn)行(1),否則執(zhí)行(3)。(3)結(jié)束while語句的執(zhí)行。
例題例子6用while語句計(jì)算1+1/2!+1/3!+1/4!…的前20項(xiàng)例子6publicclassExample3_6{publicstaticvoidmain(Stringargs[]){doublesum=0,item=1;inti=1,n=20;
while(i<=n){sum=sum+item;i=i+1;item=item*(1.0/i);}System.out.println("sum="+sum);}}§3.6break和continue語句break和continue語句是用關(guān)鍵break或continue加上分號(hào)構(gòu)成的語句。在循環(huán)體中可以使用break語句和continue語句。如果在某次循環(huán)中執(zhí)行了break語句,那么整個(gè)循環(huán)語句就結(jié)束。如果在某次循環(huán)中執(zhí)行了continue語句,那么本次循環(huán)就結(jié)束,即不再執(zhí)行本次循環(huán)中循環(huán)體中continue語句后面的語句,而轉(zhuǎn)入進(jìn)行下一次循環(huán)。
例題例子7使用了continue和break語句,計(jì)算1+3+5…輸出50內(nèi)的素?cái)?shù).例子7publicclassExample3_7{publicstaticvoidmain(Stringargs[]){intsum=0,i,j;for(i=1;i<=10;i++){if(i%2==0){//計(jì)算1+3+5+7+9continue;}sum=sum+i;}System.out.println("sum="+sum);for(j=2;j<=50;j++){//求素?cái)?shù)for(i=2;i*i<=j;i++){if(j%i==0)break;}if(i*i>j){System.out.println(""+j+"是素?cái)?shù)");}}}}§3.7for語句與數(shù)組JDK1.5后,對(duì)for語句的功能給予擴(kuò)充、增強(qiáng),以便更好地遍歷數(shù)組。語法格式如下:for(聲明循環(huán)變量:數(shù)組的名字){
……}其中,聲明的循環(huán)變量的類型必須和數(shù)組的類型相同。這種形式的for語句類似自然語言中的“foreach”語句,為了便于理解上述for語句,可以將這種形式的for語句翻譯成“對(duì)于循環(huán)變量依次取數(shù)組的每一個(gè)元素的值”。例題例子8分別使用for語句的傳統(tǒng)方式和改進(jìn)方式遍歷數(shù)組。例子8publicclassExample3_8{publicstaticvoidmain(Stringargs[]){inta[]={1,2,3,4};charb[]={'a','b','c','d'};for(intn=0;n<a.length;n++){//傳統(tǒng)方式
System.out.println(a[n]);}
for(intn=0;n<b.length;n++){//傳統(tǒng)方式
System.out.println(b[n]);}
for(inti:a){//循環(huán)變量i依次取數(shù)組a的每一個(gè)元素的值(改進(jìn)方式)
System.out.println(i);}for(charch:b){//循環(huán)變量ch依次取數(shù)組b的每一個(gè)元素的值(改進(jìn)方式)
System.out.println(ch);}}}3.8應(yīng)用舉例例子9中,用戶在鍵盤依次輸入若干個(gè)數(shù)字,每輸入一個(gè)數(shù)字都需要按回車鍵確認(rèn),最后在鍵盤輸入一個(gè)非數(shù)字字符串結(jié)束整個(gè)輸入操作過程。程序?qū)⒂?jì)算出這些數(shù)的和以及平均值。效果如圖3.9所示。在從鍵盤輸入數(shù)據(jù)時(shí),經(jīng)常讓reader對(duì)象先調(diào)用hasNextXXX()方法等待用戶在鍵盤輸入數(shù)據(jù),然后再調(diào)用nextXXX()方法獲取用戶輸入的數(shù)據(jù)。例子9總結(jié)1Java提供了豐富的運(yùn)算符,學(xué)會(huì)各種運(yùn)算符的使用.2Java語言控制語句分為條件控制語句和循環(huán)控制語句.3Java提供了遍歷數(shù)組的循環(huán)語句.作業(yè)按時(shí)完成老師布置的作業(yè)額。教材提供了題庫練習(xí)系統(tǒng)(見前言二維碼)。本章結(jié)束ThankYou!第4章類與對(duì)象導(dǎo)讀主要內(nèi)容類構(gòu)造方法與對(duì)象的創(chuàng)建類與程序的基本結(jié)構(gòu)參數(shù)傳值對(duì)象的組合實(shí)例成員與類成員方法重載this關(guān)鍵字包import語句對(duì)象數(shù)組重點(diǎn)和難點(diǎn)Java類的語法規(guī)則、類變量和實(shí)例變量、import語句對(duì)象的創(chuàng)建過程,對(duì)象引用與實(shí)體的關(guān)系、訪問權(quán)限的理解
§4.1編程語言的幾個(gè)發(fā)展階段4.1.1面向機(jī)器語言
計(jì)算機(jī)處理信息的早期語言是所謂的機(jī)器語言,使用機(jī)器語言進(jìn)行程序設(shè)計(jì)需要面向機(jī)器來編寫代碼,即需要針對(duì)不同的機(jī)器編寫諸如01011100這樣的指令序列。
4.1.2面向過程語言
隨著計(jì)算機(jī)硬件功能的提高,在20世紀(jì)60年代出現(xiàn)了面向過程設(shè)計(jì)語言,如C語言等。用這些語言編程也稱為面向過程編程。語言把代碼組成叫做過程或函數(shù)的塊。每個(gè)塊的目標(biāo)是完成某個(gè)任務(wù)。使用這些語言編寫代碼指令時(shí),不必再去考慮機(jī)器指令的細(xì)節(jié),只要按著具體語言的語法要求去編寫“源文件”。4.1.3面向?qū)ο笳Z言
基于對(duì)象的編程更加符合人的思維模式,使得編程人員更容易編寫出易維護(hù)、易擴(kuò)展和易復(fù)用的程序代碼,更重要的是,面向?qū)ο缶幊坦膭?lì)創(chuàng)造性的程序設(shè)計(jì)。面向?qū)ο缶幊讨饕w現(xiàn)下列三個(gè)特性:封裝性;繼承;多態(tài)理念的改變C語言中的函數(shù),代碼塊是程序執(zhí)行時(shí)產(chǎn)生的一種行為,但是面向過程語言卻沒有為這種行為指定“主體”,即在程序運(yùn)行期間,無法說明到底是“誰”具有這個(gè)行為、并負(fù)責(zé)執(zhí)行了這個(gè)行為。也就是說,面向過程語言缺少了一個(gè)最本質(zhì)的概念,那就是“對(duì)象”(就好像生活中說話沒主語)在面向?qū)ο笳Z言中,最核心的內(nèi)容就是“對(duì)象”,一切圍繞著對(duì)象,比如,編寫一個(gè)“剎車”方法(面向過程稱之為函數(shù)),那么一定會(huì)指定該方法的“主體”,比如,某個(gè)汽車擁有這樣的“剎車”方法,則該汽車負(fù)責(zé)執(zhí)行“剎車”方法產(chǎn)生相應(yīng)的行為(說話有主語:奔馳車剎車了)。學(xué)習(xí)面向?qū)ο笳Z言的過程中,一個(gè)簡(jiǎn)單的理念就是:需要完成某種任務(wù)時(shí),首先要想到,誰去完成任務(wù),即哪個(gè)對(duì)象去完成任務(wù);提到數(shù)據(jù),首先想到這個(gè)數(shù)據(jù)是哪個(gè)對(duì)象的。§4.2類Java語言是面向?qū)ο笳Z言,它的源程序是由若干個(gè)類組成,源文件是擴(kuò)展名為.java的文本文件。類是Java語言中最重要的“數(shù)據(jù)類型”,類聲明的變量被稱作對(duì)象(見后面的4.3節(jié)),即類是用來創(chuàng)建對(duì)象的模板。類的實(shí)現(xiàn)包括兩部分:類聲明和類體?;靖袷綖椋篶lass類名{類體的內(nèi)容}
其中:class是關(guān)鍵字,用來定義類?!癱lass類名”是類的聲明部分,類名必須是合法的Java標(biāo)識(shí)符。兩個(gè)大括號(hào)以及之間的內(nèi)容是類體。§4.2.1類聲明寫類的目的是為了描述一類事物共有的屬性和功能。類聲明:class類名以下是兩個(gè)類聲明的例子。
classPeople{…
}class植物{…}如:classPeople”和“class植物”稱作類聲明;“People”和“動(dòng)物”分別是類名。給類命名時(shí),遵守下列編程風(fēng)格(這不是語法要求,但應(yīng)當(dāng)遵守):1.如果類名使用拉丁字母,那么名字的首字母使用大寫字母。2.類名最好容易識(shí)別、見名知意。當(dāng)類名由幾個(gè)“單詞”復(fù)合而成時(shí),每個(gè)單詞的首字母使用大寫。
§4.2.2類體類聲明之后的一對(duì)大括號(hào)“{”,“}”以及它們之間的內(nèi)容稱作類體,大括號(hào)之間的內(nèi)容稱作類體的內(nèi)容。類體的內(nèi)容由兩部分構(gòu):一部分是變量的聲明,用來刻畫屬性;另一部分是方法的定義,用來刻畫行為功能。classLadder{
floatabove;//梯形的上底(變量聲明)
floatbottom;//梯形的下底(變量聲明)floatheight;//梯形的高(變量聲明)
floatarea;//梯形的面積(變量聲明)
floatcomputerArea(){//計(jì)算面積(方法)
area=(above+bottom)*height/2.0f;returnarea;}voidsetHeight(floath){//修改高(方法)
height=h;}}§4.2.3成員變量類體中的內(nèi)容可分為兩部分:一部分是變量的聲明;另一部分是方法的定義。聲明變量部分所聲明的變量被稱為成員變量或域變量。①成員變量的類型可以是Java中的任何一種數(shù)據(jù)類型,包括基本類型:整型、浮點(diǎn)型、字符型、邏輯類型;引用類型:數(shù)組、對(duì)象和接口。②成員變量在整個(gè)類內(nèi)的所有方法里都有效,其有效性與它在類體中出現(xiàn)
的位置
無關(guān)。③聲明成員變量時(shí)如果沒有指定初始值,Java編譯器會(huì)為其指定默認(rèn)值。④聲明成員變量bottom指定的初始值和above的值有關(guān),那么聲明成員變量above的位置要在聲明成員變量bottom的前面。例題定義梯形類如下:classLader{floatabove,area;floatcomputerArea(){area=(above+bottom)*height/2;returnarea;}
floatbottom;voidsetHeight(floath){height=h;
}
floatheight;}§4.2.4方法方法的定義包括兩部分:方法聲明和方法體.一般格式為:
方法聲明部分{
方法體的內(nèi)容}1.方法聲明部分(方法頭)方法頭由方法的類型、名稱和名稱之后的一對(duì)小括號(hào)以及其中的參數(shù)列表所構(gòu)成。例如:intspeak(){//無參數(shù)的方法頭return23;}intadd(intx,inty,intz)//有參數(shù)的方法頭{returnx+y+z;}注意:方法返回的數(shù)據(jù)類型可以是Java中的任何數(shù)據(jù)類型之一,當(dāng)一個(gè)方法(非構(gòu)造方法,見后續(xù))不需要返回?cái)?shù)據(jù)時(shí),返回類型必須是void?!?.2.4方法2.方法體方法聲明之后的一對(duì)大括號(hào)“{”,“}”以及之間的內(nèi)容稱為方法的方法體.方法體的內(nèi)容包括局部變量的聲明和Java語句。如:intgetSum(intn){//參數(shù)變量n是局部變量
intsum=0;//聲明局部變量sumfor(inti=1;i<=n;i++){//for循環(huán)語句
sum=sum+i;}returnsum;//return語句}和類的成員變量不同的是,局部變量只在方法內(nèi)有效,而且與其聲明的位置有關(guān)。方法的參數(shù)在整個(gè)方法內(nèi)有效,方法內(nèi)的局部變量從聲明它的位置之后開始有效。如果局部變量的聲明是在一個(gè)復(fù)合語句中,那么該局部變量的有效范圍是該復(fù)合語句。如果局部變量的聲明是在一個(gè)循環(huán)語句中,那么該局部變量的有效范圍是該循環(huán)語句。請(qǐng)看下例:3.區(qū)分成員變量和局部變量
如果局部變量的名字與成員變量的名字相同,則成員變量被隱藏,即該成員變量在這個(gè)方法內(nèi)暫時(shí)失效。例如:如果想在該方法中使用被隱藏的成員變量,必須使用關(guān)鍵字this(在4.9節(jié)this關(guān)鍵字)
classTom{intx=10,y;voidf(){intx=5;y=x+this.x;//y得到的值是15}}classTom{
intx=10,y;voidf(){
intx=5;y=x+x;//y得到的值是10,不是20。
//如果方法f中沒有“intx=5;”,y的值將是20}}4.局部變量沒有默認(rèn)值
成員變量有默認(rèn)值(見4.2.3節(jié)),但局部變量沒有默認(rèn)值,因此在使用局部變量之前,必須保證局部變量有具體的值。例如:下列InitError類無法通過編譯。例如:classInitError{
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 35267.5-2025清洗消毒器第5部分:清潔效果的性能要求和測(cè)試方法
- JJF 2364-2026放電離子化氣相色譜儀校準(zhǔn)規(guī)范
- 海外物資設(shè)備管理培訓(xùn)
- 氣焊工測(cè)試驗(yàn)證模擬考核試卷含答案
- 冷拉絲工操作評(píng)估考核試卷含答案
- 熱縮材料制造工安全培訓(xùn)知識(shí)考核試卷含答案
- 中藥藥劑員誠(chéng)信強(qiáng)化考核試卷含答案
- 藥品購銷員安全技能競(jìng)賽考核試卷含答案
- 酒店員工培訓(xùn)與職業(yè)生涯規(guī)劃制度
- 酒店服務(wù)質(zhì)量監(jiān)督評(píng)價(jià)制度
- GJB5714A-2023外購產(chǎn)品質(zhì)量監(jiān)督要求
- 2025版跨境電商代銷合作合同范本
- 湖北省國(guó)土資源研究院-湖北省2025年度城市地價(jià)動(dòng)態(tài)監(jiān)測(cè)報(bào)告
- 2024年麻醉指南專家共識(shí)
- 腦梗死取栓術(shù)后護(hù)理查房
- 測(cè)繪成果保密自查報(bào)告
- 丁華野教授:下卷:提示為葉狀腫瘤的形態(tài)學(xué)改變
- WB/T 1143-2024集裝式移動(dòng)冷庫通用技術(shù)與使用配置要求
- 2025新課標(biāo)義務(wù)教育數(shù)學(xué)(2022年版)課程標(biāo)準(zhǔn)試題庫
- 工傷保險(xiǎn)知識(shí)培訓(xùn)課件
- 私密產(chǎn)品成交培訓(xùn)
評(píng)論
0/150
提交評(píng)論