Java程序設(shè)計實戰(zhàn)教程(李西明)全套課件_第1頁
Java程序設(shè)計實戰(zhàn)教程(李西明)全套課件_第2頁
Java程序設(shè)計實戰(zhàn)教程(李西明)全套課件_第3頁
Java程序設(shè)計實戰(zhàn)教程(李西明)全套課件_第4頁
Java程序設(shè)計實戰(zhàn)教程(李西明)全套課件_第5頁
已閱讀5頁,還剩1106頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第一章

Java程序設(shè)計入門本章將介紹Java語言的基本情況、如何搭建Java開發(fā)環(huán)境、如何編寫一個Java程序、集成開發(fā)環(huán)境Eclipse的使用以及簡單的輸出語句。Java第一章Java程序設(shè)計入門.pptxJava第二章Java語言基礎(chǔ).pptxJava第三章流程控制.pptxJava第四章方法與數(shù)組.pptxJava第五章面向?qū)ο蠡A(chǔ).pptxJava第六章深入面向?qū)ο?pptxJava第七章常用類.pptxJava第八章異常.pptxJava第九章集合類.pptxJava第十章File與IO流.pptxJava第十一章多線程.pptxJava第十二章圖形用戶界面.pptxJava第十三章網(wǎng)絡(luò)編程.pptxJava第十四章反射.pptx本章指引Java概述01搭建Java開發(fā)環(huán)境02第一個Java程序03環(huán)境變量配置04050607集成開發(fā)環(huán)境Eclipse輸出語句上機實驗1.1Java概述

Java是一種使用廣泛的計算機編程語言,它擁有跨平臺、面向?qū)ο?、泛型編程等特性,被廣泛應(yīng)用于企業(yè)級的Web應(yīng)用開發(fā)和移動應(yīng)用開發(fā)中。1.1.1Java語言簡介1.1.2Java語言的優(yōu)點1.1.3Java的版本3

1.1.1Java語言簡介

Java是在1991年的GREEN項目中誕生的。任職于Sun公司的詹姆斯·高斯林等人于20世紀(jì)90年代初開發(fā)了Java語言的雛形,并將其命名為Oak。隨著20世紀(jì)90年代互聯(lián)網(wǎng)的發(fā)展,Sun公司看到Oak在互聯(lián)網(wǎng)上應(yīng)用的前景,于是改造了Oak,并改名為Java,于1995年5月以Java的名稱正式發(fā)布,并推出了JDK1.0和Applet程序。由于Java比C++簡潔、可靠性高、安全性好,并且Java伴隨著互聯(lián)網(wǎng)的迅猛發(fā)展而發(fā)展,因此逐漸成為重要的網(wǎng)絡(luò)編程語言。目前大部分公司都使用Java作為應(yīng)用層封裝的標(biāo)準(zhǔn),并通過Java來調(diào)用一些底層的操作,如Android本質(zhì)上就是利用Java來調(diào)用Linux內(nèi)核操作系統(tǒng)的。

Java語言既是編譯型的,又是解釋型的。首先編寫好的Java源程序代碼將被編譯器編譯成字節(jié)碼(一種中間語言);然后Java虛擬機(JavaVirtualMachine,JVM)將字節(jié)碼解釋為機器碼;最后在計算機上運行機器碼。編譯只進(jìn)行一次,而解釋在每次運行時都進(jìn)行。Java編譯與解釋示例如圖所示。

當(dāng)前Java的主要應(yīng)用領(lǐng)域包括企業(yè)級應(yīng)用系統(tǒng)開發(fā)、Web網(wǎng)站開發(fā)、分布式系統(tǒng)開發(fā)、嵌入式系統(tǒng)開發(fā)、桌面應(yīng)用程序開發(fā)、游戲開發(fā)、安卓App開發(fā)等。在國內(nèi),比起其他編程語言,Java程序員的數(shù)量是最多的,社區(qū)和資源也最為豐富。51.1.2Java語言的優(yōu)點Java具有簡單、面向?qū)ο?、跨平臺、多線程、安全、動態(tài)等優(yōu)點。1.簡單

Java語言簡單,是指這門語言既易學(xué),又好用。Java要比C++簡單,C++中許多容易混淆的概念,或者被Java棄之不用了,或者以一種更清楚、更容易理解的方式實現(xiàn)。例如,Java不再有指針的概念。2.面向?qū)ο竺嫦驅(qū)ο缶幊谈先说乃季S模式,使人們更容易編寫程序。Java語言與其他面向?qū)ο笳Z言一樣引入了類的概念。類是用來創(chuàng)建對象的模板,它包含被創(chuàng)建的對象的狀態(tài)描述和方法的定義。63.跨平臺與平臺無關(guān)是Java語言最大的優(yōu)勢。使用Java編寫的程序可以在任何安裝了JVM的計算機上正確地運行,實現(xiàn)了“一次編寫,處處運行”的目標(biāo)。4.多線程Java的優(yōu)點之一就是支持多線程。多線程允許同時完成多個任務(wù)。實際上多線程使人產(chǎn)生多個任務(wù)在同時執(zhí)行的錯覺,目前計算機的處理器在同一時刻只能執(zhí)行一個線程,但處理器可以在不同的線程之間快速地切換。由于處理器的速度非???,遠(yuǎn)遠(yuǎn)超過人接收信息的速度,因此給人多個任務(wù)在同時執(zhí)行的感覺。75.安全

當(dāng)用戶使用支持Java的瀏覽器時,可以放心地運行Java的小應(yīng)用程序JavaApplet,不必?fù)?dān)心病毒的感染和其他惡意的企圖。Java小應(yīng)用程序?qū)⒈幌拗圃贘ava運行環(huán)境中,不允許它訪問計算機的其他部分。6.動態(tài)Java程序的基本組成單元是類。其中,有些類是自己編寫的,有些類是從類庫中引入的,而類又是運行時動態(tài)裝載的,這就使得Java可以在分布式環(huán)境中動態(tài)地維護(hù)程序及類庫。而C++每當(dāng)其類庫升級之后,相應(yīng)的程序都必須重新修改、編譯。8

1.1.3Java的版本Java從誕生之初發(fā)展到今天,分成了3個技術(shù)平臺。1.JavaSE它是Java的標(biāo)準(zhǔn)版,以前稱為J2SE。它允許開發(fā)和部署在桌面、服務(wù)器、嵌入式環(huán)境和實時環(huán)境中使用的Java應(yīng)用程序。JavaSE包含了支持JavaWeb服務(wù)開發(fā)的類,并為JavaPlatform、EnterpriseEdition(JavaEE)提供了基礎(chǔ)。本書介紹的正是JavaSE。2.JavaEEJava企業(yè)版,這個版本以前稱為J2EE。Java企業(yè)版能夠幫助開發(fā)和部署可移植、穩(wěn)健、可伸縮且安全的服務(wù)器端Java應(yīng)用程序。JavaEE是在JavaSE的基礎(chǔ)上構(gòu)建的,它提供Web服務(wù)、組件模型、管理和通信API,可以用來實現(xiàn)企業(yè)級的面向服務(wù)體系結(jié)構(gòu)(Service-OrientedArchitecture,SOA)和Web2.0應(yīng)用程序。3.JavaME這個版本以前稱為J2ME。JavaME為在移動設(shè)備和嵌入式設(shè)備(例如手機、PDA、電視機頂盒和打印機等)上運行的應(yīng)用程序提供一個穩(wěn)健且靈活的環(huán)境。10本章指引Java概述01搭建Java開發(fā)環(huán)境02第一個Java程序03環(huán)境變量配置04050607集成開發(fā)環(huán)境Eclipse輸出語句上機實驗1.2搭建Java開發(fā)環(huán)境

要在計算機上進(jìn)行Java開發(fā),需要安裝Java開發(fā)包(JavaDevelopmentKit,JDK)。下面介紹JDK的知識,并講解下載與安裝JDK。1.2.1JDK與跨平臺1.2.2JDK14的下載12

1.2.1JDK與跨平臺

