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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第一章

Java程序設計入門本章將介紹Java語言的基本情況、如何搭建Java開發環境、如何編寫一個Java程序、集成開發環境Eclipse的使用以及簡單的輸出語句。Java第一章Java程序設計入門.pptxJava第二章Java語言基礎.pptxJava第三章流程控制.pptxJava第四章方法與數組.pptxJava第五章面向對象基礎.pptxJava第六章深入面向對象.pptxJava第七章常用類.pptxJava第八章異常.pptxJava第九章集合類.pptxJava第十章File與IO流.pptxJava第十一章多線程.pptxJava第十二章圖形用戶界面.pptxJava第十三章網絡編程.pptxJava第十四章反射.pptx本章指引Java概述01搭建Java開發環境02第一個Java程序03環境變量配置04050607集成開發環境Eclipse輸出語句上機實驗1.1Java概述

Java是一種使用廣泛的計算機編程語言,它擁有跨平臺、面向對象、泛型編程等特性,被廣泛應用于企業級的Web應用開發和移動應用開發中。1.1.1Java語言簡介1.1.2Java語言的優點1.1.3Java的版本3

1.1.1Java語言簡介

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

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

當前Java的主要應用領域包括企業級應用系統開發、Web網站開發、分布式系統開發、嵌入式系統開發、桌面應用程序開發、游戲開發、安卓App開發等。在國內,比起其他編程語言,Java程序員的數量是最多的,社區和資源也最為豐富。51.1.2Java語言的優點Java具有簡單、面向對象、跨平臺、多線程、安全、動態等優點。1.簡單

Java語言簡單,是指這門語言既易學,又好用。Java要比C++簡單,C++中許多容易混淆的概念,或者被Java棄之不用了,或者以一種更清楚、更容易理解的方式實現。例如,Java不再有指針的概念。2.面向對象面向對象編程更符合人的思維模式,使人們更容易編寫程序。Java語言與其他面向對象語言一樣引入了類的概念。類是用來創建對象的模板,它包含被創建的對象的狀態描述和方法的定義。63.跨平臺與平臺無關是Java語言最大的優勢。使用Java編寫的程序可以在任何安裝了JVM的計算機上正確地運行,實現了“一次編寫,處處運行”的目標。4.多線程Java的優點之一就是支持多線程。多線程允許同時完成多個任務。實際上多線程使人產生多個任務在同時執行的錯覺,目前計算機的處理器在同一時刻只能執行一個線程,但處理器可以在不同的線程之間快速地切換。由于處理器的速度非常快,遠遠超過人接收信息的速度,因此給人多個任務在同時執行的感覺。75.安全

當用戶使用支持Java的瀏覽器時,可以放心地運行Java的小應用程序JavaApplet,不必擔心病毒的感染和其他惡意的企圖。Java小應用程序將被限制在Java運行環境中,不允許它訪問計算機的其他部分。6.動態Java程序的基本組成單元是類。其中,有些類是自己編寫的,有些類是從類庫中引入的,而類又是運行時動態裝載的,這就使得Java可以在分布式環境中動態地維護程序及類庫。而C++每當其類庫升級之后,相應的程序都必須重新修改、編譯。8

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

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

1.2.1JDK與跨平臺

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

System.out.println("44\t55\t66");輸出結果如圖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--------------------");}}結果如圖1.27所示62【示例】輸出超市購物小票。代碼如下。publicclassGoodsList{publicstaticvoidmain(String[]args){System.out.println("\t購物清單");System.out.println("*****************************");System.out.print("商品名稱\t購買數量\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("*****************************");}}輸出結果如圖1.28所示。

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

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

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

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

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

修飾符class類名{

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

//一行或多行代碼

}

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

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

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

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

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

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

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

static

voidmain(String[]args)

{

intnum1=10;

doublenum2=20.5;

num1+=num2;

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

}

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

static

voidmain(String[]args)

{

intnum1=10;

doublenum2=20.5;

floatnum3=30.5f;

doublesum=num1+num2+num3;

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

}

