Java程序設計培訓教程_第1頁
Java程序設計培訓教程_第2頁
Java程序設計培訓教程_第3頁
Java程序設計培訓教程_第4頁
Java程序設計培訓教程_第5頁
已閱讀5頁,還剩392頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Java官方培訓課程本書的主要目標是為你提供有關Java應用和Javaapplets的面向對象的程序設計所必需的知識和技能;并講授Java編程語言句法和面向對象的概念,以及Java運行環(huán)境的許多特性,對圖形用戶界面(GUIs)、多線程和網(wǎng)絡的支持等。本課程包括了參加SUNCertifiedJavaProgrammer和SUNCertifiedJavaDeveloper考試所必備的知識。一、課程概述課程概述本課程主要包括以下內容:Java編程語言句法應用于Java編程語言的面向對象的概念圖形用戶界面(GUI)編程創(chuàng)建Applet多線程網(wǎng)絡本課程首先討論了Java運行環(huán)境和Java編程語言句法,然后闡述了應用于Java編程語言的面向對象的概念;隨著課程的進展還將討論有關Java平臺的更先進的特性。本課程授課對象應具備運用Java編程語言或其它語言進行基本語言設計的能力,它是“非程序員Java編程”(“JavaProgrammingforNon—Programmers”,SL-110)課程的延續(xù)。盡管Java編程語言獨立于操作系統(tǒng),但它所產生的圖形用戶界面(GUI)卻可能依賴于執(zhí)行其代碼的操作系統(tǒng)。本課程中的例題所使用的代碼運行于SolarisTM操作系統(tǒng),因而本手冊中的圖形具備MotifGUI。如果將這些代碼運行于Windows95操作系統(tǒng),則可產生MicrosoftWindows95GUI。本課程的內容適用于所有Java操作系統(tǒng)端口。二、課程圖每一模塊的課程都從一張課程圖開始,使學員可掌握自己的學習進度。全課程設置流程圖如下所示:三、各模塊概述各模塊概述模塊1──起步模塊2──標識符、關鍵字和類型模塊3──表達式和流程控制模塊4──數(shù)組模塊5──對象和類模塊6──高級語言特性模塊7──異常模塊8──建立GUIs模塊9──AWT事件模型模塊10──AWT組件庫模塊11──Java基礎類模塊12──JavaApplets介紹模塊13──線程模塊14──流式I/O和文件模塊15──網(wǎng)絡模塊1──起步本模塊概述了Java編程語言的主要特性及Java應用程序,闡述了類和包的概念,并介紹了一些常用Java包。模塊2──標識符、關鍵字和類型Java編程語言及C語言類似,具有許多編程構造。本模塊對這些構造作了一般介紹并講授了每一構造所要求的一般句法。此外,還介紹了采用集合數(shù)據(jù)類型進行數(shù)據(jù)關聯(lián)的面向對象的方法。模塊3──表達式和流程控制本模塊介紹了包括運算符和Java程序控制句法在內的表達式。模塊4──數(shù)組本模塊講解了如何聲明、創(chuàng)建、初始化和拷貝Java數(shù)組。模塊5──對象和類本模塊是在模塊2的基礎上,對Java對象的概念作了進一步的闡述,包括重載、覆蓋、子類和構造函數(shù)。模塊6──高級語言特性本模塊是模塊5的繼續(xù),它進一步講解了Java面向對象的編程模塊,包括一些新的JDK1.1特性──降級和內部類。該模塊還介紹了在Java開發(fā)包JDKTM1.2中新增的收集的概念。模塊7──異常本模塊為Java程序員提供了一種在運行Java程序時俘獲錯誤的機制,并闡述了預定義異常和用戶定義異常。模塊8──建立GUIs在Java編程語言中,所有圖形用戶界面都是建立在框架和面板的概念之上。本模塊介紹了布局管理和容器的概念。模塊9──AWT事件模型Java編程語言1.1版的最重要的變化就是將事件送入和送出Java組件的方法的變化。本模塊闡述了JDK1.0和1.1的事件模型的區(qū)別,并演示了如何建立小型事件柄(compacteventhandler)的方法。模塊10──AWT組件庫本模塊介紹了用于建立JavaGUIs的抽象窗口工具包(AWT)組件,并演示了JavaAWT組件和1.1事件模型共同工作的方法。模塊11──Java基礎類介紹本模塊重點介紹了JDK1.2的一個重要特性──Java基礎類(JFC),闡述了Swing組件和它們的可插入式外觀及感覺的體系結構,并介紹了一例基本的Swing應用及JFC的其它特點,例如在二維圖形、存取性及拖放(Draganddrop)等方面的應用。模塊12──JavaApplets介紹本模塊演示了applet和應用程序開發(fā)之間的區(qū)別,并介紹了JDK1.2的聲音增強功能.模塊13──線程線程是一個復雜的論題。本模塊闡述了及Java編程語言相關的線程問題,并介紹了一個簡單的線程通信和同步傳輸實例。模塊14──流式I/O和文件本模塊闡述了既可讀寫數(shù)據(jù)又可讀寫文本文件的類,并介紹了對象流的概念。模塊15──網(wǎng)絡本模塊介紹了Java網(wǎng)絡編程包并演示了傳輸控制協(xié)議/Internet協(xié)議(TCP/IP)客戶──服務器模型。四、課程目標完成本課程的學習后,你應該能夠:描述語言的主要特性編譯并運行Java應用程序理解和使用在線超文本Java技術文件描述語言句法元素和構造理解面向對象的例子并使用該語言的面向對象特性理解并使用異常開發(fā)圖形用戶界面描述Java技術平臺上的用于建立GUIs的抽象窗口工具包從GUI輸入理解事件處理描述Swing的主要特性開發(fā)Javaapplets讀寫文件和其它數(shù)據(jù)源在不使用GUI的情況下,對所有數(shù)據(jù)源執(zhí)行輸入輸出理解多線程基礎開發(fā)多線程Java應用程序和applets使用TCP/IP和用戶數(shù)據(jù)報協(xié)議(UDP)開發(fā)客戶和服務器程序五、從各模塊中所獲得的技能下表的左側顯示有關的Java應用程序編程技能,右側的黑格表示出講解其左側相應技能的有關模塊,而灰格則表示簡述其左側相應技能的有關模塊。ModuleSkillsGained123456789101112131415DescribeKeylanguagefeaturesCompileandrunaJavaapplicationUnderstandandusetheonlinehypertextJavatechnologydocumentationDescribelanguagesyntacticelementsandconstructsUnderstandtheobject-orientedparadigmanduseobject-orientedfeaturesUnderstandanduseexceptionsDevelopaGUIDescribetheJavatechnologyplatform’sAbstractWindowToolkitfromwhichGUIsarebuiltTakeinputfromagraphicaluserinterfaceUnderstandeventhandlingDescribethemainfeaturesofSwingDevelopJavaappletsUnderstandthebasicsofmultithreadingDevelopmultithreadedJavaapplicationsandappletsPerformI/OtoallsourceswithouttheuseofaGUIReadandwritetofilesandotherdatasourcesDevelopJavaclientandserverprogramsusingTCP/IPandUDP六、課時安排下表給出了大致的課程進度ModuleDayDayDayDayDay12345AboutThisCourseA.M.Module1-GettingStartedA.M.Module2-Identifiers,Keywords,andTypesA.M.Module3-ExpressionsandFlowControlP.M.Module4-ArraysP.M.Module5-ObjectsandClassesA.M.Module6-AdvancedLanguageFeaturesP.M.Module7-ExceptionsA.M.Module8-BuildingGUIsA.M.Module9-TheAWTEventModelP.M.Module10-TheAWTComponentLibraryA.M.Module11-IntroductiontoJFCA.M.Module12-IntroductiontoAppletsP.M.Module13-ThreadsA.M.Module14-StreamI/OandFilesP.M.Module15-NetworkingP.M.七、未包括的論題未包括的論題一般編程概念。本課程不是為從未參及過編程的人員而設置。一般面向對象概念。本課程未包括的論題見上表,由SUNEducationalServices(SES)提供的其它課程包括了上述論題。面向對象的概念──見OO-100:面向對象的技術和概念面向對象的設計和分析──見OO-120面向對象的設計和分析一般編程概念──見SL-110:非程序員Java編程八、如何做好準備?如何做好準備?在學習本課程前,你應該已經(jīng)完成了下列內容的學習:SL-110非程序員Java編程用C或C++創(chuàng)建編譯程序用文本編輯器創(chuàng)建并編輯文本文件使用WorldWideWeb(WWW)瀏覽器,如NetscapeNavigatorTM在學習本課程前,你應該已經(jīng)完成了下列內容的學習:SL-110非程序員Java編程或能夠:用C或C++創(chuàng)建編譯程序用文本編輯器創(chuàng)建并編輯文本文件使用WorldWideWeb(WWW)瀏覽器,如NetscapeNavigatorTM九、自我介紹:自我介紹姓名公司職務、職責編程經(jīng)歷參及本課程學習的原因對本課程的預期現(xiàn)在你已經(jīng)進入本課程的學習,請互相介紹并填寫上面的表格。十、如何使用本教材如何使用本教材課程圖相關問題頁頭圖教程練習檢查你的進度思考題為使你學好本課程,本教材采用了包括下列主要項目的授課模式:課程圖──每一模塊都從內容概述開始,這樣你就可以了解該模塊在實現(xiàn)整個課程目標中所起的作用。相關問題──每一模塊的相關問題部分提供給你一些有關該模塊的問題供學習者之間進行討論,并鼓勵你思考在Java應用程序編程過程中你的興趣及該模塊內容的關系頁頭圖──頁頭圖可幫助你及時而輕松的跟上教師的進度。它并不是在每一頁都出現(xiàn)教程──教師將為你提供有關模塊的特有信息,這些信息將有助于你掌握做練習所需要的知識和技能練習──練習將為你提供測試你的技能和應用所學概念的機會。本教程中所提供的例題代碼亦有助于你完成練習。檢查你的進度──在這一部分,模塊的目標被重新提及,有時是以問題形式出現(xiàn)。這樣,在你進入下一模塊之前,就可以檢查你是否已完成了目前這一模塊所要求達到的目標。思考題──具有挑戰(zhàn)性的問題有助于你應用所學模塊內容或預測待學模塊的內容。十一、圖表和印刷體例說明下列圖表及印刷體例代表著不同的含義:輔助資源──表示可獲取輔助參考資料。討論──表示此時建議以小組或班級形式進行討論。練習目標──表示練習的目標,這個練習適合于正在討論的內容。注意──附加重要信息、強調信息、有趣或特殊信息警告──對數(shù)據(jù)或機器的潛在損壞印刷體例字體Courier系用來表示命令名稱、文件名及目錄名,同時也表示計算機屏幕輸出。例如:Usels–altoallfiles.System%Youhavemail黑體courierbold系用來表示你打印的字符和數(shù)字。例如:system%suPassword:斜體courieritalic系用來表示變量和命令行,它可以被實際名稱或值所代替。例如:Todeleteafile,typerm.斜體Palatino系用來表示書名、新詞或術語或需強調的詞。例如:ReadChapter6inUser’sGuide.ThesearecalledclassoptionsYoumustberoottodothis.起步本模塊對Java編程語言做了一般性描述,包括Java虛擬機、垃圾收集和安全性等。相關問題討論──下列問題及本模塊相關Java編程語言是一種完整的語言嗎?它是不是僅用于編寫Web程序?你為什么需要另一種編程語言?Java平臺是如何在其它語言平臺上提高性能的?目標完成本模塊的學習后,你應該能夠:描述Java編程語言的主要特性描述Java虛擬機的主要功能描述垃圾收集是如何進行的列舉由處理代碼安全性的Java平臺所執(zhí)行的三大任務定義Class,Package,Applets和Applications編寫、編譯并運行簡單Java應用程序利用Java技術應用程序編程界面(API)的在線文檔來標識Java.lang包的方法。參考資料輔助資源──下列參考資料可為本模塊所討論的問題提供更詳細的補充LindholmandYellin.1997.TheJavaVirtualMachineSpecification.Addison-Wesley.Yellin,Frank.Low-LevelSecurityinJava,whitepaper.[Online].Available:.什么是Java編程語言?什么是Java編程語言Java是:一種編程語言一種開發(fā)環(huán)境一種應用環(huán)境一種部署環(huán)境句法及C++相似,語義及SmallTalk相似用來開發(fā)applets,又用來開發(fā)applicationsJava是:一種編程語言一種開發(fā)環(huán)境一種應用環(huán)境一種部署環(huán)境Java編程語言的句法及C++的句法相似,語義則及SmallTalkTM的語義相似。Java編程語言可被用來創(chuàng)建任何常規(guī)編程語言所能創(chuàng)建的應用程序。在WorldWideWeb(WWW)和能夠運行稱為applets程序的瀏覽器的有關介紹中,人們經(jīng)常提及Java編程語言。Applets是一種貯存于WWW服務器的用Java編程語言編寫的程序,它通常由瀏覽器下載到客戶系統(tǒng)中,并通過瀏覽器運行。Applets通常較小,以減少下載時間,它由超文本標識語言(HTML)的Web頁來調用。Javaapplications是一種獨立的程序,它不需要任何Web瀏覽器來執(zhí)行。它們是一種典型的通用程序;可運行于任何具備Java運行環(huán)境的設備中。1.3.1Java編程語言的主要目標Java編程語言的主要目標提供一種解釋環(huán)境為提高開發(fā)速度代碼可移植性使用戶能運行不止一個活動線程當程序運行時,能動態(tài)支持程序改變提供更好的安全性設計Java編程語言的主要目標是提供一種易于編程的語言,從而消除其它語言在諸如指針運算和存儲器管理方面影響健壯性的缺陷。利用面向對象的概念使程序真正地成為可視化程序為使代碼盡可能清晰合理、簡明流暢提供了一種方法Java編程語言的主要目標設計Java編程語言的主要目標是提供一種易于編程的語言消除其它語言在諸如指針運算和存儲器管理方面影響健壯性的缺陷。利用面向對象的概念使程序真正地成為可視化程序為使代碼盡可能清晰合理、簡明流暢提供了一種方法Java編程語言的主要目標(續(xù))為獲得如下兩點益處提供一種解釋環(huán)境提高開發(fā)速度──消除編譯─鏈接—裝載—測試周期。代碼可移植性──使操作系統(tǒng)能為運行環(huán)境做系統(tǒng)級調用為運行不止一個活動線程的程序提供了一種方式通過允許下載代碼模塊,從而當程序運行時也能動態(tài)支持程序改變。為那些保證安全性而裝載的代碼模塊提供了一種檢查方法。Java編程語言的主要目標下列特性使這些目標付諸實現(xiàn):Java虛擬機(JVM)垃圾收集代碼安全性Java編程語言的主要目標(續(xù))精心開發(fā)的Java技術體系結構為上述目標的實現(xiàn)提供了保證。Java的如下特性使這些目標得以實現(xiàn)Java虛擬機垃圾收集代碼安全性1.3.2Java虛擬機Java虛擬機提供硬件平臺規(guī)范解讀獨立于平臺的已編譯的字節(jié)碼可當作軟件或硬件來實現(xiàn)可在Java技術開發(fā)工具或Web瀏覽器上實現(xiàn)Java虛擬機規(guī)范為Java虛擬機(JVM)作了如下定義:在真實機器中用軟件模擬實現(xiàn)的一種想象機器。Java虛擬機代碼被存儲在.class文件中;每個文件都包含最多一個public類。Java虛擬機規(guī)范為不同的硬件平臺提供了一種編譯Java技術代碼的規(guī)范,該規(guī)范使Java軟件獨立于平臺,因為編譯是針對作為虛擬機的“一般機器”而做,這個“一般機器”可用軟件模擬并運行于各種現(xiàn)存的計算機系統(tǒng),也可用硬件來實現(xiàn)。Java虛擬機JVM為下列各項做出了定義指令集(中央處理器[CPU])注冊集類文件格式棧垃圾收集堆存儲區(qū)Java虛擬機(續(xù))編譯器在獲取Java應用程序的源代碼后,將其生成字節(jié)碼,它是為JVM生成的一種機器碼指令。每個Java解釋器,不管它是Java技術開發(fā)工具,還是可運行applets的Web瀏覽器,都可執(zhí)行JVM。JVM為下列各項做出了定義指令集(相當于中央處理器[CPU])注冊集類文件格式棧垃圾收集堆存儲區(qū)Java虛擬機由保持適當類型約束的字節(jié)碼形成代碼大部分類型檢查在編譯代碼時完成每個由SUNTM批準的JVM必須能夠運行任何從屬類文件Java虛擬機(續(xù))JVM的代碼格式由緊縮有效的字節(jié)碼構成。由JVM字節(jié)碼編寫的程序必須保持適當?shù)念愋图s束。大部分類型檢查是在編譯時完成。任何從屬的Java技術解釋器必須能夠運行任何含有類文件的程序,這些類文件應符合Java虛擬機規(guī)范中所指定的類文件格式。1.3.3垃圾收集垃圾收集垃圾收集不再需要的分配存儲器應取消分配在其它語言中,取消分配是程序員的責任Java編程語言提供了一種系統(tǒng)級線程以跟蹤存儲區(qū)分配垃圾收集可檢查和釋放不再需要的存儲器可自動完成上述工作可在JVM實現(xiàn)周期中,產生意想不到的變化許多編程語言都允許在程序運行時動態(tài)分配存儲器,分配存儲器的過程由于語言句法不同而有所變化,但總是要將指針返回到存儲區(qū)的起始位置當分配存儲器不再需要時(存儲器指針已溢出范圍),程序或運行環(huán)境應取消分配存儲器。在C,C++或其它語言中,程序員負責取消分配存儲器。有時,這是一件很困難的事情。因為你并不總是事先知道存儲器應在何時被釋放。當在系統(tǒng)中沒有能夠被分配的存儲器時,可導致程序癱瘓,這種程序被稱作具有存儲器漏洞。Java編程語言解除了程序員取消分配存儲器的責任,它可提供一種系統(tǒng)級線程以跟蹤每一存儲器的分配情況。在Java虛擬機的空閑周期,垃圾收集線程檢查并釋放那些可被釋放的存儲器。垃圾收集在Java技術程序的生命周期中自動進行,它解除了取消分配存儲器的要求,并避免了存儲器漏洞。然而,垃圾收集可在JVM實現(xiàn)的周期中,產生意想不到的變化。1.3.4代碼的安全性概述下圖顯示了Java技術的運行環(huán)境及其加強代碼安全性的方法。Java源程序文件通過“編譯”,在你的感覺中,就好象是將它們從程序員編寫的文本文件格式轉換成了一組字節(jié)碼。字節(jié)碼被存儲在.class文件中。構成Java軟件程序的字節(jié)碼在運行時被加載、校驗并在解釋器中運行。當運行applets時,字節(jié)碼可被下載,然后由建于瀏覽器中的JVM進行解釋。解釋器具備兩種功能,一是執(zhí)行字節(jié)碼,二是對底層硬件做適當調用。在一些使用Java技術的運行環(huán)境中,部分校驗過的字節(jié)碼被編譯成原始機器碼并直接運行于硬件平臺。這就使Java軟件代碼能夠以C或C++接近的速度運行,只是在加載時,因為要編譯成原始機器碼而略有延遲。注意--SUNMicrosystemsTM通過采用新的技術,使Java虛擬機的性能已經(jīng)有了進一步的提高。這種新型虛擬機被稱為HotSpotTM虛擬機,它具備了使Java編程語言能象編譯C++一樣快速運行的潛力。HotSpot虛擬機對操作系統(tǒng)具有本地多線程支持能力,而不是虛擬多線程。因而,HotSpot虛擬機可保證對一個應用程序來說,并不一定有代碼才能使用這一能力。HotSpot技術解決了性能及移植性之間的難題。JavaJava運行環(huán)境執(zhí)行三大任務加載代碼校驗代碼執(zhí)行代碼代碼安全性(續(xù))Java運行環(huán)境一個Java技術的運行環(huán)境可運行為JVM編譯的代碼并執(zhí)行如下三大任務:加載代碼-由類加載器執(zhí)行校驗代碼-由字節(jié)碼校驗器執(zhí)行執(zhí)行代碼-由運行時的解釋器執(zhí)行類加載器類加載器為程序的執(zhí)行加載所需要的全部類。類加載器將局部文件系統(tǒng)的類名空間及來自網(wǎng)絡源的類名空間相分離,以增加安全性。由于局部類總是首先加載,因而可限制任何“特洛依木馬”的應用。當全部類被加載后,可執(zhí)行文件的存儲器格式被確定。這時,特定的存儲器地址被分配給符號引用并創(chuàng)建檢索表格。由于存儲器格式在運行時出現(xiàn),因而Java技術解釋器增加了保護以防止對限制代碼區(qū)的非法進入。字節(jié)碼校驗可保證代碼符合JVM規(guī)范代碼不破壞系統(tǒng)完整性代碼不會引起操作數(shù)棧上溢或下溢所有操作代碼的參數(shù)類型的準確性無非法數(shù)據(jù)轉換(整數(shù)到指針的轉換)代碼安全性(續(xù))字節(jié)碼校驗器Java軟件代碼在實際運行之前要經(jīng)過幾次測試。JVM將代碼輸入一個字節(jié)碼校驗器以測試代碼段格式并進行規(guī)則檢查--檢查偽造指針、違反對象訪問權限或試圖改變對象類型的非法代碼。注意所有源于網(wǎng)絡的類文件都要經(jīng)過字節(jié)碼校驗器代碼安全性(續(xù))校驗過程字節(jié)碼校驗器對程序代碼進行四遍校驗,這可以保證代碼符合JVM規(guī)范并且不破壞系統(tǒng)的完整性。如果校驗器在完成四遍校驗后未返回出錯信息,則下列各點可被保證:類符合JVM規(guī)范的類文件格式無訪問限制違例代碼未引起操作數(shù)棧上溢或下溢所有操作代碼的參數(shù)類型將總是正確的無非法數(shù)據(jù)轉換發(fā)生,如將整數(shù)轉換為對象引用對象域訪問是合法的一個基本的Java應用程序象其它編程語言一樣,Java編程語言也被用來創(chuàng)建應用程序。一個共同的小應用程序范例是在屏幕上顯示字串“HelloWorld!”。下列代碼給出了這個Java應用程序。1.4.1HelloWorldApp1.//2.//SampleHelloWorldapplication3.//4.publicclassHelloWorldApp{5.publicstaticvoidmain(Stringargs[]){6.System.out.println("HelloWorld!");7.}8.}以上程序行是在你的屏幕上打印“HelloWorld!”所需的最少組件。1.4.2描述HelloWorldApp第1-3行程序中的1-3行是注釋行1//2//SampleHelloWorldapplication3//第4行第4行聲明類名為HelloWorldApp。類名(Classname)是在源文件中指明的,它可在及源代碼相同的目錄上創(chuàng)建一個classname·class文件。在本例題中,編譯器創(chuàng)建了一個稱為HelloWorldApp.class的文件,它包含了公共類HelloWorldApp的編譯代碼。4publicclassHelloWorldApp{第5行第5行是程序執(zhí)行的起始點。Java技術解釋器必須發(fā)現(xiàn)這一嚴格定義的點,否則將拒絕運行程序。其它程序語言(特別是C和C++)也采用main()聲明作為程序執(zhí)行的起始點。此聲明的不同部分將在本課程的后幾部分介紹。如果在程序的命令行中給出了任何自變量,它們將被傳遞給main()方法中被稱作args的String數(shù)組。在本例題中,未使用自變量。5publicstaticvoidmain(Stringargs[]){public-方法main()可被任何程序訪問,包括Java技術解釋器。static-是一個告知編譯器main()是用于類HelloWorldApp中的函數(shù)的關鍵字。為使main()在程序做其它事之前就開始運行,這一關鍵字是必要的。void-表明main()不返回任何信息。這一點是重要的,因為Java編程語言要進行謹慎的類型檢查,包括檢查調用的方法確實返回了這些方法所聲明的類型。Stringargs-是一個String數(shù)組的聲明,它將包含位于類名之后的命令行中的自變量。javaHelloWorldAppargs[0]args[1]····第6行第6行聲明如何使用類名、對象名和方法調用。它使用由System類的out成員引用的PrintStreamout對象的println()方法,將字串“HelloWorld!”打印到標準輸出上。6System.out.println(“HelloWorld!”);在這個例子中,println()方法被輸入了一個字串自變量并將其寫在了標準輸出流上。第7-8行本程序的7-8行分別是方法main()和類HelloWorldApp的下括號。7}8}1.4.3編譯并運行HelloWorldApp編譯并運行HelloWorldApp編譯HelloWorldApp.javajavacHelloworldApp.java運行應用程序javaHelloWorldApp判定編譯和運行的共同錯誤編譯當你創(chuàng)建了HelloWorldApp.java源文件后,用下列程序行進行編譯:c:\student\javacHelloWorldApp.java如果編譯器未返回任何提示信息,新文件HelloWorldApp.class則被存儲在及源文件相同的目錄中,除非另有指定。如果在編譯中遇到問題,請參閱本模塊的查錯提示信息部分。運行為運行你的HelloWorldApp應用程序,需使用Java解釋器和位于bin目錄下的java:c:\student\javaHelloWorldAppHelloWorld!注意-必須設置PATH環(huán)境變量以發(fā)現(xiàn)java和javac,確認它包括c:\jdk1.2\bin1.4.4編譯查錯編譯時的錯誤以下是編譯時的常見錯誤javac:CommandnotfoundPATH變量未正確設置以包括javac編譯器。javac編譯器位于JDK目錄下的bin目錄。HelloWorldApp.java:6:Methodprintl(java.lang.String)notfoundinclassjava.io.PrintStream.System.out.printl("HelloWorld!");方法名println出現(xiàn)打印錯誤。InclassHelloWorldApp:mainmustbepublicorstatic該錯誤的出現(xiàn)是因為詞static或public被放在了包含main方法的行之外。運行時的錯誤can’tfindclassHelloWorldApp(這個錯誤是在打印javaHelloWorldApp時產生的)通常,它表示在命令行中所指定的類名的拼寫及文件的拼寫不同。Java編程語言是一種大小寫區(qū)別對待的語言。例如:publicclassHelloWorldapp創(chuàng)建了一個HellloWorldapp.class,它不是編譯器所預期的類名(HelloWorldApp.class)。命名如果·java文件包括一個公共類,則它必須使用及那個公共類相同的文件名。例如在前例中的類的定義是publicclassHelloWorldapp源文件名則必須是HelloWorldapp.java類計數(shù)在源文件中每次只能定義一個公共類。源文件布局源文件布局包含三個“頂級”要素一個可選擇的包聲明任意數(shù)量的輸入語句類和界面聲明一個Java源文件可包含三個“頂級”要素:一個包聲明(可選)任意數(shù)量的輸入語句類和界面聲明該三要素必須以上述順序出現(xiàn)。即,任何輸入語句出現(xiàn)在所有類定義之前;如果使用包聲明,則包聲明必須出現(xiàn)在類和輸入語句之前。類和包介紹類和包介紹什么是類和包?Java類庫中的幾個重要包java.iojava.util類是描述提供某種功能的模塊的一般術語。Java開發(fā)集(JDK)給出了一套標準的類(稱作類庫),這些類可執(zhí)行大部分所需的基本行為不僅為編程任務(例如,類可提供基本的數(shù)學函數(shù)、數(shù)組和字符串),而且為圖形和網(wǎng)絡。類庫被組織成許多包,每個包都包含幾個類。如下所列為一些重要的包:java.lang包含一些形成語言核心的類,如String、Math、Integer和Thread。java.awt包含了構成抽象窗口工具包(AWT)的類,這個包被用來構建和管理應用程序的圖形用戶界面。java.applet包含了可執(zhí)行applet特殊行為的類。包含執(zhí)行及網(wǎng)絡相關的操作的類和處理接口及統(tǒng)一資源定位器(URLs)的類。java.io包含處理I/O文件的類。java.util包含為任務設置的實用程序類,如隨機數(shù)發(fā)生、定義系統(tǒng)特性和使用及日期日歷相關的函數(shù)。使用JavaAPI文檔使用JavaAPI文檔一組超文本標識語言(HTML)文件提供了有關API的信息一個包包含了對所有類信息的超鏈接一個類文檔包括類層次、一個類描述、一組成員變量和構造函數(shù)等一組HTML文件以文檔的形式提供了有關API的信息,這個文檔的布局是等級制的,因而主頁列出所有的包為超鏈接。如果選中了一個特殊包的熱鏈接,作為那個包成員的類將被列出。從一個包頁選中一個類的熱鏈接將提交一頁有關那個類的信息。圖1-1顯示了這樣一個類文檔圖1-1一個類文檔的主要部分包括:類層次類和類的一般目的描述成員變量列表構造函數(shù)列表方法列表變量詳細列表及目的和用途的描述構造函數(shù)詳細列表及描述方法詳細列表及描述練習:基本任務練習目標--在本練習里,你將利用JavaAPI文檔練習如何識別包、類和方法并練習標準輸入輸出方法。你還將編寫、編譯和運行兩個簡單的使用這些方法的應用程序。一、準備理解本模塊中提出的概念和術語對理解文件和運用文件信息編寫程序至關重要。二、任務1級:閱讀文件你的老師將指導你如何啟動API瀏覽器并打開JavaAPI在線文檔的索引頁。找到java.lang包在此包中定義了那些類?在System類中有那些方法?System.out.println方法是在什么包中定義的?什么是標準輸入方法調用?2級:創(chuàng)建一個Java應用程序使用任意文本編輯器,創(chuàng)建一個可打印你選定的字串的及HelloWorldApp類似的應用程序。編譯程序并糾正錯誤。用解釋器運行程序。3級:使用標準輸入和標準輸出編寫一個稱為MyCat的應用程序,它將從stdin中讀出一行并將這一行寫回到stdout.無論stdin還是stdout都在java.lang.System類中。三、檢查你的進度在進入下一模塊之前,請確認你已經(jīng)能夠:描述Java編程語言的主要特性描述JVM描述垃圾收集是如何進行的列出由處理代碼安全性的Java平臺所執(zhí)行的三個任務定義術語類、包、applets和application編寫、編譯并運行一個簡單的Java應用程序使用Java技術應用程序編程界面(API)的在線文檔識別java.lang包中的方法。四、思考題使用Java編程語言將為你的工作帶來什么益處?第二章標識符、關鍵字和類型本模塊闡述了在Java技術程序中使用的基本元素,包括變量、關鍵字、原始類型和類類型。第一節(jié)相關問題討論──下列問題及本模塊闡述的論題相關。你是如何理解類的?你是如何理解一個對象的?第二節(jié)目標完成本模塊的學習后,你應該能夠:在一個源程序中使用聲明區(qū)分有效和無效標識符確認Java技術關鍵字列出八個原始類型為數(shù)字類型和文本類型定義文字值定義術語class、object、membervariable和referencevariable為一個簡單的包含原始成員變量的類創(chuàng)建一個類定義聲明類類型變量使用new構造一個對象描述缺省初始化使用點符號訪問一個對象的成員變量描述一個參考變量的意義規(guī)定分配類類型變量的結果注釋注釋三種允許的Java技術程序注釋風格//commentononeline/*commentononeormoreline*//**documentingcomment*/2.3.1概述有三種插入注釋的允許風格://commentononeline/*commentononeormoreline*//**documentingcomment*/緊放在聲明(變量、方法或類的聲明)之前的文檔注釋表明,注釋應該被放在自動生成的文檔中(由javadoc命令生成的HTML文件)以當作對聲明項的描述。注意有關這些注釋的格式和javadoc工具的使用,請見JDK1.2API文件的docs/tooldocs/win32目錄分號、塊和空白分號、塊和空白一個語句是一行用分號(;)終止的代碼totals=a+b+c+d+e+f;一個塊是以上括號和下括號為邊界的語句集合x=y+1y=x+1在Java編程語言中,語句是一行由分號(;)終止的代碼。例如totals=a+b+c+d+e+f;及下式相同total=a+b+c+d+e+f;一個塊(block)或一個復合語句是以上括號和下括號()為邊界的語句集合;塊語句也被用來組合屬于某個類的語句。分號、塊和空白(續(xù))分號、塊和空白一個塊可被用在一個類的定義中publicclassDateintday;intmonth;intyear;塊語句可被嵌套Java程序中允許任意多的空白語句塊可被嵌套。HelloWorldApp類由main方法構成,這個方法就是一個語句塊,它是一個獨立單元,單元本身可作為在類HelloWorldApp塊中的一組事務之一。其它一些塊語句或組的例子如下://ablockstatement{x=y+1;y=x+1;}Semicolons,Blocks,andWhitespace//ablockusedinaclassdefinitionpublicclassMyDate{intday;intmonth;intyear;}//anexampleofablockstatementnestedwithin//anotherblockstatementwhile(i<large){a=a+i;if(a==max){b=b+a;//nestedblockisherea=0;}}在源代碼元素之間允許空白,空白的數(shù)量不限。空白(包括空格、tabs和新行)可以改善你的對源代碼的視覺感受。{intx;x=23*54;}intxx=23+54;}第四節(jié)標識符標識符是賦予變量、類和方法的名稱可從一個字母、下劃線(_)或美元符號($)開始是大小寫區(qū)別對待的,且無最大長度在Java編程語言中,標識符是賦予變量、類或方法的名稱。標識符可從一個字母、下劃線(_)或美元符號($)開始,隨后也可跟數(shù)字。標識符是大小寫區(qū)別對待的并且未規(guī)定最大長度。有效標識符如下:identifieruserNameUser_name_sys_varl$changeJava技術源程序采用有效的16-bit雙字節(jié)字符編碼標準(Unicode),而不是8-bitASCII文本。因而,一個字母有著更廣泛的定義,而不僅僅是a到z和A到Z。謹慎對待非ASCII字符,因為Unicode可支持看似相同而實際不同的字符。標識符不能是關鍵字,但是它可包含一個關鍵字作為它的名字的一部分。例如,thisone是一個有效標識符,但this卻不是,因為this是一個Java關鍵字。Java關鍵字將在后面討論。注意──包含美元符號($)的關鍵字通常用的較少,盡管它在BASIC和VAX/VMS系統(tǒng)語言中有著廣泛的應用。由于它們不被熟知,因而最好避免在標識符中使用它們,除非有本地使用上的習慣或其他不得已的原因。第五節(jié)Java關鍵字表2-1列出了使用在Java編程語言中的關鍵字。abstractdoimplementsprivatethrowbooleandoubleimportprotectedthrowsbreakelseinstanceofpublictransientbyteextendsintreturntruecasefalseinterfaceshorttrycatchfinallongstaticvoidcharfinallynativesupervolatileclassfloatnewswitchwhilecontinuefornullsynchronizeddefaultifpackagethis關鍵字對Java技術編譯器有特殊的含義,它們可標識數(shù)據(jù)類型名或程序構造(construct)名。以下是有關關鍵字的重要注意事項:true、false和null為小寫,而不是象在C++語言中那樣為大寫。嚴格地講,它們不是關鍵字,而是文字。然而,這種區(qū)別是理論上的。無sizeof運算符;所有類型的長度和表示是固定的,不依賴執(zhí)行。goto和const不是Java編程語言中使用的關鍵字?;綣ava類型Java編程語言定義了八個原始類型邏輯類boolean文本類char整數(shù)類byte,short,int,long浮點類double,float2.6.1原始類型Java編程語言為八個原始數(shù)據(jù)類型和一個特殊類型定義了文字值。原始類型可分為四種:邏輯類boolean文本類char整數(shù)類byte,short,int,long浮點類double,float2.6.2基本Java類型1.邏輯類──boolean邏輯類邏輯類──booleanboolean數(shù)據(jù)類型有兩種文字值:true和false。例如:booleantruth=true;上述語句聲明變量truth為boolean類型,它被賦予的值為true。邏輯值有兩種狀態(tài),即人們經(jīng)常使用的“on”和“off”或“true”和“false”或“yes”和“no”,這樣的值是用boolean類型來表示的。boolean有兩個文字值,即true和false。以下是一個有關boolean類型變量的聲明和初始化:booleantruth=true;//declaresthevariabletruth//asbooleantypeandassignsit//thevaluetrue注意──在整數(shù)類型和boolean類型之間無轉換計算。有些語言(特別值得強調的是C和C++)允許將數(shù)字值轉換成邏輯值,這在Java編程語言中是不允許的;boolean類型只允許使用boolean值。2.文本類──char和String文本類──char和Stringchar代表一個16-bitUnicode字符必須包含用單引號(’’)引用的文字使用下列符號:‘a’‘\t’一個制表符‘\u’一個特殊的Unicode字符,應嚴格使用四個16進制數(shù)進行替換使用char類型可表示單個字符。一個char代表一個16-bit無符號的(不分正負的)Unicode字符。一個char文字必須包含在單引號內(‘’)?!產’‘\t’一個制表符‘\u’一個特殊的Unicode字符。應嚴格按照四個16進制數(shù)字進行替換String不是原始類型,而是一個類(class),它被用來表示字符序列。字符本身符合Unicode標準,且上述char類型的反斜線符號適用于String。及C和C++不同,String不能用\0作為結束。文本類──char和StringString不是一個原始數(shù)據(jù)類型,它是一個類具有用雙引號引用的文字“The