JDK稱為Java開發(fā)包或Java開發(fā)工具,是一個編寫Java的Applet小程序和應(yīng)用程序的開發(fā)環(huán)境。JDK是整個Java的核心,包括Java運行環(huán)境(JavaRuntimeEnvironment,JRE)、一些Java工具和Java的核心類庫(JavaAPI)。不論什么Java應(yīng)用服務(wù)器,其實質(zhì)都是內(nèi)置了某個版本的JDK。主流的JDK是Sun公司發(fā)布的JDK。除了Sun公司之外,還有很多公司和組織都開發(fā)了自己的JDK,例如IBM公司開發(fā)的JDK、BEA公司開發(fā)的Jrocket和GNU組織開發(fā)的JDK。

另外,可以把JavaAPI類庫中的JavaSEAPI子集和JVM這兩部分統(tǒng)稱為JRE。JRE是支持Java程序運行的標(biāo)準(zhǔn)環(huán)境。14JRE是個運行環(huán)境,JDK是個開發(fā)環(huán)境。因此編寫Java程序的時候需要JDK,而運行Java程序的時候就需要JRE。由于JDK里面已經(jīng)包含了JRE,因此只要安裝了JDK,就可以編寫Java程序,也可以正常運行Java程序。但由于JDK包含了許多與運行無關(guān)的內(nèi)容,占用的空間較大,因此運行普通的Java程序無須安裝JDK,只需要安裝JRE即可。簡化記憶:JVM+核心類庫=JRE;JRE+開發(fā)工具=JDK。15Java源程序編寫完畢后需要先進(jìn)行編譯,Java源程序編譯之后的代碼是不能被硬件平臺直接運行的,而是一種“中間碼”——字節(jié)碼;再由JVM來把字節(jié)碼“翻譯”成所對應(yīng)的硬件平臺能夠運行的代碼。不同的硬件平臺上安裝有不同的JVM,每個操作系統(tǒng)都有自己的JVM,在UNIX上有UNIX的JVM,在Linux上有Linux的JVM,在Windows上有Windows的JVM,每個操作系統(tǒng)的JVM都能把字節(jié)碼“翻譯”成自身機器能運行的代碼。由于Java程序不是直接在機器上運行的,而是在JVM上運行的,因此說Java語言是跨平臺的。Java編程者不需要考慮硬件平臺是什么,因為Java實現(xiàn)了“一次編譯,到處運行”。Java之所以能跨平臺,是因為JVM能跨平臺。Java跨平臺原理如圖所示。1.2.2JDK14的下載16要學(xué)習(xí)Java,必須安裝JDK。本書使用2020年發(fā)布的JDK14版本進(jìn)行編寫,讀者可自行下載安裝本章指引Java概述01搭建Java開發(fā)環(huán)境02第一個Java程序03環(huán)境變量配置04050607集成開發(fā)環(huán)境Eclipse輸出語句上機實驗1.3第一個Java程序

本書的第一個Java程序名為HelloWorld,下面分別介紹其編寫、編譯與運行。1.3.1HelloWorld程序的編寫1.3.2HelloWorld程序的編譯與運行1.3.3HelloWorld程序的運行機制1.3.4HelloWorld程序的糾錯181.3.1HelloWorld程序的編寫19

下面開始編寫一個完整的Java程序,此程序的任務(wù)是輸出一個字符串HelloWorld!!!。在JDK的安裝路徑的bin文件夾下(本案例路徑為D:\ProgramFiles\Java\jdk-14.0.1\bin)新建一個文本文檔,命名為HelloWorld.txt,用記事本打開,輸入如下所示代碼:保存后,修改文件擴(kuò)展名,將.txt改為.java,這種文件稱為Java源文件。20在HelloWorld程序中,(1)第1行定義了一個類(class),命名為HelloWorld,初學(xué)者可以簡單地把類理解為Java程序。public是類的修飾詞,表示該類是公有的,class表明這是一個類。public和class都是Java的關(guān)鍵字(或稱為保留字),可暫時認(rèn)為是固定的。class后面是類名,每個類都有一個名字,類名由程序員自定。類名以大寫字母開頭,如這里的類名為HelloWorld。類名后面的符號“{”表示類的開始,同理,符號“}”表示類的結(jié)束。(2)第2行定義了主方法main()。方法是類的下一層次的概念,所以這行代碼需要縮進(jìn)一個制表位,一個類可以包含多個方法,其中main()方法是程序開始執(zhí)行的入口。main后面的“()”里面的內(nèi)容表示方法的參數(shù),暫時按照示例輸入即可,其后的一對“{}”符號代表該方法的起止范圍。21(3)第3行是一條語句,語句是方法的下一層次的概念,所以這行代碼又要縮進(jìn)一個制表位,方法是包含語句的結(jié)構(gòu)體,一個方法可以有一條或多條語句。本程序中的main()方法包含了一條以“System.out.println”開頭的語句。該語句的作用是在控制臺上輸出HelloWorld!!!。注意要輸出的內(nèi)容要放在“()”里面的雙引號中。Java中的每條語句都以分號“;”結(jié)束,因此“;”也稱為語句結(jié)束符。(4)第4行符號“}”表示主方法結(jié)束,注意這個符號“}”的縮進(jìn)量與主方法開始出現(xiàn)時(第2行)的縮進(jìn)量相同。(5)第5行符號“}”表示類結(jié)束,注意這個符號“}”縮進(jìn)量與類開始出現(xiàn)時(第1行)的縮進(jìn)量相同。22注意:

保留字(reservedword)或關(guān)鍵字(keyword)對編譯器而言都是有特定含義的,所以不能在程序中用于其他目的。例如,當(dāng)編譯器看到class時,它知道class后面就是這個類的名字。這個程序中的其他關(guān)鍵字還有public、static和void等。

Java源文件HelloWorld.java編寫好后,還不能直接運行,需要先進(jìn)行編譯。源文件編譯成后綴名為.class的字節(jié)碼文件后才能在JVM中運行。1.3.2HelloWorld程序的編譯與運行

JDK提供了編譯與運行的工具。打開JDK安裝路徑下的bin文件夾(本案例路徑為D:\Program

Files\Java\jdk-14.0.1\bin),可以看到里面有眾多的.exe可執(zhí)行文件。其中的javac.exe是編譯工具,負(fù)責(zé)將Java源程序編譯為字節(jié)碼;java.exe是運行工具,負(fù)責(zé)運行字節(jié)碼文件,如圖1.3所示。24下面介紹使用JDK提供的工具來編譯與運行前面編寫的HelloWorld源程序。(1)打開命令行窗口,切換到HelloWorld.java的保存路徑中,即JDK安裝路徑下的bin文件夾,如圖1.4所示。本例中JDK安裝路徑為D:\ProgramFiles\Java\jdk-14.0.1\bin。25(2)利用javac命令將HelloWorld.java源程序文件編譯成.class字節(jié)碼文件。輸入完整命令javacHelloWorld.java,然后按回車鍵,如圖1.5所示。26(3)利用java命令解釋運行生成的字節(jié)碼文件HelloWorld.class。輸入完整命令javaHelloWorld(注意不要加上.class),然后按回車鍵。當(dāng)命令行窗口輸出HelloWorld!!!時,第一個Java程序運行成功,如圖1.7所示。27命令執(zhí)行成功后,bin文件夾中將多出一個HelloWorld.class文件。該文件為Java程序的字節(jié)碼形式,可以被JVM解釋運行,如圖1.6所示。1.3.3HelloWorld程序的運行機制Java源文件由高級語言編寫,機器不能直接識別,需要先編譯成JVM能識別的字節(jié)碼文件,才能在各個平臺上的JVM上運行。字節(jié)碼類似機器指令,它是體系結(jié)構(gòu)中立的,可以在任何帶JVM的平臺上運行。編譯成字節(jié)碼文件只是一個中間過程,JVM還要再解釋運行字節(jié)碼文件,“翻譯”成最終的機器碼才能在計算機上運行。以HelloWorld程序為例,首先使用javac命令對HelloWorld.java源文件進(jìn)行編譯,生成字節(jié)碼文件HelloWorld.class;然后使用java命令啟動JVM,JVM先將編譯好的字節(jié)碼文件HelloWorld.class加載到內(nèi)存(稱為類加載),然后對加載到內(nèi)存的Java類進(jìn)行解釋運行,“翻譯”成機器碼在計算機上運行,便可看到運行結(jié)果,如圖1.8所示。291.3.4HelloWorld程序的糾錯在運行程序之前,必須創(chuàng)建程序并進(jìn)行編譯。如果程序有編譯錯誤,必須修改程序來糾正錯誤,然后重新編譯它。如果程序有運行時的錯誤或者不能產(chǎn)生正確的結(jié)果,必須修改這個程序,重新編譯,然后重新執(zhí)行。如果沒有語法錯誤,編譯器(compiler)就會生成一個后綴名為.class的文件。如果有語法錯誤,編譯器在生成.class文件時會執(zhí)行失敗,并報出相關(guān)的錯誤信息。如將HelloWorld程序中的System關(guān)鍵字換成system,然后測試編譯,如圖1.9所示。31接著利用javac命令進(jìn)行編譯,結(jié)果如圖1.10所示。程序編譯失敗,并報出錯誤信息。根據(jù)錯誤信息可以排查并改正Java程序,然后正確運行。下面總結(jié)了開發(fā)中幾種常見的錯誤。321.遺漏右括號