num1+num2+num3是int、float、double這3種類型參與運算,結果取其中取值范圍最大的類型,即double型,所以運算結果要賦給double型變量。2.除法與求余在使用除法運算符的時候需要注意,當除法的兩個操作數都是整數時,除法的結果也是整數,相當于整除。例如,5/2的結果是2,而不是2.5。如下:System.out.println(5/2);//輸出2為了實現浮點數的除法,其中一個操作數必須是浮點數。例如,5.0/2的結果是2.5。如下:System.out.println(5.0/2);//輸出2.5兩個整型變量(a=5、b=2)相除(即a/b),其結果是整數2,而不是2.5。要得到2.5的結果,方法是將a、b中的其中一個變量乘以1.0,如a*1.0/b。運算符%被稱為求余或者取余運算符,可以求得除法的余數。如4%2的余數為0,5%3的余數為2。運算符%通常用在正整數上,實際上,它也可用于負整數和浮點數。但只有被除數(%左邊的數)是負數時,余數才是負的。例如,7%3和7%-3的結果都是1,而-7%3和-7%-3的結果都是-1,顯然求余結果的正負與除數(%右邊的數)的正負無關。代碼示例如下。3.自增、自減自增++和自減--運算符是特殊的算術運算符,分別表示操作數的值增加1或減少1。注意,操作數只能是變量,不能是數值。在一般算術運算符中至少需要兩個操作數來進行運算,如加法運算a+b,a是第一個操作數,b是第二個操作數,少一個就無法實現。而自增自減運算符只需要一個操作數,如自增運算a++只有一個操作數a,a++即a自增,相當于a=a+1;同理,a--即a自減,相當于a=a-1。至少需要兩個操作數才能構成運算表達式的運算符稱為“二元運算符”,至少需要3個操作數的運算符稱為“三元運算符”,只需要一個操作數的運算符稱為“一元運算符”。自增++和自減--運算符是一元運算符。自增、自減運算符既可以放在操作數的前面,也可以放在操作數的后面。自增、自減運算及其操作數既可以單獨構成一條語句,也可以參與到運算表達式中。(1)第一種情形:自增、自減運算及其操作數單獨構成一條語句。這時無論自增、自減運算符放在操作數(變量)的前面還是后面結果都一樣,操作數(變量)都自增或自減1。(2)第二種情形:自增、自減運算符及其操作數參與到運算表達式中。根據自增、自減運算符在操作數(變量)的左側或右側分為以下兩種情況。自增、自減運算符在變量左側:如++a,先對變量進行自增操作,再使該變量參與表達式運算。自增、自減運算符在變量右側:如a++,先使變量參與表達式運算,再對該變量進行自增操作。在Java程序中靈活運用自增、自減運算符可以提高代碼的簡潔性,也可以結合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型參與算術運算char型也可以參與算術運算,將被自動轉換成ASCII碼表中對應的十進制整數來處理。例如,System.out.println('a'+1);將輸出98,即將'a'轉換成了ASCII碼表中對應的十進制整數97。5.String型的+操作String型可以用運算符+與其他類型的變量或數據進行連接,這里的+運算符不再是數字相加的意思,而是連接。字符串與任何其他類型進行+運算,結果都是字符串類型。字符串出現在+的左邊或右邊均可。6.byte型參與算術運算兩個byte型變量進行算術運算,結果會自動轉換為int型,若將運算結果賦給byte型變量將會報錯。代碼如下所示。

bytenum1=10;

bytenum2=20;

bytenum3=num1+num2;

//報錯

intnum4=num1+num2;

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

static

voidmain(String[]args)

{

intx=

3;

inty=

4;

booleanb1=

((x++

==

4)

&

(y++

==

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

+x+

"y:"

+y+

"b1="

+b1);//分析結果,顯然y++有執行到,故沒有發生"短路" x=

3; y=

4;

booleanb2=

((x++

==

4)

&&

(y++

==

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

+x+

"y:"

+y+

"b2="

+b2);//分析結果,顯然y++沒有執行到,故發生了"短路" x=

3; y=

4;

booleanb3=

((x++

==

3)

|

(y++

==

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

+x+

"y:"

+y+

"b3="

+b3);//分析結果,顯然y++有執行到,故沒有發生"短路" x=

3; y=

4;

booleanb4=

((x++

==

3)

||

(y++

==

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

+x+

"y:"

+y+

"b4="

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論