quickbrownfoxjumpedoverthelazydog.”可按如下情形使用:Stringgreeting=“GoodMorning!!\n”;Stringerr_meg=“recordnotfound!”;文本類──char和String(續(xù))String的文字應用雙引號封閉,如下所示:“The

quickbrownfoxjumpedoverthelazydog.”Char和String類型變量的聲明和初始化如下所示:charch=`A';//declaresandinitializesacharvariablecharch1,ch2;//declarestwocharvariables//declaretwoStringvariablesandinitializethemStringgreeting="GoodMorning!!\n";Stringerr_msg="RecordNotFound!";Stringstr1,str2;//declaretwoStringvariables2.6.3整數(shù)類──整數(shù)類整數(shù)類──byte,short,int,long采用三種進制──十進制、八進制和16進制2十進制值是2077首位的0表示這是一個八進制的數(shù)值0xBAAC首位的0x表示這是一個16進制的數(shù)值具有缺省int用字母“L”和“l(fā)”定義long在Java編程語言中有四種整數(shù)類型,每種類型可使用關鍵字byte,short,int和long中的任意一個進行聲明。整數(shù)類型的文字可使用十進制、八進制和16進制表示,如下所示:2十進制值是2077首位的0表示這是一個八進制的數(shù)值0xBAAC首位的0x表示這是一個16進制的數(shù)值注意──所有Java編程語言中的整數(shù)類型都是帶符號的數(shù)字。整數(shù)類──byte,short,int,long(續(xù))整數(shù)類文字屬int類型,除非在其后直接跟著一個字母“L”。L表示一個long值。請注意,在Java編程語言中使用大寫或小寫L同樣都是有效的,但由于小寫l及數(shù)字1容易混淆,因而,使用小寫不是一個明智的選擇。上述文字的long的形式如下:2L十進制值是2,是一個long077L首位的0表示這是一個八進制的數(shù)值0xBAACL前綴0x表示這是一個16進制的數(shù)值整數(shù)類──byte,short,int,long每個整數(shù)數(shù)據(jù)類型具有下列范圍:IntegerLengthNameorTypeRange8bitsbyte-27...27-116bitsshort-215...215-132bitint-231...231-164bitslong-263...263-1整數(shù)類──byte,short,int,long(續(xù))四個整數(shù)類型的長度和范圍如表2-2所示。范圍的表示是按Java編程語言規(guī)范定義的且不依賴于平臺。表2-2整數(shù)數(shù)據(jù)類型—范圍IntegerLengthNameorTypeRange8bitsbyte-27...27-116bitsshort-215...215-132bitint-231...231-164bitslong-263...263-12.6.4浮點──float和浮點──float和double缺省為double浮點文字包括小數(shù)點或下列各項之一E或e(增加指數(shù)值)F或f(float)D或d(double)14一個簡單的浮點值(adouble)02E23一個大浮點值2.718F一個簡單的float長度值123.4E+306D一個大的帶冗余D的double值浮點變量可用關鍵字float或double來聲明,下面是浮點數(shù)的示例。如果一個數(shù)字文字包括小數(shù)點或指數(shù)部分,或者在數(shù)字后帶有字母F或f(float)、D或d(double),則該數(shù)字文字為浮點。14一個簡單的浮點值(adouble)02E23一個大浮點值2.718F一個簡單的float長度值123.4E+306D一個大的帶冗余D的double值浮點──float和double浮點數(shù)據(jù)類型具有下列范圍:浮點長度名稱或類型32bitsfloat64bitsdouble浮點──float和double(續(xù))表2—3浮點數(shù)據(jù)類型──范圍浮點長度名稱或類型32bitsfloat64bitsdouble注意──浮點文字除非明確聲明為float,否則為double第七節(jié)變量、聲明和賦值Java技術規(guī)范的浮點數(shù)的格式是由電力電子工程師學會(IEEE)754定義的,它使用表2—3的長度,并且是獨立于平臺的。下列程序顯示了如何為整數(shù)、浮點、boolean、字符和string類型變量聲明和賦值。1.publicclassAssign{2.publicstaticvoidmain(Stringargs[]){3.intx,y;//declareint//variables4.floatz=3.414f;//declareandassign//float5.doublew=3.1415;//declareandassign//double6.booleantruth=true;//declareandassign//boolean7.charc;//declarecharacter//variable8.Stringstr;//declareString9.Stringstr1="bye";//declareandassign//Stringvariable10.c='A';//assignvaluetochar//variable11.str="Hioutthere!";//assignvalueto//Stringvariable12.x=6;13.y=1000;//assignvaluestointvariables1415.}16.}非法賦值舉例y=3.1415926;//3.1415926isnotanint.//Requirescastinganddecimalwill//betruncated.w=175,000;//thecommasymbol(,)cannotappeartruth=1;//acommonmistakemadebyex-C/C++//programmers.z=3.14156;//can'tfitdoubleintoa//Float.Requirescasting.第八節(jié)Java編碼約定JavaJava編碼約定類:classAccountBookclassComplexVariable界面:interfaceAccount方法:balanceAccount()addComplex()Java編程語言的一些編碼約定是:classes──類名應該是名詞,大小寫可混用,但首字母應大寫。例如:classAccountBookclassComplexVariableinterface──界面名大小寫規(guī)則及類名相同。interfaceAccountmethod──方法名應該是動詞,大小寫可混用,但首字母應小寫。在每個方法名內,大寫字母將詞分隔并限制使用下劃線。例如:balanceAccount()addComplex()JavaJava編碼約定變量currentCustomer常量HEAD-COUNTMAXIMUM-SIZEJava編碼約定Variables──所有變量都可大小寫混用,但首字符應小寫。詞由大寫字母分隔,限制用下劃線,限制使用美元符號($),因為這個字符對內部類有特殊的含義。currentCustomer變量應該代表一定的含義,通過它可傳達給讀者使用它的意圖。盡量避免使用單個字符,除非是臨時“即用即扔”的變量(例如,用i,j,k作為循環(huán)控制變量)constant──原始常量應該全部大寫并用下劃線將詞分隔;對象常量可大小寫混用。HEAD-COUNTMAXIMUM-SIZEcontrolstructures──當語句是控制結構的一部分時,即使是單個語句也應使用括號({})將語句封閉。例如:if(condition){dosomething}else{dosomethingelse}spacing──每行只寫一個語句并使用四個縮進的空格使你的代碼更易讀。comments──用注釋來說明那些不明顯的代碼段落;對一般注釋使用//分隔符,而大段的代碼可使用/*···*/分隔符。使用/**···*/將注釋形成文檔,并輸入給javadoc以生成HTML代碼文檔。//Acommentthattakesuponlyoneline./*Commentsthatcontinuepastonelineandtakeupspaceonmultiplelines...*//**Acommentfordocumentationpurposes.@seeAnotherclassformoreinformation*/注意──@see是一個有關類或方法的特殊的javadoc標記符(”seealso”)。有關javadoc的詳細資料,請參見“TheDesignofDistributedHyperlinkedProgrammingDocumentation”(Lisa著)的有關文檔系統(tǒng)的完整定義。該資料可從下列地址獲得:.第九節(jié)理解對象理解對象理解對象回顧對象的歷史創(chuàng)建一個新的類型,如datepublicclassdate{intday;intmonth;intyear;}聲明一個變量DatemyBirth,yourBirth訪問成員myBirth.day=26;myBirth.month=11;yourBirth.year=1960;2.9.1回顧對象的歷史早些時候的編程語言和初級程序員將每個變量看作相互無關的實體。例如,如果一個程序需處理某個日期,則要聲明三個單獨的整數(shù):intday,month,year;上述語句作了兩件事,一是當程序需要日、月或年的有關信息時,它將操作一個整數(shù);二是為那些整數(shù)分配存儲器。盡管這種作法很容易理解,但它存在兩個重大缺陷。首先,如果程序需同時記錄幾個日期,則需要三個不同的聲明。例如,要記錄兩個生日,你可能使用:intmyBirthDay,myBirthMonth,myBirthYear;intyourBirthDay,yourBirthMonth,yourBirthYear;這種方法很快就會引起混亂,因為需要的名稱很多。第二個缺陷是這種方法忽視了日、月和年之間的聯(lián)系并把每個變量都作為一個獨立的值,每個變量都是一個獨立單元(在本例中為date)的一部分并被相應地處理。2.9.2創(chuàng)建一個新類型為克服上述兩種缺陷,Java編程語言使用類來創(chuàng)建新類型。請看下列原始類型聲明:intday;Java編程語言被用來分配一定量的存儲器并解釋該存儲器的內容。于是,要定義一個新的類型,你必須指出需要多大存儲器和如何解釋存儲器內容。這不是根據(jù)字節(jié)數(shù)或位的順序和含義來做,而是根據(jù)已經(jīng)定義的其它類型來做。例如,要定義一個表示日期的類型,你需要足夠的存儲器存儲三個整數(shù)變量;進而,日、月和年的意義即由這些整數(shù)變量給出。如下所示:classMyDateintday;intmonth;intyear;詞class是Java編程語言的一個關鍵字,必須全部小寫。名稱MyDate按照大小寫的有關約定處理,而不是由語意要求來定。注意class不僅僅是一個集合數(shù)據(jù)類型,這個問題以后還將進一步討論。一個變量可被聲明為歸屬于類型MyDate,從而日、月和年部分將被隱含聲明。例如:MyDatemyBirth,yourBirth;使用這個聲明,Java編程語言允許變量的部分(day,month和year)通過調用成員和使用點(·)運算符而被訪問。例如:myBirth.day=26;myBirth.month=11;yourBirth.year=1960;2.9.3創(chuàng)建一個對象創(chuàng)建一個對象創(chuàng)建一個對象原始類型的聲明可分配存儲器空間非原始類型的聲明不分配存儲器空間聲明的變量不是數(shù)據(jù)本身,而是數(shù)據(jù)的引用(或指針)當任何原始類型(如boolean,byte,short,char,int,long,float或double類型)的變量被聲明時,作為上述操作的一部分,存儲器空間也同時被分配。使用非原始類型(如String或class)的變量的聲明不為對象分配存儲器空間。事實上,使用class類型聲明的變量不是數(shù)據(jù)本身,而是數(shù)據(jù)的引用(reference)。注意你也可以認為引用是一個指針(pointer),這可能會有助于你的理解。實際上,在大多數(shù)實現(xiàn)中,也確實可以這樣認為。值得注意的是,Java編程語言實際上不支持指針數(shù)據(jù)類型。在你可以使用變量之前,實際存儲器必須被分配。這個工作是通過使用關鍵字new來實現(xiàn)的。如下所示:MyDatemyBirth;myBirth=newMyDate();第一個語句(聲明)僅為引用分配了足夠的空間,而第二個語句則通過調用對象為構成MyDate的三個整數(shù)分配了空間。對象的賦值使變量myBirth重新正確地引用新的對象。這兩個操作被完成后,MyDate對象的內容則可通過myBirth進行訪問。假使定義任意一個classXXXX,你可以調用newXXXX()來創(chuàng)建任意多的對象,對象之間是分隔的。一個對象的引用可被存儲在一個變量里,因而一個”變量點成員”(如myBirth.day)可用來訪問每個對象的單個成員。請注意在沒有對象引用的情況下,仍有可能使用對象,這樣的對象稱作”匿名”對象。2.9.4創(chuàng)建一個對象存儲器分配和布局創(chuàng)建一個對象創(chuàng)建一個對象存儲器分配和布局一個聲明僅為一個引用分配存儲器MyDatetodaytoday=newMyDate();today在一個方法體中,聲明MyDatetodaytoday=newMyDate();僅為一個引用分配存儲器today關鍵字new意味著存儲器的分配和初始化MyDatetoday;today=newMyDate();賦值則建立了引用變量,從而它可適當?shù)匾眯碌膭?chuàng)建對象MyDatetoday;today=newMyDate();使用一個語句同時為引用today和由引用today所指的對象分配空間也是可能的。MyDatetoday=newMyDate();2.9.5引用類型的賦值引用變量的賦值引用變量的賦值請考慮下列代碼片段:intx=7;inty=x;Strings=“Hello”;Stringt=s;在Java編程語言中,用類的一個類型聲明的變量被指定為引用類型,這是因為它正在引用一個非原始類型,這對賦值具有重要的意義。請看下列代碼片段:intx=7;inty=x;Strings=“Hello”;Stringt=s;四個變量被創(chuàng)建:兩個原始類型int和兩個引用類型String。x的值是7,而這個值被復制到y(tǒng);x和y是兩個獨立的變量且其中任何一個的進一步的變化都不對另外一個構成影響。至于變量s和t,只有一個String對象存在,它包含了文本”Hello”,s和t均引用這個單一的對象。將變量t重新定義,則新的對象World被創(chuàng)建,而t引用這個對象。上述過程被描述如下:2.9.6術語回顧術語回顧術語回顧ClassObjectReferencetypemember本模塊中介紹了幾個術語,簡單回顧如下:類在Java編程語言中定義新類型的一種途徑。類聲明可定義新類型并描述這些類型是如何實現(xiàn)的。有許多關于類的其它特性還未討論。對象一個類的實例。類可被認為是一個模板你正在描述一個對象模型。一個對象就是你每次使用new創(chuàng)建一個類的實例的結果。引用類型一個用戶定義類型,它可引用類、界面和數(shù)組。成員構成一個對象的元素之一。這個詞也被用作定義類的元素(elements)。成員變量(membervariabl)、實例變量(instancevariable)和域(field)也經(jīng)常被互換使用。練習:使用對象練習目標──正確使用Java關鍵字,編寫一個創(chuàng)建類的程序并從類創(chuàng)建一個對象。編譯并運行程序,然后校驗引用是否被賦值并檢查引用是不是按照本模塊所描述的那樣操作的。一、準備為了成功地完成本練習,你必須能夠編譯并運行Java程序,并且需要熟悉有關類和對象的面向對象的概念和引用的概念。二、任務1級:創(chuàng)建一個類和相應的對象一個點可用x和y坐標描述。定義一個稱為MyPoint的類來表達上述想法。你應該稱這個文件為什么在你的類中編寫一個類方法,然后為類型MyPoint聲明兩個變量,將變量稱為start和end;用newMyPoint()創(chuàng)建對象并分別將引用值賦予變量start和end;將值10賦予對象start的成員x和y;將值20賦予對象end的x值,將值20賦予對象end的y值。分別打印MyPoint對象(start和end)的成員值(x和y)。注意為完成第5步,你需要更多地了解system類。帶自變量String的System.out.println()可輸出string并開始新的一行,而System.out.print()不開始新的一行。如果你使用System.out.print(),你應該在這個應用程序結束之前,調用System.out.println()或System.out.flush(),否則你會發(fā)現(xiàn),輸出的最后一行未被顯示出來。為顯示數(shù)字,你可以使用下列形式(稍后將在本課程中討論)System.out.println(“StartMyPoint=x:“+start.x+“y“+start.y);注意--如果一個操作數(shù)已經(jīng)是一個String,則加號(+)將另一個操作數(shù)轉換成String。編譯并運行程序。2級:檢驗引用賦值使用你在前一個練習中MyPoint類,增加代碼到main()方法,以完成下列事項:為類型MyPoint聲明一個新的變量,稱之為stray。將現(xiàn)存變量end的引用值賦予stray;打印end和stray變量的成員x和y的值;賦予變量stray的成員x和y新的值;打印end和stray的成員的值;編譯并運行MyPoint類。end的值反映了stray內的變化,表明兩個變量都引用了同一個MyPoint對象;將start變量的成員x和y賦予新的值;打印start和end的成員值;再次編譯并運行MyPoint類,start的值仍然獨立于stray和end的值,表明start變量仍然在引用一個MyPoint對象,而這個對象及stray和end引用的對象是不同的。三、練習小結討論──用幾分鐘的時間討論一下在以上練習中你所獲得的經(jīng)驗、感想和發(fā)現(xiàn)。經(jīng)驗解釋總結應用四、檢查你的進度在進入下一模塊之前,請確認你已經(jīng)能夠:在源程序中使用注釋區(qū)分有效和無效標識符識別Java技術關鍵字列出八個原始類型為數(shù)字和文本類型定義文字值定義術語class,object,member,variable,referrencevariable為一個簡單的包含原始成員變量的類創(chuàng)建一個類定義聲明類類型的變量使用new構造一個對象描述缺省初始化使用點符號訪問一個對象的成員變量描述引用變量的意義陳述分配類類型變量的結果五、思考題在你現(xiàn)有應用程序中,你可以構思一個使用類和對象的例子嗎表達式和流程控制本模塊討論變量、運算符和算術表達式并列出不同的管理運行程序路徑的控制結構。第一節(jié)相關問題討論──下列問題及本模塊闡述的論題相關。什么類型的變量對程序員有用(例如,其它語言的程序員想了解Java編程語言是如何定義和處理全局變量和局部變量的)?復合類可以有同名的變量嗎?如果可以,它們的作用域有多大?列出用于其它語言的控制結構;一般語言都采用什么方法進行流程控制和中斷流程(如在循環(huán)或開關語句中)?第二節(jié)目標完成本模塊的學習后,你應該能夠:區(qū)分實例變量和局部變量;描述實例變量是如何被初始化的;確認并更正編譯器錯誤;辨認、描述并使用Java軟件運算符;區(qū)分合法和非法原始類型賦值;確認boolean表達式和它們在控制構造中的要求;辨認賦值兼容性和在基本類型中的必要計算;使用if,switch,for,while和do句型結構和break和continue的標號形式作為程序中的流程控制結構。第三節(jié)表達式3.3.1變量和作用域變量和作用域變量和作用域局部(local)變量是在一個方法內定義的變量,也被稱作自動(automatic)、臨時(temporary)或棧(stack)變量當一個方法被執(zhí)行時,局部變量被創(chuàng)建;當一個方法被終止時,局部變量被清除局部變量必須使用之前初始化,否則編譯時將出錯你已經(jīng)看到了兩種變量的描述方法:原始類型變量和引用類型變量。你也看到了變量被聲明的位置:在方法內(方法是面向對象的術語,它可引用函數(shù)或子程序,例如:main())或在方法外但在類定義之內。變量也可被定義為方法參數(shù)或構造函數(shù)參數(shù)。在方法內定義的參數(shù)被稱為局部(local)變量,有時也被用為自動(automatic)、臨時(temporary)或棧(stack)變量。在方法外定義的變量是在使用newXxxx()調用構造一個對象時被創(chuàng)建。在構造一個對象時,可創(chuàng)建兩種變量。一是類變量,它是用static關鍵字來聲明的;只要

溫馨提示

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

評論

0/150

提交評論