括號用來標(biāo)識程序中的塊。每個左括號必須有一個右括號匹配。常見的錯誤是遺漏右括號。為避免這個錯誤,任何時候在輸入左括號的時候就輸入右括號,如下面的例子所示:如果使用Eclipse這樣的IDE,IDE將自動為每個輸入的左括號插入一個右括號332.遺漏分號

每個語句都以一個語句結(jié)束符;結(jié)束。通常,新手會忘了在一個塊的最后一行語句后加上語句結(jié)束符,如下面例子所示:3.遺漏引號字符串必須放在引號中。通常,編程入門者會忘記在字符串結(jié)尾處加上一個引號,如下面例子所示:344.大小寫拼寫錯誤Java是大小寫敏感的語言。有些新手常將大小寫拼寫錯誤,如將System寫成system等。下面的代碼將main錯誤拼寫成Main,導(dǎo)致程序編譯錯誤:5.文件名與類名不一致源文件的后綴名必須是.java,而且文件名必須與公共類名完全相同。如果文件名為HelloWorld.java,但類名寫成了helloWorld,程序?qū)箦e,如圖1.11所示.355.文件名與類名不一致本章指引Java概述01搭建Java開發(fā)環(huán)境02第一個Java程序03環(huán)境變量配置04050607集成開發(fā)環(huán)境Eclipse輸出語句上機實驗1.4環(huán)境變量的配置

HelloWorld程序案例中,Java源文件需要在JDK的安裝路徑下的bin文件夾下創(chuàng)建,執(zhí)行javac或java命令的時候也需要切換到bin文件夾才能運行。這樣程序的編寫與執(zhí)行就會很受約束,我們希望可以將源文件存儲在計算機的任何位置,并且都能調(diào)用javac或java命令進(jìn)行編譯與運行。這就需要配置環(huán)境變量。1.4環(huán)境變量的配置371.4環(huán)境變量的配置38首先在計算機的D:\test\下創(chuàng)建一個Test.java文件,該程序的任務(wù)是輸出test,代碼基本同HelloWorld程序,只是輸出內(nèi)容不同。然后打開命令行窗口,切換路徑,輸入命令javacTest.java,結(jié)果報錯,如圖1.12所示。39報錯的原因javac命令其實是一個可執(zhí)行文件,全名是javac.exe(查看JDK安裝路徑下的bin文件夾即可知道),而當(dāng)前路徑中并沒有這個可執(zhí)行文件。怎樣才能讓其他路徑也能調(diào)用這個可執(zhí)行文件呢?操作系統(tǒng)調(diào)用可執(zhí)行文件有這樣的規(guī)則:首先檢查當(dāng)前路徑有沒有這個可執(zhí)行文件,如果沒有,不會立即報錯,而是再到系統(tǒng)的環(huán)境變量PATH中定義的路徑中去尋找;如果還是找不到才報錯。所以給系統(tǒng)的環(huán)境變量PATH定義一個值,讓它等于javac.exe實際所在的路徑(JDK安裝路徑下的bin文件夾),這樣在任何路徑下執(zhí)行javac命令都可調(diào)用到JDK安裝路徑下的bin文件夾中的javac.exe可執(zhí)行文件了。40(1)打開控制面板,單擊系統(tǒng)和安全,單擊系統(tǒng),找到左側(cè)的高級系統(tǒng)設(shè)置,如圖1.13所示。(2)單擊高級系統(tǒng)設(shè)置,進(jìn)入圖1.14所示的系統(tǒng)屬性對話框。41(3)單擊環(huán)境變量按鈕,然后進(jìn)行設(shè)置。①單擊系統(tǒng)變量下面的新建按鈕,變量名為JAVA_HOME(代表JDK安裝路徑),變量值對應(yīng)的是JDK的安裝路徑(本案例JDK的安裝路徑為D:\ProgramFiles\Java\jdk-14.0.1),如圖1.15所示。②在系統(tǒng)變量里面找一個變量名是PATH的變量,如果沒有就新建一個。在它的變量值里面追加代碼%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;,如圖1.16所示。42說明:由于這里%JAVA_HOME%代表的實際值是上一步設(shè)置的JDK安裝路徑D:\ProgramFiles\Java\jdk-14.0.1,因此%JAVA_HOME%\bin實際等同于D:\ProgramFiles\Java\jdk-14.0.1\bin。這是JDK安裝路徑下的bin文件夾,即javac.exe等可執(zhí)行文件所在的路徑。%JAVA_HOME%環(huán)境變量不是非定義不可,不定義的話,這一步的變量值直接輸入JDK安裝路徑下的bin文件夾,即輸入D:\ProgramFiles\Java\jdk-14.0.1\bin;也是可以的。43③再次在D:\test路徑下執(zhí)行javacTest.java命令,結(jié)果這次編譯成功,如圖1.17所示,證明PATH環(huán)境變量起作用了。44④環(huán)境變量設(shè)置完成后,測試是否安裝成功。按Win+R組合鍵并輸入cmd,打開命令行窗口,輸入java–version,出現(xiàn)圖1.18所示的內(nèi)容則代表安裝成功。如果安裝失敗,要重新檢查是否缺漏某一安裝步驟、環(huán)境變量設(shè)置正確與否。本章指引Java概述01搭建Java開發(fā)環(huán)境02第一個Java程序03環(huán)境變量配置04050607集成開發(fā)環(huán)境Eclipse輸出語句上機實驗1.5集成開發(fā)環(huán)境Eclipse

前面的HelloWorld程序采用記事本編寫,并手動編譯運行,效率低下,不便管理。實際開發(fā)中多用集成開發(fā)環(huán)境(IntegratedDevelopmentEnvironment,IDE)來開發(fā)Java項目,當(dāng)前常用的IDE有Eclipse、MyEclipse、IntelliJIDEA等。本書選用Eclipse,使用它可以高效地創(chuàng)建、編譯、運行、管理Java程序。1.5.1Eclipse簡介1.5.2使用Eclipse開發(fā)HelloWorld461.5.1Eclipse簡介Eclipse是一個開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務(wù),用于通過插件和組件構(gòu)建開發(fā)環(huán)境。Eclipse附帶了一個標(biāo)準(zhǔn)的插件集,包括JDK。讀者可前往Eclipse官網(wǎng)下載安裝。本書使用的是Eclipse2020。安裝完畢后還需要在Eclipse中配置JDK14開發(fā)環(huán)境,步驟如下:選擇菜單【W(wǎng)indow】→【Preference】→左側(cè)導(dǎo)航【Java】→【Installed】JREs→右側(cè)按鈕【Add】→選擇【StandardVM】→按鈕【Next】→按鈕【Directory】,選擇JDK的安裝路徑→【Finish】→選中【jdk14.0.1】→【ApplyandClose】。1.5.2使用Eclipse開發(fā)HelloWorld項目48(1)打開Eclipse后選擇菜單【File】→【New】→【Project】,彈出NewProject對話框,在NewProject對話框中選擇JavaProject,單擊Next按鈕,彈出NewJavaProject對話框。(2)在Projectname對應(yīng)的輸入框中輸入項目名稱HelloWorld,輸入的同時觀察下面兩行的Location,會發(fā)現(xiàn)Location的值會跟著輸入而同步改變。Location表示項目創(chuàng)建的位置,默認(rèn)在工作空間下創(chuàng)建一個跟項目同名的文件夾。在JRE的選項中默認(rèn)選擇了:UseaprojectspecificJRE:jdk-14.0.1,表示使用JDK14進(jìn)行開發(fā),也可在下拉列表框中選擇其他版本。單擊Finish,然后系統(tǒng)提示是否創(chuàng)建Module,這里暫時不創(chuàng)建,所以選擇Don'tCreate,這時左側(cè)的ProjectExplorer中就會出現(xiàn)一個名為HelloWorld的新項目。49HelloWorld項目創(chuàng)建完畢后,會在工作空間所在的路徑下創(chuàng)建一個與項目同名的文件夾。在ProjectExplorer中鼠標(biāo)右鍵單擊項目HelloWorld,選擇【ShowIn】→【SystemExplorer】,就可打開工作空間所在路徑并看到HelloWorld文件夾。打開HelloWorld文件夾,可以看到創(chuàng)建好的項目的文件夾結(jié)構(gòu),如圖1.19所示。其中,src是資源source的英文縮寫,該文件夾用于存放Java類。但src文件夾下不能直接放置Java類,先要創(chuàng)建包。bin文件夾用于存儲編譯好的.class文件。50(3)創(chuàng)建包。通常一個項目需要創(chuàng)建多個Java類,為了方便管理一個項目中的多個Java類,需要創(chuàng)建一個或多個包,以便將不同功能的Java類分開放置。包相當(dāng)于一個容器,用于放置Java類,包位于項目的src文件夾下,對應(yīng)在硬盤中不同的包是src文件夾下的不同的子文件夾。鼠標(biāo)右鍵單擊src文件夾,選擇【New】→【Package】,彈出NewJavaPackage對話框,在ProjectName右側(cè)輸入包名,一般情況下用公司域名的倒序?qū)ΠM(jìn)行命名。例如,礪鋒科技公司的域名是,則礪鋒科技公司開發(fā)的項目就用com.seehope來命名包,所以這里輸入com.seehope,如圖1.20所示。

單擊Finish按鈕,這時ProjectExplorer的結(jié)構(gòu)如圖1.20所示,src文件夾下出現(xiàn)了名為com.seehope的包。51再來看看硬盤的文件夾結(jié)構(gòu),src文件夾下多了一個文件夾com,打開com文件夾,里面有個文件夾seehope,如圖1.21所示。所以名為com.seehope的包實際代表了二重文件夾結(jié)構(gòu),由此類推,包com.seehope.test將有三重文件夾。52(4)創(chuàng)建類。鼠標(biāo)右鍵單擊包com.seehope,選擇【New】→【Class】,彈出NewJavaClass對話框,在ProjectName的右側(cè)輸入類名HelloWorld。單擊Finish按鈕,結(jié)果如圖1.22所示。ProjectExplore的包下出現(xiàn)了一個HelloWorld.java文件,右側(cè)編輯框出現(xiàn)了類HelloWorld的編輯界面。再查看硬盤的項目文件夾,發(fā)現(xiàn)src、com、seehope路徑下出現(xiàn)了HelloWorld.java文件。也可在ProjectExplorer中鼠標(biāo)右鍵單擊HelloWorld.java,選擇【ShowIn】→【SystemExplorer】進(jìn)行查看。53(5)編寫代碼。在圖1.22所示的類編輯界面中編寫代碼,最終完整代碼如圖1.23所示。54(6)編譯運行。單擊運行按鈕,即圖1.24上面所示的箭頭。右下角的Console(控制臺)出現(xiàn)了運行結(jié)果HelloWorld!!!,如圖1.24下面所示的箭頭。55這里編譯由Eclipse自動完成,無須程序員額外花時間去編譯。可以看到項目的bin\com\seehope路徑下出現(xiàn)了編譯好的HelloWorld.class文件,如圖1.25所示。本章指引Java概述01搭建Java開發(fā)環(huán)境02第一個Java程序03環(huán)境變量配置04050607集成開發(fā)環(huán)境Eclipse輸出語句上機實驗1.6輸出語句輸出語句的基本格式:System.out.print("要輸出的內(nèi)容");要輸出的內(nèi)容可以隨意改變,可以是各種字符,中英文均可,輸出后不會換行,可以多次調(diào)用此語句,結(jié)果均在同一行輸出。下面在此基礎(chǔ)上下面進(jìn)一步介紹更多的輸出功能。1.6.1輸出換行1.6.2輸出制表符1.6.3輸出其他轉(zhuǎn)義符號57

1.6.1輸出換行語句:System.out.println("helloworld!");是Java程序向終端輸出的常用語句,表示輸出字符串helloworld!并換行。與其相關(guān)的語句System.out.print();,表示輸出不換行。此外在Java中,轉(zhuǎn)義符號\n表示換行,常用于字符串之間的換行。1.6.2輸出制表符59\t是水平制表符在C、C++、Java等編程語言中的轉(zhuǎn)義符號。因為在字符串中無法直接使用類似回車、水平制表符等這些看不見的字符,所以在輸入字符串時用轉(zhuǎn)義符號表示,而編譯器看到這些轉(zhuǎn)義符號能明白,并且會轉(zhuǎn)換成真正要的符號。在字符界面中,水平制表符表示緊跟后面的文字在往右一個表格位置顯示或輸出,通常一個表格位置占8個字符寬度。使用水平制表符可以使文字內(nèi)容在規(guī)整的位置顯示或輸出,且看起來清晰整齊。可以利用1.6.1小節(jié)介紹的輸出語句輸出制表符。60【示例】輸出制表符。代碼如下。

System.out.println("1\t2\t3");

System.out.println("44\t55\t66");輸出結(jié)果如圖1.26所示。61【示例】輸出英雄榜。代碼如下。publicclassHeros{publicstaticvoidmain(String[]args){System.out.println("\t\t英雄榜");System.out.println("\t--------------------");System.out.print("\t姓名\t年齡\t特長\t\n");System.out.println("\t--------------------");System.out.print("\t張無忌\t19\t長槍\n");System.out.print("\t黃飛鴻\t20\t無影腳\n");System.out.print("\t李尋歡\t21\t飛刀\n");System.out.println("\t--------------------");}}結(jié)果如圖1.27所示62【示例】輸出超市購物小票。代碼如下。publicclassGoodsList{publicstaticvoidmain(String[]args){System.out.println("\t購物清單");System.out.println("*****************************");System.out.print("商品名稱\t購買數(shù)量\t商品單價\t金額\n");System.out.print("花生油\t2\t150\t300\n");System.out.print("大米\t3\t120\t360\n");System.out.print("華為手機\t2\t4000\t8000\n");System.out.println("*****************************");}}輸出結(jié)果如圖1.28所示。

1.6.3輸出其他轉(zhuǎn)義符號1.輸出雙引號可以用\"進(jìn)行轉(zhuǎn)義。例如,輸出帶引號的“礪鋒科技”,源代碼和結(jié)果如圖1.29所示。642.輸出\本身

可以用\\進(jìn)行轉(zhuǎn)義。例如,文件路徑中的\,在Java中需要用\\來表示,如果直接輸入類似D:\documents\java\helloworld.java這樣的文件全路徑,程序會報錯,正確寫法為將所有\(zhòng)替換為\\,如圖1.30所示將上圖報錯的語句注釋掉再運行,就能得到正確的結(jié)果。本章指引Java概述01搭建Java開發(fā)環(huán)境02第一個Java程序03環(huán)境變量配置04050607集成開發(fā)環(huán)境Eclipse輸出語句上機實驗任務(wù)一:輸出愛心形狀要求:在控制如輸出如圖所示愛心形狀。分析:熟悉Java常用的輸出語句,控制好輸出空格的數(shù)量1.7上機實驗任務(wù)二:制作主菜單界面要求:在控制臺輸出如圖所示主菜單界面。分析:注意換行轉(zhuǎn)義符和\t轉(zhuǎn)義符的使用第二章

Java語言基礎(chǔ)本章將介紹Java的基本語法、Java的變量與常量、各種運算符及其用法。此外本章還會對位運算等比較有難度的運算進(jìn)行深入介紹。本章指引基本語法2.1變量與常量2.2運算符2.3上機實驗2.42.1.1編碼格式2.1.2注釋2.1.3標(biāo)識符2.1.4關(guān)鍵字2.1基本語法

Java語言有自己的一套語法、格式、規(guī)范。開發(fā)者在編寫Java程序時需要遵守這些規(guī)范。

2.1.1編碼格式類是用得最多的一個編程單元,初學(xué)者可以暫時把類理解為Java程序。類的基本格式如下:

修飾符class類名{

publicstaticvoidmain(String[]args){//主方法,是程序的入口

//一行或多行代碼

}

}1.Java修飾符Java可以使用修飾符來修飾類中的方法和成員變量。主要有以下兩類修飾符。①訪問控制修飾符:default、public、protected、private。②非訪問控制修飾符:final、abstract、static、synchronized。后面會逐步介紹到這些Java修飾符。當(dāng)前一律使用public。2.大括號的使用類用一對大括號表示其范圍,Java在類名后面不換行立即使用大括號{,注意區(qū)別其他一些編程語言是換行后再使用大括號的。類結(jié)束后使用的大括號}一般單獨成一行,其水平位置與類開始的修飾符豎向?qū)R。類里面的方法也用大括號,所以大括號會有嵌套,方法中的大括號使用規(guī)則與類相同。3.代碼要縮進(jìn)以區(qū)分層次結(jié)構(gòu)

類是第一級層次,最靠左;方法是第二級層次,向右縮進(jìn)一個制表位;代碼是第三級層次,再向右縮進(jìn)一個制表位。這樣整個類看起來將美觀整齊、結(jié)構(gòu)層次清晰、易于閱讀。待后面介紹了流程控制語句以后,代碼也會有類似的層次結(jié)構(gòu)。層次結(jié)構(gòu)如下:4.每條語句要用分號結(jié)束并獨占一行除了用于定義結(jié)構(gòu)的語句(如定義類、方法的語句等)外,每一條功能執(zhí)行語句都必須以分號結(jié)束,否則會報錯,而且要注意是英文格式的分號,不能是中文格式。一般一行一條語句;也可以一行多條語句,多條語句之間用分號隔開。一般不建議一行多條語句,這種情況形式上看起來是一行代碼(一條語句),但邏輯上還是多行代碼(多條語句)。5.Java區(qū)分大小寫例如System不能寫成system,static不能寫成Static。也可以利用這個特點,讓一個單詞代表不同的事物。例如可用Person作為類名,person作為對象名,后面介紹面向?qū)ο髸r就經(jīng)常這樣做。6.一行代碼長度太長的解決方法

Java中一行代碼如果太長會影響閱讀,但一個連續(xù)的字符串不能分開在兩行中書寫。如果連續(xù)的字符串實在太長,一行放不下,可以將該字符串分成兩個字符串,再用+連接,然后在+處換行。在實際操作中,可以在長的字符串中的任意一個單詞后面回車換行,IDE將自動實現(xiàn)上述操作。為了使代碼易于閱讀、更加清晰易懂、便于團(tuán)隊協(xié)作,通常需要在程序中為代碼添加一些注釋,對程序的某行代碼或某個功能模塊進(jìn)行解釋說明。注釋只在Java源文件中有效,編譯器編譯時會忽略注釋,注釋不會被編譯到字節(jié)碼文件中去。Java中有以下3種類型的注釋方式。2.1.2注釋1.單行注釋用來對程序中的某一行代碼進(jìn)行解釋說明,使用符號//,符號后面是注釋內(nèi)容,語法格式為//注釋內(nèi)容。單行注釋放在要解釋說明的那一行代碼的后面,注釋內(nèi)容不能太長、不能換行,太長要換行的話要用到多行注釋。2.多行注釋多行注釋指注釋內(nèi)容為多行,以符號/*開頭,符號*/為結(jié)尾。語法格式為/*注釋內(nèi)容(多行)*/。除了用來解釋說明代碼功能外,多行注釋還可以一次性將暫時用不上的多行代碼“注釋”掉。3.文檔注釋文檔注釋用來對類、接口、成員方法、成員變量、靜態(tài)字段、靜態(tài)方法、常量或一段代碼等進(jìn)行解釋說明,以符號/**開頭,符號*/結(jié)尾,語法格式為/**注釋內(nèi)容(多行)*/??梢允褂肑avadoc文檔工具提取程序中的文檔注釋,生成幫助文檔。3種注釋綜合示例:Java語言中,標(biāo)識符是用來標(biāo)識包名、類名、方法名、變量名、參數(shù)名、數(shù)組名、對象名、接口名、文件名的字符序列。Java標(biāo)識符由數(shù)字、字母、下畫線_和符號$組成,第一個字符不能是數(shù)字。最重要的是,Java關(guān)鍵字不能當(dāng)作Java標(biāo)識符。在Java中,標(biāo)識符是區(qū)分大小寫的,如Name和name是兩個不同的標(biāo)識符。下面的標(biāo)識符是合法的:myName、My_name、Points、$points、_sys_ta、OK、_23b、_3_。下面的標(biāo)識符是非法的:#name、25name、class、&time、if。2.1.3標(biāo)識符Java命名約定如下:(1)包名所有字母小寫,如com.seehope.web。(2)類名和接口名可以由多個單詞組成,每個單詞的首字母大寫,如MyClass、HelloWorld、Time等。(3)方法名、變量名和對象名可以由多個單詞組成,第一個單詞的首字母小寫,其余單詞的首字母大寫,如getName、setTime、myName等。這種命名方法叫作駝峰式命名法。變量命名要盡量做到見名知義,便于理解和閱讀。例如,標(biāo)識符userName,一看便知是“用戶名”。(4)常量名全部使用大寫字母,單詞之間用下畫線分隔,如ADMIN_NAME。2.1.4關(guān)鍵字關(guān)鍵字是Java語言中已經(jīng)被賦予特定含義的一些單詞,不能用作標(biāo)識符,前面見過的class、public、static、void等都是關(guān)鍵字。Java中的關(guān)鍵字及其含義如表2.1所示,大部分關(guān)鍵字將隨著學(xué)習(xí)的深入而逐步掌握,該表只需了解即可。本章指引基本語法2.1變量與常量2.2運算符2.3上機實驗2.42.2.1變量簡介2.2.2變量的聲明2.2.3數(shù)據(jù)類型2.2.4變量的賦值2.2.5數(shù)據(jù)類型轉(zhuǎn)換2.2.6變量的使用2.2.7變量的作用域2.2.8常量2.2變量與常量

2.2.1變量簡介程序運行時,需要處理的數(shù)據(jù)都臨時保存在內(nèi)存單元中,為了方便記住這些內(nèi)存單元以存取數(shù)據(jù),可以使用標(biāo)識符來表示每一個內(nèi)存單元。這些使用了標(biāo)識符的內(nèi)存單元稱為變量。程序員若要使用某個內(nèi)存單元,無須記憶內(nèi)存空間的復(fù)雜的內(nèi)存地址,只需記住代表這個內(nèi)存空間的變量名稱即可,從而大大降低了編程難度。簡言之,變量是一個內(nèi)存單元的名字,代表了這個內(nèi)存單元,用于存?。ㄗx寫)數(shù)據(jù)。之所以稱為變量是因為變量代表的內(nèi)存單元存儲的數(shù)據(jù)在程序運行過程中是可以被改變的,就像一家酒店的同一間客房(變量),第一天入住的客人(數(shù)據(jù))與第二天入住的客人可以不同。

使用變量需要進(jìn)行“三部曲”:聲明→賦值→使用。使用變量前,先要進(jìn)行聲明。變量的聲明也叫變量的定義。聲明變量的名字及其可以存儲的數(shù)據(jù)類型后,編譯器會根據(jù)數(shù)據(jù)類型為變量分配合適的內(nèi)存空間。不同數(shù)據(jù)類型的變量分配的空間大小不一樣,就像一家酒店,豪華套房類型和普通套房類型的大小不一樣(客房類型比作變量的數(shù)據(jù)類型)。此外,聲明了變量也就約束了該變量只能存儲什么類型的數(shù)據(jù),其他類型的數(shù)據(jù)存不進(jìn)來。聲明變量的語法如下:2.2.2變量的聲明intage表示聲明一個名為age的整型變量,編譯器將為它分配一塊32位的內(nèi)存空間,名稱age即代表了該塊內(nèi)存空間;doublenum表示聲明一個名為num的雙精度浮點型變量,編譯器將為它分配一塊64位的內(nèi)存空間,名稱num即代表了該塊內(nèi)存空間。分配多少位的內(nèi)存空間只取決于變量的數(shù)據(jù)類型。變量內(nèi)存示意如圖2.1所示。數(shù)據(jù)類型除了前面提到過的數(shù)值型,還有字符型、日期型等。每個數(shù)據(jù)類型都有它的取值范圍,編譯器會根據(jù)每個變量或常量的數(shù)據(jù)類型為其分配內(nèi)存空間。變量中存儲的數(shù)據(jù)的數(shù)據(jù)類型應(yīng)該跟變量聲明的數(shù)據(jù)類型一致,否則會報錯。例如,如果變量age聲明為整型,則它只能存儲1、2、3等整型數(shù)據(jù),而不能存儲1.0、3.14等浮點型數(shù)據(jù)或'a'、'b'、'c'等字符型的數(shù)據(jù)。Java的數(shù)據(jù)類型包括基本數(shù)據(jù)類型和引用數(shù)據(jù)類型,各自下面又有分類,如圖2.2所示。其中基本數(shù)據(jù)類型一共有8種,如表2.2所示,引用數(shù)據(jù)類型以后再做介紹。2.2.3數(shù)據(jù)類型1.整數(shù)型Java使用4種類型的整數(shù):byte、short、int和long。編寫程序時應(yīng)該為變量選擇最適合的數(shù)據(jù)類型。例如,如果知道存儲在變量中的整數(shù)是在1字節(jié)范圍內(nèi),應(yīng)將該變量聲明為byte型。為了簡單和一致性,本書的大部分內(nèi)容都使用int來表示整數(shù)。long類型的數(shù)據(jù),需要在數(shù)字后面加上字母L或l(L的小寫形式)來表示,如果數(shù)據(jù)的值不超過int的取值范圍,也可省略。整數(shù)又分為二進(jìn)制整數(shù)、八進(jìn)制整數(shù)、十進(jìn)制整數(shù)、十六進(jìn)制整數(shù)。二進(jìn)制整數(shù):由0和1組成的數(shù)字序列,逢二進(jìn)一,如1101。在Java中二進(jìn)制整數(shù)前面還要加上0b或0B才能表示是二進(jìn)制數(shù),否則會被當(dāng)成十進(jìn)制數(shù),如0b1101或0B1101。八進(jìn)制整數(shù):由0、1、2、3、4、5、6、7組成的數(shù)字序列,逢八進(jìn)一,如72。在Java中八進(jìn)制整數(shù)前面還要加上0才能表示是八進(jìn)制數(shù),否則會被當(dāng)成十進(jìn)制數(shù),如072。十六進(jìn)制整數(shù):由數(shù)字0~9和字母a~f共16個字符組成的序列,其中a代表10,b代表11,依此類推,逢十六進(jìn)一,如a9。在Java中十六進(jìn)制整數(shù)前面還要加上0x或0X才能表示是十六進(jìn)制數(shù),否則會報錯或被當(dāng)成十進(jìn)制數(shù),如0xa9或0Xa9。二進(jìn)制、八進(jìn)制、十六進(jìn)制的整數(shù)在輸出時都會被轉(zhuǎn)換成十進(jìn)制整數(shù)。2.浮點型Java使用兩種類型的浮點數(shù):float和double。double型是float型的兩倍。所以,double稱為雙精度(doublepeisin),而float稱為單精度(singlepeisin)。通常情況下,應(yīng)該使用double型,因為它比float型更精確。Java中,在小數(shù)后面加上字母F或f表示float型數(shù)據(jù),在小數(shù)后面加字母D或d表示double型數(shù)據(jù)。如果一個小數(shù)后面不加字母,則默認(rèn)為double型數(shù)據(jù)。3.字符型char字符類型的變量只能存儲單獨一個字符。賦值時,需要用一對單引號將一個字符引起來再賦值,如chara='a'。也可以將一個整數(shù)賦給char型變量,編譯器將自動將整數(shù)轉(zhuǎn)換成ASCII編碼表對應(yīng)的字符。4.布爾型

在現(xiàn)實生活中經(jīng)常要拿兩種事物進(jìn)行比較,比較結(jié)果可能是“真”,也可能是“假”。例如,太陽比地球大,比較結(jié)果是“真”;月亮比地球大,比較結(jié)果是“假”。比較結(jié)果不是“真”就是“假”,只有這兩個取值。布爾型正是用來表示比較結(jié)果的,它只有兩個取值,即“真”或“假”,在Java中用關(guān)鍵字boolean表示布爾型,它只有兩個取值:true和false,分別代表布爾邏輯中的“真”和“假”。若一個變量聲明為布爾型,則它只能存儲true或false這兩個值之一,而不能存儲其他值。5.String型String型不屬于基本數(shù)據(jù)類型,是類的一種,后面會做詳細(xì)介紹。但前面有多處用到它,這里要先做簡單說明。String型又稱字符串型,用于存儲字符串,字符串是由一個或多個鍵盤字符組成的字符序列,用雙引號引起來。例如"HelloWorld"就是一個典型的字符串,可以將它賦給一個String類型的變量。【示例】Stringhello="HelloWorld"2.2.4變量的賦值這種情況下的變量值通常稱為初始值,后面可以根據(jù)需要改變變量值。變量賦值后的內(nèi)存圖如圖2.3所示。多個相同類型的變量也可以在同一行一次性聲明及賦值(或不賦值),多個變量之間用逗號分隔。通常情況下,一種數(shù)據(jù)類型的變量只能用同一種類型的數(shù)據(jù)(值)進(jìn)行賦值。例如一個int型變量,只能給它賦類似1、10、100等整型值;而double型變量,需要給它賦類似1.1、10.5、100.3等雙精度浮點數(shù)型值。一種類型的值賦給另一種類型的變量也有可能成功,但需要進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。2.2.5數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換是將一種數(shù)據(jù)類型的值轉(zhuǎn)換成另一種數(shù)據(jù)類型的值的操作。當(dāng)把一種數(shù)據(jù)類型的值賦給另一種數(shù)據(jù)類型的變量時,需要進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。數(shù)據(jù)類型轉(zhuǎn)換方式有兩種:自動類型轉(zhuǎn)換與強制類型轉(zhuǎn)換。1.自動類型轉(zhuǎn)換將取值范圍較小的類型的數(shù)值賦給取值范圍較大的類型的變量時,Java會自動將取值范圍較小的數(shù)值轉(zhuǎn)換為取值范圍較大的類型,這稱為自動類型轉(zhuǎn)換。自動類型轉(zhuǎn)換按數(shù)據(jù)類型取值范圍從小到大的順序轉(zhuǎn)換,不同類型數(shù)據(jù)間的優(yōu)先關(guān)系為:byte→short→int→long→float→double。另外,char型可以自動轉(zhuǎn)換為int型。2.強制類型轉(zhuǎn)換強制類型轉(zhuǎn)換是將取值范圍較大的類型的數(shù)值轉(zhuǎn)換成取值范圍較小的類型的數(shù)值。強制類型轉(zhuǎn)換的前提是數(shù)據(jù)類型要兼容,并且源類型的取值范圍大于目標(biāo)類型。強制類型轉(zhuǎn)換可能會損失精度。強制類型轉(zhuǎn)化的語法:(目標(biāo)類型)源類型;源類型:取值范圍要比目標(biāo)類型大,可以是值或變量?!臼纠縤ntnum=(int)2.2;System.out.println(num);輸出結(jié)果為2,將double型轉(zhuǎn)換成為int型,小數(shù)部分的0.2被截去,所以說強制類型轉(zhuǎn)換可能會損失精度。int型強制轉(zhuǎn)換為byte型也會有精度損失?!臼纠縝yteb;inti=264;b=(byte)i;System.out.println("i="+i);System.out.println("b="+b);運行結(jié)果如下:i=264b=8int型值264強制轉(zhuǎn)換為byte型后變成了8,明顯發(fā)生了精度損失,這是為何呢?因為int型值是32位的,即4字節(jié),整數(shù)264存儲在計算機中的二進(jìn)制形式如下所示:00000000000000000000000100001000。當(dāng)強制轉(zhuǎn)換為byte型時,由于byte型只有8位(1字節(jié)),這樣264的高位的3字節(jié)全部丟棄,只剩下最低位的1字節(jié),此時二進(jìn)制形式如下:00001000。這樣,它的值就變成8了。int型也可強制轉(zhuǎn)換為char型,如System.out.println((char)98);將輸出b,轉(zhuǎn)換依據(jù)是ASCII編碼表。2.2.6變量的使用2.2.7變量的作用域變量的作用域決定了變量名的可見性和生命周期。在Java中,作用域由大括號{}的位置決定。如果一個變量被定義在一對大括號內(nèi),則該大括號所包含的代碼區(qū)域就是這個變量的作用域;如果該大括號內(nèi)部又嵌套了大括號,那么變量的作用域還包括內(nèi)嵌大括號所包含的代碼區(qū)域。2.2.8常量常量代表程序運行過程中不能改變的值,常量在整個程序中只能賦值一次。常量有以下作用:(1)代表常數(shù),便于程序的修改(例如圓周率的值)。(2)代表多個對象共享的值。多個對象都使用了,若要修改,只需修改常量,無須找出各個對象一一修改。(3)增強程序的可讀性(例如,常量UP、DOWN、LEFT和RIGHT分別代表上、下、左、右,其數(shù)值分別是1、2、3和4)。本章指引基本語法2.1變量與常量2.2運算符2.3上機實驗2.42.3.1賦值運算符2.3.2算術(shù)運算符2.3.3比較運算符2.3.4邏輯運算符2.3.5位運算符2.3.6三元運算符2.3.7運算符的優(yōu)先級2.3.8接收鍵盤輸入的數(shù)據(jù)2.3運算符

2.3.1賦值運算符在Java中,將符號=作為賦值運算符。賦值運算符的作用是指定一個值給一個變量。聲明變量后,可以利用賦值語句給它賦一個值。賦值語句語法如下:變量名=值(或表達(dá)式);其功能是將右邊的值賦給左邊的變量;或先將右邊的表達(dá)式計算出來得到一個結(jié)果值,再將其賦給左邊的變量。【示例】intx=1;inty=2;doublez=x*y;注意變量名必須放在運算符=的左邊,以下是錯誤示范;1=x;除了簡單的=賦值之外,Java中還支持=與其他運算符組合進(jìn)行賦值,方便程序執(zhí)行,如表2.3所示??梢詫Χ鄠€變量連續(xù)賦同一個值,程序會從最右邊的=開始處理,再逐步賦給左側(cè)的變量?!臼纠縤nta,b,c;a=b=c=10;注意,不可以這樣賦值:inta=b=c=10;利用組合賦值運算符,可以實現(xiàn)強制類型轉(zhuǎn)換自動完成,而不需要顯式進(jìn)行?!臼纠縫ublic

static

voidmain(String[]args)

{

intnum1=10;

doublenum2=20.5;

num1+=num2;

System.out.println("num1="+num1);

}

運行結(jié)果如下:num1=30注意,num1是int型,num2是double型,兩者相加結(jié)果應(yīng)是double型,double類型的結(jié)果再賦給int型的num1,按之前所學(xué),應(yīng)該要強制轉(zhuǎn)換。但從上面程序可以看出,這種情況下無須顯式強轉(zhuǎn),而是自動完成了。2.3.2算術(shù)運算符1.算術(shù)運算結(jié)果類型不同類型的數(shù)據(jù)或變量進(jìn)行算術(shù)運算時,結(jié)果的類型為其中取值范圍最大的那個類型。如int型與double型進(jìn)行算術(shù)運算時,結(jié)果應(yīng)是double型,而不是int型。【示例】public

static

voidmain(String[]args)

{

intnum1=10;

doublenum2=20.5;

floatnum3=30.5f;

doublesum=num1+num2+num3;

//必須由double型變量接收運算結(jié)果,否則會報錯 System.out.println("sum="+sum);

}

num1+num2+num3是int、float、double這3種類型參與運算,結(jié)果取其中取值范圍最大的類型,即double型,所以運算結(jié)果要賦給double型變量。2.除法與求余在使用除法運算符的時候需要注意,當(dāng)除法的兩個操作數(shù)都是整數(shù)時,除法的結(jié)果也是整數(shù),相當(dāng)于整除。例如,5/2的結(jié)果是2,而不是2.5。如下:System.out.println(5/2);//輸出2為了實現(xiàn)浮點數(shù)的除法,其中一個操作數(shù)必須是浮點數(shù)。例如,5.0/2的結(jié)果是2.5。如下:System.out.println(5.0/2);//輸出2.5兩個整型變量(a=5、b=2)相除(即a/b),其結(jié)果是整數(shù)2,而不是2.5。要得到2.5的結(jié)果,方法是將a、b中的其中一個變量乘以1.0,如a*1.0/b。運算符%被稱為求余或者取余運算符,可以求得除法的余數(shù)。如4%2的余數(shù)為0,5%3的余數(shù)為2。運算符%通常用在正整數(shù)上,實際上,它也可用于負(fù)整數(shù)和浮點數(shù)。但只有被除數(shù)(%左邊的數(shù))是負(fù)數(shù)時,余數(shù)才是負(fù)的。例如,7%3和7%-3的結(jié)果都是1,而-7%3和-7%-3的結(jié)果都是-1,顯然求余結(jié)果的正負(fù)與除數(shù)(%右邊的數(shù))的正負(fù)無關(guān)。代碼示例如下。3.自增、自減自增++和自減--運算符是特殊的算術(shù)運算符,分別表示操作數(shù)的值增加1或減少1。注意,操作數(shù)只能是變量,不能是數(shù)值。在一般算術(shù)運算符中至少需要兩個操作數(shù)來進(jìn)行運算,如加法運算a+b,a是第一個操作數(shù),b是第二個操作數(shù),少一個就無法實現(xiàn)。而自增自減運算符只需要一個操作數(shù),如自增運算a++只有一個操作數(shù)a,a++即a自增,相當(dāng)于a=a+1;同理,a--即a自減,相當(dāng)于a=a-1。至少需要兩個操作數(shù)才能構(gòu)成運算表達(dá)式的運算符稱為“二元運算符”,至少需要3個操作數(shù)的運算符稱為“三元運算符”,只需要一個操作數(shù)的運算符稱為“一元運算符”。自增++和自減--運算符是一元運算符。自增、自減運算符既可以放在操作數(shù)的前面,也可以放在操作數(shù)的后面。自增、自減運算及其操作數(shù)既可以單獨構(gòu)成一條語句,也可以參與到運算表達(dá)式中。(1)第一種情形:自增、自減運算及其操作數(shù)單獨構(gòu)成一條語句。這時無論自增、自減運算符放在操作數(shù)(變量)的前面還是后面結(jié)果都一樣,操作數(shù)(變量)都自增或自減1。(2)第二種情形:自增、自減運算符及其操作數(shù)參與到運算表達(dá)式中。根據(jù)自增、自減運算符在操作數(shù)(變量)的左側(cè)或右側(cè)分為以下兩種情況。自增、自減運算符在變量左側(cè):如++a,先對變量進(jìn)行自增操作,再使該變量參與表達(dá)式運算。自增、自減運算符在變量右側(cè):如a++,先使變量參與表達(dá)式運算,再對該變量進(jìn)行自增操作。在Java程序中靈活運用自增、自減運算符可以提高代碼的簡潔性,也可以結(jié)合Java其他運算符一起使用,如下:public

static

voidmain(String[]args)

{

inta=

5;

//定義一個變量

intb=

5;

intx=

2*++a;

inty=

2*b++;

System.out.println("a="+a+",x="+x);

System.out.println("b="+b+",y="+y);

}

輸出如下:a=6,x=12b=6,y=104.char型參與算術(shù)運算char型也可以參與算術(shù)運算,將被自動轉(zhuǎn)換成ASCII碼表中對應(yīng)的十進(jìn)制整數(shù)來處理。例如,System.out.println('a'+1);將輸出98,即將'a'轉(zhuǎn)換成了ASCII碼表中對應(yīng)的十進(jìn)制整數(shù)97。5.String型的+操作String型可以用運算符+與其他類型的變量或數(shù)據(jù)進(jìn)行連接,這里的+運算符不再是數(shù)字相加的意思,而是連接。字符串與任何其他類型進(jìn)行+運算,結(jié)果都是字符串類型。字符串出現(xiàn)在+的左邊或右邊均可。6.byte型參與算術(shù)運算兩個byte型變量進(jìn)行算術(shù)運算,結(jié)果會自動轉(zhuǎn)換為int型,若將運算結(jié)果賦給byte型變量將會報錯。代碼如下所示。

bytenum1=10;

bytenum2=20;

bytenum3=num1+num2;

//報錯

intnum4=num1+num2;

//正確2.3.3比較運算符比較運算符又稱為關(guān)系運算符,用于值或變量之間的比較,運算結(jié)果為布爾型。表2.5所示為Java支持的比較運算符,表格中的示例假設(shè)整型變量A的值為10,變量B的值為20。2.3.4邏輯運算符多個運算結(jié)果為布爾類型的表達(dá)式,如比較運算表達(dá)式,可以通過邏輯運算符進(jìn)一步組合成邏輯運算表達(dá)式,最終返回結(jié)果仍然是布爾類型。表2.6所示為邏輯運算符及其基本運算規(guī)則,假設(shè)布爾變量A代表第一個表達(dá)式的結(jié)果,為true;變量B代表第二個表達(dá)式的結(jié)果,為false。&&與&的運算結(jié)果相同,但過程可能不一樣,&&有“短路”效果,&沒有;同樣||與|運算結(jié)果相同,但||有“短路”效果,|沒有。所謂“短路”,就是計算完&&或||表達(dá)式的左邊第一個表達(dá)式的布爾結(jié)果后,直接給出最終結(jié)果,不再計算&&或||表達(dá)式的右邊的表達(dá)式的現(xiàn)象。對&&來講,計算&&左邊的表達(dá)式結(jié)果為false,則直接返回結(jié)果false,不再計算&&右邊的表達(dá)式。對||來講,計算||左邊的表達(dá)式結(jié)果為true,則直接返回結(jié)果true,不再計算||右邊的表達(dá)式。下面這個案例可以體現(xiàn)&&及||的“短路”效果;public

static

voidmain(String[]args)

{

intx=

3;

inty=

4;

booleanb1=

((x++

==

4)

&

(y++

==

4)); System.out.println("x:"

+x+

"y:"

+y+

"b1="

+b1);//分析結(jié)果,顯然y++有執(zhí)行到,故沒有發(fā)生"短路" x=

3; y=

4;

booleanb2=

((x++

==

4)

&&

(y++

==

4)); System.out.println("x:"

+x+

"y:"

+y+

"b2="

+b2);//分析結(jié)果,顯然y++沒有執(zhí)行到,故發(fā)生了"短路" x=

3; y=

4;

booleanb3=

((x++

==

3)

|

(y++

==

4)); System.out.println("x:"

+x+

"y:"

+y+

"b3="

+b3);//分析結(jié)果,顯然y++有執(zhí)行到,故沒有發(fā)生"短路" x=

3; y=

4;

booleanb4=

((x++

==

3)

||

(y++

==

4)); System.out.println("x:"

+x+

"y:"

+y+

"b4="

+b4);//分析結(jié)果,顯然y++沒有執(zhí)行到,故發(fā)生了"短路"}運行結(jié)果如下:x:4y:5b1=falsex:4y:4b2=falsex:4y:5b3=truex:4y:4b4=true“短路”的好處是可以省略不必要的運算,提高性能。2.3.5位運算符Java定義了位運算符,是對二進(jìn)制數(shù)的每一位進(jìn)行運算的符號,有按位與、按位或、按位異或、按位取反及移位操作,其中移位操作又分為左移、右移、無符號右移。byte、short、int、long型整數(shù)均可進(jìn)行位運算。整數(shù)進(jìn)行位運算時,需要轉(zhuǎn)換為二進(jìn)制補碼再進(jìn)行運算,運算結(jié)果也是補碼。1.原碼二進(jìn)制的左邊最高位表示符號位,最高位為0代表正數(shù),為1代表負(fù)數(shù),其余位數(shù)表示絕對數(shù)值,這就是原碼。例如,00000011表示正數(shù)3,10000011表示負(fù)數(shù)-3。用原碼表示的值叫真值。2.補碼正數(shù)的補碼就是其本身。負(fù)數(shù)的補碼是在其原碼的基礎(chǔ)上,符號位不變,其余各位取反,再加1。3.補碼轉(zhuǎn)換為原碼對于正數(shù)補碼:原碼等于補碼。對于負(fù)數(shù)補碼:補碼符號位不變其余位取反,再加1,結(jié)果即為原碼(真值)。【示例】(1)int型整數(shù)10,求其補碼。先求整數(shù)10的原碼,注意int型是32位的:00000000000000000000000000001010。由于它是正數(shù),因此補碼等于原碼,上面就是結(jié)果。(2)int型整數(shù)-10,求其二進(jìn)制補碼。先求-10的原碼1:10000000000000000000000000001010。符號位保持1不變,其余位取反加1,結(jié)果是:11111111111111111111111111110110。(3)已知補碼11111111111111111111111111110110,求其真值(即原碼)。最高位為1,表明是負(fù)數(shù),符號位不變,其余位取反加1,結(jié)果是:10000000000000000000000000001010,表示負(fù)數(shù)-10。位運算是按二進(jìn)制的補碼形式進(jìn)行的,運算結(jié)果也是補碼,最后需要轉(zhuǎn)換為原碼得到真值。4.按位與運算符為&,是二元運算符,兩個操作數(shù)如果對應(yīng)位都是1,則結(jié)果為1,否則為0?!臼纠績蓚€int型整數(shù)A=60、B=13,手算求A&B。首先將A、B分別轉(zhuǎn)換為二進(jìn)制補碼(注意,int型占32位)。A=00000000000000000000000000111100B=00000000000000000000000000001101然后將對應(yīng)位一一進(jìn)行按位與運算。運算過程與結(jié)果:00000000000000000000000000111100&0000000000000000000000000000110100000000000000000000000000001100將結(jié)果轉(zhuǎn)換為原碼,表示十進(jìn)制數(shù)12。5.按位或運算符為|,是二元運算符,兩個操作數(shù)如果對應(yīng)位都是0,則結(jié)果為0,否則為1?!臼纠績蓚€int型整數(shù)A=60、B=13,手算求A|B。首先將A、B分別轉(zhuǎn)換為二進(jìn)制補碼(注意,int型占32位)。A=00000000000000000000000000111100B=00000000000000000000000000001101然后將對應(yīng)位一一進(jìn)行按位或運算。運算過程與結(jié)果:00000000000000000000000000111100|0000000000000000000000000000110100000000000000000000000000111101將結(jié)果轉(zhuǎn)換為原碼,表示十進(jìn)制數(shù)61。6.按位異或運算符為^,是二元運算符,兩個操作數(shù)如果對應(yīng)位相同,

溫馨提示

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

評論

0/150

提交評論