Java語(yǔ)言基礎(chǔ)教程410_第1頁(yè)
Java語(yǔ)言基礎(chǔ)教程410_第2頁(yè)
Java語(yǔ)言基礎(chǔ)教程410_第3頁(yè)
Java語(yǔ)言基礎(chǔ)教程410_第4頁(yè)
Java語(yǔ)言基礎(chǔ)教程410_第5頁(yè)
已閱讀5頁(yè),還剩405頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Java語(yǔ)言根底教程第一章概述

第二章Java語(yǔ)言語(yǔ)法根底

第三章對(duì)象與類

第四章繼承和多態(tài)

第五章抽象類接口與內(nèi)部類

第六章數(shù)組、字符串及容器

第七章異常處理

第八章JavaIO系統(tǒng)

第九章多線程

第十章圖形用戶界面第1章概述面向?qū)ο蟪绦蛟O(shè)計(jì)從計(jì)算機(jī)誕生到現(xiàn)在,程序設(shè)計(jì)語(yǔ)言從最初的機(jī)器語(yǔ)言、匯編語(yǔ)言到后來(lái)面向過(guò)程的結(jié)構(gòu)化高級(jí)語(yǔ)言,最后開(kāi)展到面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。在這個(gè)過(guò)程中,程序員逐步擺脫了機(jī)器的層面,可以在更抽象的層面上表達(dá)程序設(shè)計(jì)意圖。面向過(guò)程程序設(shè)計(jì)的中心思想是用計(jì)算機(jī)能夠理解的邏輯來(lái)描述和表達(dá)待解決的問(wèn)題及其具體的解決過(guò)程。數(shù)據(jù)結(jié)構(gòu)、算法是面向過(guò)程問(wèn)題求解的核心。面向過(guò)程程序設(shè)計(jì)可以精確、完備地描述具體的求解過(guò)程,但卻缺乏以把一個(gè)包含了多個(gè)相互關(guān)聯(lián)過(guò)程的復(fù)雜系統(tǒng)表述清楚,而面向?qū)ο蟪绦蛟O(shè)計(jì)那么可以勝任這項(xiàng)工作。什么是面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)〔Object—OrientedProgramming,OOP〕代表了一種全新的程序設(shè)計(jì)思路和觀察、處理問(wèn)題的方法。面向?qū)ο缶褪菍⑹澜缈醋魇怯梢幌盗斜舜岁P(guān)聯(lián)、相互之間能夠通信的對(duì)象所組成的,它將現(xiàn)實(shí)世界中實(shí)體反映到程序中,這樣就可以用編程語(yǔ)言來(lái)表達(dá)這個(gè)世界了。所謂對(duì)象是一種看問(wèn)題的觀點(diǎn),是對(duì)現(xiàn)實(shí)世界中各種實(shí)體的一種抽象,它是現(xiàn)實(shí)世界中某個(gè)具體的物理實(shí)體在計(jì)算機(jī)邏輯中的映射和表達(dá)。對(duì)象具有自己的狀態(tài)和行為,通過(guò)對(duì)消息的反映來(lái)實(shí)現(xiàn)一定的功能。OOP的根本特征1.封裝封裝就是指利用抽象數(shù)據(jù)類型將數(shù)據(jù)及對(duì)數(shù)據(jù)的操作封裝在一起。在OOP中,抽象數(shù)據(jù)類型是用類(class)這種結(jié)構(gòu)來(lái)代表的,類是根本的封裝單元。2.繼承繼承是OOP中最突出的特征之一,它是一種基于已有類創(chuàng)立新類的機(jī)制。通過(guò)繼承機(jī)制,一個(gè)新類可以通過(guò)對(duì)已有類進(jìn)行修改和擴(kuò)充來(lái)實(shí)現(xiàn),新類擁有已有類的所有成員變量和成員方法,而且還可以修改現(xiàn)有的成員和添加新的成員。3.多態(tài)多態(tài)也稱作動(dòng)態(tài)綁定、后期綁定或運(yùn)行時(shí)綁定。繼承允許將對(duì)象視為它自己本身的類型或其基類型來(lái)處理,因?yàn)樗试S將多種類型(從同一基類導(dǎo)出的)視為同一類型。而多態(tài)那么允許一種類型表現(xiàn)出與其他相似類型之間的區(qū)別。

OOP的優(yōu)勢(shì)1.簡(jiǎn)單性由于軟件對(duì)象可以對(duì)現(xiàn)實(shí)世界中的真實(shí)對(duì)象建模,所以減少了程序的復(fù)雜度,使得程序結(jié)構(gòu)變得既清晰又簡(jiǎn)單。2.模塊性每個(gè)對(duì)象可構(gòu)成一個(gè)單獨(dú)的模塊,該模塊的內(nèi)部工作方式與系統(tǒng)的其他局部相別離。模塊性是OOP具有可重用性和可擴(kuò)展性的根底。3.可重用可重用性是指我們?cè)谝粋€(gè)工程中開(kāi)發(fā)的模塊,不僅能夠在這個(gè)工程中使用,而且可以重復(fù)的在其他工程中使用。4.可擴(kuò)展可擴(kuò)展性是對(duì)現(xiàn)在應(yīng)用軟件提出的又一個(gè)重要要求,即要求應(yīng)用軟件能夠很方便、容易地進(jìn)行擴(kuò)充和修改。了解Java

Java是Sun公司推出的新一代面向?qū)ο蟮木幊陶Z(yǔ)言。自從1996年初Java1.0版的正式發(fā)表,就迅速引起了整個(gè)計(jì)算機(jī)界的高度關(guān)注。由于Java提供了強(qiáng)大的圖形、圖像、音頻、視頻、多線程和網(wǎng)絡(luò)交互能力,它已經(jīng)成為當(dāng)今推廣最快的最為流行的網(wǎng)絡(luò)編程語(yǔ)言。Java的出現(xiàn)引起了軟件開(kāi)發(fā)的重大變革,成為推動(dòng)IT業(yè)蓬勃開(kāi)展的最新動(dòng)力。它的出現(xiàn)對(duì)整個(gè)計(jì)算機(jī)軟件業(yè)的開(kāi)展產(chǎn)生了重大而深遠(yuǎn)的影響。

Java的特點(diǎn)◆簡(jiǎn)單◆面向?qū)ο蟆羝脚_(tái)無(wú)關(guān)性◆動(dòng)態(tài)◆分布式◆多線程◆健壯性◆垃圾回收機(jī)制Java虛擬機(jī)Java虛擬機(jī)〔JavaVirtualMachine,JVM〕是用軟件模擬實(shí)現(xiàn)的虛擬計(jì)算機(jī)。它定義了指令集、存放器集、類文件結(jié)構(gòu)棧、垃圾收集堆、內(nèi)存區(qū)域等組件,提供了跨平臺(tái)能力的根底框架。在JVM上,有一個(gè)Java解釋器用來(lái)解釋Java編譯器編譯后的程序。程序員在編寫完程序后,通過(guò)Java編譯器將Java源程序編譯為字節(jié)代碼,字節(jié)代碼是一種與平臺(tái)無(wú)關(guān)的文件格式,它能夠被Java解釋器來(lái)執(zhí)行。任何一臺(tái)機(jī)器只要安裝了Java解釋器,就可以運(yùn)行這個(gè)程序,而不管字節(jié)代碼是在何種平臺(tái)上生成的。Java的核心技術(shù)1.JavaServletServlet是效勞器端的Java小程序,Servlet全部由Java編寫并且生成Html文檔,它擴(kuò)展了Web效勞器的功能。當(dāng)客戶端發(fā)送請(qǐng)求時(shí),效勞器端便開(kāi)始執(zhí)行Servlet程序。2.JDBCJDBC(JavaDataBaseConnectivity)為訪問(wèn)不同的數(shù)據(jù)庫(kù)提供了統(tǒng)一的途徑。像ODBC一樣,JDBC對(duì)開(kāi)發(fā)者屏蔽了一些細(xì)節(jié)問(wèn)題,使得JDBC對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)也具有平臺(tái)無(wú)關(guān)性。3.JavaBean和EJBJavaBean實(shí)際上是用Java寫的控件,類似于微軟的ActiveX。EJB是企業(yè)級(jí)的JavaBean。它們提供了一個(gè)框架來(lái)開(kāi)發(fā)和實(shí)施分布式商務(wù)邏輯,從而顯著地簡(jiǎn)化了具有可伸縮性和高度復(fù)雜性的企業(yè)級(jí)應(yīng)用的開(kāi)發(fā)。4.JSPJSP(JavaServerPages)是Sun公司1999年推出的一種動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)標(biāo)準(zhǔn),是一種運(yùn)行于Web效勞器端的腳本語(yǔ)言。JSP和Microsoft的ASP(ActiveServerPages)技術(shù)相似,不同的是編程語(yǔ)言:ASP采用VBScript,JSP采用Java。5.XMLXML(eXtensibleMarkupLanguage)是一種可以定義標(biāo)記的語(yǔ)言,主要用于在不同的商務(wù)過(guò)程中共享數(shù)據(jù)。雖然XML的開(kāi)展和Java是相互獨(dú)立的,但它們的共同目標(biāo)都是平臺(tái)無(wú)關(guān)性。將Java與XML組和可以得到一個(gè)完美的具有平臺(tái)獨(dú)立性的解決方案。

Java開(kāi)發(fā)環(huán)境的搭建Java開(kāi)發(fā)的核心就是JDK。JDK的全稱是Java開(kāi)發(fā)工具包〔JavaDeveplepmentKit〕,它是由Java的開(kāi)發(fā)工具、運(yùn)行環(huán)境以及Java根底類庫(kù)所組成的。JDK是Java開(kāi)發(fā)所必不可少的一個(gè)工具。我們可以在Sun公司的網(wǎng)站://上下載JDK的安裝程序。根據(jù)應(yīng)用環(huán)境的不同,JDK可以分為三個(gè)不同的版本:J2SE:Java2StandardEdition,用于普通標(biāo)準(zhǔn)應(yīng)用程序的開(kāi)發(fā);J2EE:Java2EnterpriseEdition,用于企業(yè)級(jí)應(yīng)用程序的開(kāi)發(fā);J2ME:Java2MicroEdition,用于移動(dòng)設(shè)備、嵌入式設(shè)備上應(yīng)用程序的開(kāi)發(fā)。JDK和幫助文檔的安裝JDK的安裝和其它應(yīng)用程序的安裝方式相同,這里不再贅述。我們還要在Sun公司網(wǎng)站上下載JDK幫助文檔的壓縮包,它是我們了解JDK的最直接最有效的途徑。下載完成后可以將其解壓縮到JDK安裝目錄下的docs子目錄中,然后翻開(kāi)其中的index.html鏈接,就可以瀏覽JDK幫助文檔了。查看和設(shè)置環(huán)境變量1.查看環(huán)境變量右鍵點(diǎn)擊“我的電腦〞—>“屬性〞—>“高級(jí)〞—>“環(huán)境變量〞—>“系統(tǒng)變量〞2.設(shè)置環(huán)境變量path變量的作用指定我們執(zhí)行的命令程序所在的目錄。要將其設(shè)置為JDK安裝目錄下bin子目錄所在的路徑。classpath變量的作用是指定Java虛擬機(jī)要執(zhí)行的類所在的目錄。要將其設(shè)置為用戶定義的類所在目錄的路徑,它的值可以有多個(gè)。Java集成開(kāi)發(fā)環(huán)境目前Java開(kāi)發(fā)領(lǐng)域的各種集成開(kāi)發(fā)環(huán)境(IntegrationDeveloperEnvironment,IDE〕呈現(xiàn)出百花齊放的局面,下面我們介紹三種常用的Java集成開(kāi)發(fā)環(huán)境:JCreator,JBuilder和Eclipse。JCreator簡(jiǎn)介◆優(yōu)點(diǎn):小巧實(shí)用缺點(diǎn):在J2EE開(kāi)發(fā)、EJB、WebServices等方面有明顯的缺乏◆JDK和幫助文檔的設(shè)定:安裝時(shí)設(shè)定和安裝后設(shè)定◆JCreator的工程〔Project〕和工作空間〔Workspace〕JCreator利用工程管理相應(yīng)的源文件,一個(gè)工程由多個(gè)Java源文件和其他一些文件組成,Jcreator中工程文件的擴(kuò)展名為.jcp。JCreator的工作空間用來(lái)管理工程,一個(gè)工作空間中可以包含多個(gè)工程,JCreator中工作空間文件的擴(kuò)展名為.jcw。◆JCreator編輯界面的組成文件視圖、類視圖和包視圖、代碼視圖、輸出視圖以及編譯按鈕◆利用JCreator進(jìn)行開(kāi)發(fā)的步驟JBuilder簡(jiǎn)介JBuilder是Borland公司開(kāi)發(fā)的一套Java集成開(kāi)發(fā)環(huán)境。利用JBuilder,可以方便的編寫、調(diào)試、運(yùn)行Java程序,特別是圖形界面的程序。JBuilder的特點(diǎn)◆支持Swing、JSP、servlets、EJB、WebService、XML等最新的Java技術(shù);◆集成了多種主流效勞器,可以快速開(kāi)發(fā)企業(yè)應(yīng)用;◆能用Servlets和JSP開(kāi)發(fā)動(dòng)態(tài)Web應(yīng)用;◆開(kāi)放式集成開(kāi)發(fā)環(huán)境框架,可以將第三方工具良好地集成進(jìn)自身環(huán)境之中,從而展IDE功能;◆JBuilder是100%的Java開(kāi)發(fā)工具,對(duì)Windows、Linux與Solaris平臺(tái)上的開(kāi)發(fā)提供跨平臺(tái)支持;◆提供了團(tuán)隊(duì)開(kāi)發(fā)功能,集成了多種版本控制系統(tǒng);◆引入了快速生成工程的UML(UnifiedModelingLanguage,即統(tǒng)一建模語(yǔ)言)模型。JBuilder2006的新特性JBuilder2006是專為加速企業(yè)級(jí)Java應(yīng)用而設(shè)計(jì)的。它基于Eclipse平臺(tái),因此具有極強(qiáng)的靈活性和可擴(kuò)展性。JBuilder2006自帶JDK1.5,它集成了幾乎所有的Java技術(shù),是全球領(lǐng)先的Java集成開(kāi)發(fā)環(huán)境。對(duì)等協(xié)作功能是JBuilder2006中最大的新特性。對(duì)等協(xié)作功能可以實(shí)現(xiàn)對(duì)等伙伴之間的通信。此外,還包括共享調(diào)試、共享編輯、平安管理及遠(yuǎn)程訪問(wèn)等。這些功能大大降低了分布式團(tuán)隊(duì)的協(xié)作本錢和難度,提高了軟件的開(kāi)發(fā)效率和開(kāi)發(fā)質(zhì)量。JBuilder應(yīng)用瀏覽器啟動(dòng)JBuilder2006集成開(kāi)發(fā)環(huán)境,首先呈現(xiàn)的用戶面前的開(kāi)發(fā)界面稱為JBuilder應(yīng)用瀏覽器(AppBrowser),它有主菜單、工具欄、狀態(tài)欄、工程視圖、結(jié)構(gòu)視圖、代碼視圖、消息視圖和調(diào)試器等幾局部組成,我們可以在一個(gè)應(yīng)用瀏覽器窗口中實(shí)現(xiàn)大局部的開(kāi)發(fā)功能,包括代碼編輯、可視化設(shè)計(jì)、編譯、調(diào)試等操作。Eclipse簡(jiǎn)介在目前所有的IDE中,Eclipse可以說(shuō)是最有開(kāi)展前途的產(chǎn)品之一。Eclipse是一個(gè)開(kāi)放源代碼的、與NetBeans和BorlandJbuilder類似的一種基于Java的可擴(kuò)展的開(kāi)發(fā)平臺(tái)。我們可以進(jìn)入Eclipse的官方網(wǎng)站://,點(diǎn)擊Downloads,下載一個(gè)Eclipse的壓縮包。目前最新的版本為,但是版本的多國(guó)語(yǔ)言包還沒(méi)有出來(lái),所以我們可以下載一個(gè)稍早一點(diǎn)的版本Eclipse的安裝和運(yùn)行安裝Eclipse的步驟非常簡(jiǎn)單,只需將下載的壓縮包直接解壓到你喜歡的路徑即可。然后將多國(guó)語(yǔ)言包解壓并將解壓出來(lái)的plugins文件夾和features文件夾去覆蓋eclipse文件夾下的同名文件夾即可。在啟動(dòng)Eclipse之前,需要首先安裝好JDK,并設(shè)置好path環(huán)境變量。安裝并設(shè)置好JDK后,我們?cè)俅螁?dòng)Eclipse,進(jìn)入歡送界面之前首先要選擇工作空間。Eclipse的缺省歡送界面中有五個(gè)按鈕,分別是“概述〞、“新增內(nèi)容〞、“樣本〞、“教程〞和“工作臺(tái)〞。我們可以點(diǎn)擊位于界面右方的“工作臺(tái)〞按鈕,進(jìn)入工作臺(tái)界面。Eclipse工作臺(tái)窗口由多個(gè)窗格組成,窗格集合稱為透視(perspective)。默認(rèn)的透視圖是Java透視圖,此外還有CVS資源庫(kù)研究透視圖、Java類型層次結(jié)構(gòu)透視圖、Java瀏覽透視圖和插件開(kāi)發(fā)透視圖等。我們還可以建立多個(gè)工作臺(tái)窗口,并且能夠定制和復(fù)位透視圖。Java透視圖中還包括多個(gè)視圖,默認(rèn)的有包資源管理器、層次結(jié)構(gòu)、大綱、問(wèn)題、Javadoc和聲明,此外還有Ant、導(dǎo)航器、進(jìn)度和錯(cuò)誤日志等多個(gè)視圖。Eclipse的插件體系結(jié)構(gòu)Eclipse最有魅力的地方就在于它的插件體系結(jié)構(gòu)。就其本身而言,它只是一個(gè)框架和一組效勞,用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。在Eclipse中實(shí)現(xiàn)的絕大局部功能是由相應(yīng)的插件完成的,它附帶了一個(gè)標(biāo)準(zhǔn)的插件集。Eclipse的多國(guó)語(yǔ)言包其實(shí)就是一個(gè)插件,甚至用來(lái)開(kāi)發(fā)Java程序的JDT(JavaDevelopmentTools),也只不過(guò)是Eclipse系統(tǒng)中的一個(gè)普通插件而已。雖然大多數(shù)用戶只是將Eclipse當(dāng)作JavaIDE來(lái)使用,但Eclipse的目標(biāo)不僅限于此,通過(guò)開(kāi)發(fā)插件,它能擴(kuò)展到任何語(yǔ)言的開(kāi)發(fā),甚至能成為繪圖的工具Eclipse已經(jīng)開(kāi)始提供C語(yǔ)言開(kāi)發(fā)的功能插件,例如CDT(CDevelopmentTools)。另外,Eclipse還包括插件開(kāi)發(fā)環(huán)境〔Plug-inDevelopmentEnvironment,PDE〕,這個(gè)組件主要針對(duì)希望擴(kuò)展Eclipse的軟件開(kāi)發(fā)人員,可以利用它開(kāi)發(fā)自己的功能插件,同時(shí)也可以通過(guò)開(kāi)發(fā)新的插件擴(kuò)展現(xiàn)有插件的功能。第2章Java語(yǔ)言語(yǔ)法根底Java是一種跨平臺(tái)的面向?qū)ο笳Z(yǔ)言,利用該語(yǔ)言可以生成獨(dú)立于平臺(tái)的應(yīng)用程序。Java語(yǔ)言具有眾多優(yōu)點(diǎn),如面向?qū)ο?、可移植、與硬件無(wú)關(guān)等。我們將介紹Java語(yǔ)言最根本的內(nèi)容,先從Java編程根底開(kāi)始,介紹Java語(yǔ)言的根本語(yǔ)法然后,介紹幾種常用算法的例如,強(qiáng)化對(duì)Java語(yǔ)言的認(rèn)識(shí)。2.1、Java標(biāo)識(shí)符、關(guān)鍵字、注釋與分隔符2.2、Java的數(shù)據(jù)類型2.3、Java運(yùn)算符和表達(dá)式2.4、Java控制結(jié)構(gòu)2.5、小結(jié)2.6、習(xí)題第2章主要內(nèi)容標(biāo)識(shí)符與關(guān)鍵字注釋分隔符2.1、Java標(biāo)識(shí)符、關(guān)鍵字、注釋與分隔符程序員對(duì)程序中的各個(gè)元素加以命名時(shí)使用的命名記號(hào)稱為標(biāo)識(shí)符〔identifier〕包括:類名、變量名、常量名、方法名、… Java語(yǔ)言中,標(biāo)識(shí)符是以字母,下劃線〔_〕,美元符($)開(kāi)始的一個(gè)字符序列,后面可以跟字母,下劃線,美元符,數(shù)字。合法的標(biāo)識(shí)符 keywordsjavaNameJava_Namesys_value$javaJava123非法的標(biāo)識(shí)符 2mail java# classcharint標(biāo)識(shí)符與關(guān)鍵字具有專門的意義和用途,不能當(dāng)作一般的標(biāo)識(shí)符使用,這些標(biāo)識(shí)符稱為關(guān)鍵字。

abstractbreakbytebooleancatchcaseclasscharcontinuedefaultdoubledoelseextendsfalsefinalfloatforfinally ifimportimplementsintinterfaceinstanceoflonglengthnativenewnullpackageprivateprotectedpublicfinalreturnswitchsynchronizedshortstaticsupertrytruethisthrowthrowsthreadsafetransientvoidwhile標(biāo)識(shí)符與關(guān)鍵字在Java中,true、false和null都是小寫的。區(qū)別于C++中大寫的TRUE、FALSE和NULL。所有的數(shù)據(jù)類型所占用的字節(jié)數(shù)都是固定的,并且和實(shí)現(xiàn)無(wú)關(guān)的,因此在Java中沒(méi)有sizeof操作符。不必死記這些關(guān)鍵詞,當(dāng)理解每個(gè)關(guān)鍵詞的含義后,自然就記住了所有的關(guān)鍵詞。標(biāo)識(shí)符與關(guān)鍵字舉例://單行注釋,簡(jiǎn)單的解釋語(yǔ)句含義./*多行注釋,用來(lái)說(shuō)明更多的內(nèi)容,包括算法等.……*//**Java文檔注釋,可以通過(guò)javadoc生*成類和接口的HTML格式的幫助文檔.*這種注釋有其特殊的格式〔參見(jiàn)相關(guān)文檔〕*/注釋分隔符Java中分隔符有空格、逗號(hào)、分號(hào)及行結(jié)束符,并且規(guī)定任意兩個(gè)相鄰標(biāo)識(shí)符、數(shù)字、保存字或兩個(gè)語(yǔ)句之間必須至少有一個(gè)分隔符,以便編譯程序能識(shí)別。2.2、Java的數(shù)據(jù)類型2.2.1Java根本數(shù)據(jù)類型〔PrimaryDataTypes〕常量〔Constant〕和變量〔Variable〕常量〔Constant〕變量〔Variable〕數(shù)據(jù)類型的轉(zhuǎn)換所有根本類型所占的位數(shù)都是確定的,并不因操作系統(tǒng)的不同而不同。所有根本類型的關(guān)鍵詞都是小寫的。數(shù)據(jù)類型

所占位數(shù)

數(shù)的范圍

char 16 0~65535byte

8

-27~27-1short 16 -215~215-1 int 32 -231~231-1 long 64 -263~263-1 float 32 3.4e-038~3.4e+038double 64 1.7e-308~1.7e+3082.2.1Java根本數(shù)據(jù)類型布爾型數(shù)據(jù)只有兩個(gè)值true和false,且它們不對(duì)應(yīng)于任何整數(shù)值 布爾型變量的定義如: booleanb=true; 布爾型數(shù)據(jù)只能參與邏輯關(guān)系運(yùn)算:&&||==!=!例如:booleanb1;booleanb2=true;b=!b2;booleanb=(b1&&b2)!=false;2.2.1布爾類型(boolean)字符型數(shù)據(jù)代表16位的Unicode字符字符常量是用單引號(hào)括起來(lái)的一個(gè)字符‘a(chǎn)’‘B’‘\n’‘\u0030’字符型數(shù)據(jù)的取值范圍為0~65535或者說(shuō)\u0000~\uFFFF\u0000為缺省值例如charc1; \\缺省值為0charc2=‘0’; \\賦初值為字符‘0’charc3=32; \\用整數(shù)賦初值為空格2.2.1字符類型(char)特殊字符的常量表示法:反斜線〔Backslash〕 ‘\\’退格〔Backspace〕 ‘\b’回車〔Carriagereturn〕 ‘\r’進(jìn)紙符〔Formfeed〕 ‘\f’制表符〔Formfeed〕 ‘\t’換行〔Newline〕 ‘\n’單引號(hào)〔Singlequote〕 ‘\’’八進(jìn)制數(shù)〔‘\0’~‘\377’〕 ‘\DDD’Unicode字符 ‘\uHHHH’2.2.1字符類型(char)整型常量1.十進(jìn)制整數(shù) 如123,-456,02.八進(jìn)制整數(shù) 以0開(kāi)頭,如0123表示十進(jìn)制數(shù)83,-011表示十進(jìn)制數(shù)-9。3.十六進(jìn)制整數(shù) 以0x或0X開(kāi)頭,如0x123表示十進(jìn)制數(shù)291,-0X12表示十進(jìn)制數(shù)-18。整型變量類型為byte、short、int或long,byte在機(jī)器中占8位,short占16位,int占32位,long占64位。整型變量的定義如:

intx=123; //指定變量x為int型,且賦初值為123byteb=8;shorts=10;longy=123L;longz=123l;2.2.1整數(shù)類型(byte,short,int,long)64位長(zhǎng)整數(shù)以l或L結(jié)尾:12l,-343L,

0xfffffffffL1L<<32等于4294967296L1<<32等于0沒(méi)有以l或L結(jié)尾的數(shù)字,根據(jù)其實(shí)際值所屬范圍,可以被用作byte,short,或int型整數(shù)以l或L結(jié)尾的數(shù)字,無(wú)論其實(shí)際值所屬范圍怎樣,都被用作long型整數(shù)2.2.1整數(shù)類型(byte,short,int,long)例如byteb1; \\缺省值為0byteb2=127; \\賦初值為127shorts1=(short)(b1+b2);\\強(qiáng)制類型轉(zhuǎn)換shorts2=(short)(b1+123)\\強(qiáng)制類型轉(zhuǎn)換intn=b1+b2; \\不需要強(qiáng)制類型轉(zhuǎn)換longl1=2343; \\不需要強(qiáng)制類型轉(zhuǎn)換longl2=4294967296L; \\必須用L或l結(jié)尾longl3=65536*63356; \\乘法運(yùn)算越界,l3為0longl4=65536L*63356; \\l4為4294967296L2.2.1整數(shù)類型(byte,short,int,long)實(shí)型常量1.十進(jìn)制數(shù)形式 由數(shù)字和小數(shù)點(diǎn)組成,且必須有小數(shù)點(diǎn),如0.123,.123,123.,123.02.科學(xué)計(jì)數(shù)法形式 如:123e3或123E3,其中e或E之前必須有數(shù)字,且e或E后面的指數(shù)必須為整數(shù)。32位浮點(diǎn)數(shù)形式:0.23f,1.23E-4f,

.18F2.2.1浮點(diǎn)數(shù)類型,實(shí)型(float,double)實(shí)型變量類型為float或double,float在機(jī)器中占32位,double占64位。實(shí)型變量的定義如:doubled1=127.0; \\賦初值為127doubled2=127; \\賦初值為127floatf1=127.0f; \\必須在數(shù)字后加f或Ffloatf2=4.0e38f; \\錯(cuò)誤!32位浮點(diǎn)數(shù)不能超過(guò) \\3.4028234663852886e38floatf3=(float)d1; \\必須強(qiáng)制類型轉(zhuǎn)換浮點(diǎn)數(shù)類型,實(shí)型(float,double)

publicclassAssign{publicstaticvoidmain(String[]args){intx,y;byteb=3;floatz=1.234f;doublew=1.234;booleanflag=true;charc;c=‘a(chǎn)‘;x=120;y=30;

}}使用舉例Java中的常量值是用文字串表示的,它區(qū)分為不同的類型,如整型常量123,實(shí)型常量1.23,字符常量‘a(chǎn)’,布爾常量true、false以及字符串常量"Thisisalanguage."。與C、C++不同,Java中不能通過(guò)#define命令把一個(gè)標(biāo)識(shí)符定義為常量,而是用關(guān)鍵字final來(lái)定義,定義常量的一般格式為:final類型常量標(biāo)識(shí)符=常數(shù)值;finalintMAX_NUM=100;finaldoublePI=3.1415926;常量和變量程序中的根本存儲(chǔ)單元,其定義包括變量名、變量類型和作用域幾個(gè)局部,定義格式為:類型變量名=值;intn1=3,n2=4;Java中變量的缺省初值都是確定的:布爾變量的初值為:false整數(shù)變量的初值為:0浮點(diǎn)數(shù)變量的初值為:0.0引用〔復(fù)合〕變量的初值為:null在方法實(shí)現(xiàn)中定義的變量必須顯式的初始化。變量的作用域指可訪問(wèn)變量的一段代碼,在程序中不同的地方聲明的變量具有不同的作用域:局部變量、類變量、方法參數(shù)、例外處理參數(shù)。在一定的作用域內(nèi),變量名必須唯一。常量和變量自動(dòng)類型轉(zhuǎn)換整型、實(shí)型、字符型數(shù)據(jù)可以混合運(yùn)算。運(yùn)算中,不同類型的數(shù)據(jù)先轉(zhuǎn)化為同一類型,然后進(jìn)行運(yùn)算,轉(zhuǎn)換從低級(jí)到高級(jí):低>高byte,short,char—>int—>long—>float—>double操作數(shù)1類型

操作數(shù)2類型

轉(zhuǎn)換后的類型byte、short、char int int byte、short、char、int long long byte、short、char、int、long float float byte、short、char、int、long、float double double數(shù)據(jù)類型的轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換必須滿足如下規(guī)那么:不能對(duì)boolean類型進(jìn)行類型轉(zhuǎn)換。不能把對(duì)象類型轉(zhuǎn)換成不相關(guān)類的對(duì)象。在把容量大的類型轉(zhuǎn)換為容量小的類型時(shí)必須使用強(qiáng)制類型轉(zhuǎn)換。轉(zhuǎn)換過(guò)程中可能導(dǎo)致溢出或損失精度inti=8;byteb=(byte)i;(byte)255==-1 (byte)0x5634==0x34浮點(diǎn)數(shù)到整數(shù)的轉(zhuǎn)換是通過(guò)舍棄小數(shù)得到,而不是四舍五入(int)23.7==23 (int)-45.89f==-45數(shù)據(jù)類型的轉(zhuǎn)換優(yōu)先級(jí)、結(jié)合性以及單/雙目運(yùn)算算術(shù)運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符位運(yùn)算符賦值運(yùn)算符條件運(yùn)算符其他運(yùn)算符2.3Java運(yùn)算符和表達(dá)式優(yōu)先級(jí)、結(jié)合性以及單/雙目運(yùn)算1〕 .,[],() 9〕 &2〕 ++,--,!,~,instanceof 10〕 ^3〕 new(type) 11〕 |4〕 *,/,% 12〕 &&5〕 +,- 13〕 ||6〕 >>,>>>,<< 14〕 ?:7〕 >,<,>=,<= 15〕 =,+=,-=,*=,/=,%=,^=8〕 ==,!= 16〕 &=,|=,<<=,>>=,>>>=優(yōu)先級(jí)、結(jié)合性以及單/雙目運(yùn)算〔1〕運(yùn)算符算術(shù)運(yùn)算符:+,―,*,/,%,++,――關(guān)系運(yùn)算符:>,<,>=,<=,==,!=布爾邏輯運(yùn)算符:!,&&,||位運(yùn)算符:>>,<<,>>>,&,|,^,~賦值運(yùn)算符:=,及其擴(kuò)展賦值運(yùn)算符如+=,―=,*=,/=等。條件運(yùn)算符:?:Java運(yùn)算符和表達(dá)式其它分量運(yùn)算符

·,下標(biāo)運(yùn)算符

[],實(shí)例運(yùn)算符instanceof,內(nèi)存分配運(yùn)算符new,強(qiáng)制類型轉(zhuǎn)換運(yùn)算符(類型),方法調(diào)用運(yùn)算符

()…由于數(shù)據(jù)類型的長(zhǎng)度是確定的,所以沒(méi)有長(zhǎng)度運(yùn)算符sizeof。Java運(yùn)算符和表達(dá)式〔2〕表達(dá)式表達(dá)式是由操作數(shù)和運(yùn)算符按一定的語(yǔ)法形式組成的符號(hào)序列。一個(gè)常量或一個(gè)變量名字是最簡(jiǎn)單的表達(dá)式,其值即該常量或變量的值;表達(dá)式的值還可以用作其他運(yùn)算的操作數(shù),形成更復(fù)雜的表達(dá)式。例: x num1+num2 a*(b+c)+d 3.14 x<=(y+z) x&&y||zJava運(yùn)算符和表達(dá)式2.4、Java控制結(jié)構(gòu)2.4.1選擇語(yǔ)句:if-else,switch-case循環(huán)語(yǔ)句:while,do-while,for跳轉(zhuǎn)語(yǔ)句:

continue,break,return if(boolean-expression1){ statements1;} elseif(boolean-expression2){statements2;}…else{statementsN;}2.4.1選擇語(yǔ)句:if-else布爾表達(dá)式boolean-expression是任意一個(gè)返回布爾數(shù)據(jù)類型的表達(dá)式,而且必須是〔比C或C++要嚴(yán)格〕。與C或C++一樣,每個(gè)單一語(yǔ)句后面都要有分號(hào)。為了增強(qiáng)程序的可讀性,應(yīng)將if或else后的語(yǔ)句用{}括起來(lái)。else子句是任選的,不能單獨(dú)作為語(yǔ)句使用,它必須和if語(yǔ)句配對(duì)使用,并且總是與離它最近的if配對(duì)。inti1=123;inti2=456;if(i1>i2){System.out.println(“Thebiggeroneis:〞+i1);}else{System.out.println(“Thebiggeroneis:〞+i2);}2.4.1選擇語(yǔ)句:if-else switch(expression)

{ casevalue1:

{statements1; break;

}

…… casevalueN:

{ statementsN; break;

}

[default: { defaultStatements; }] }2.4.1選擇語(yǔ)句:switch表達(dá)式expression的返回值類型必須是這幾種類型之一:int、byte、char、short。case子句中的值valueI必須是常量,而且所有case子句中的值應(yīng)是不同的。default子句是任選的。break語(yǔ)句用來(lái)在執(zhí)行完一個(gè)case分支后,使程序跳出switch語(yǔ)句,即終止switch語(yǔ)句的執(zhí)行?!踩绻硞€(gè)case分支后沒(méi)有break語(yǔ)句,程序?qū)⒉辉僮霰容^而執(zhí)行下一個(gè)分支。〕switch語(yǔ)句的功能可以用if-else語(yǔ)句來(lái)實(shí)現(xiàn),但某些情況下,使用switch語(yǔ)句更簡(jiǎn)煉。2.4.1選擇語(yǔ)句:switchinta=100;intb=20;intc;charoper=‘+’;switch(oper){case‘+’:{c=a+b;break;}case‘-’:{c=a-b;break;}default:{c=a*b;break;}}2.4.1選擇語(yǔ)句:switch循環(huán)語(yǔ)句while〔當(dāng)型循環(huán)〕[initialization]//初始化條件while(termination){//循環(huán)條件 body;//循環(huán)體 [iteration;]//迭代,變更循環(huán)條件}當(dāng)表達(dá)式termination為true時(shí),執(zhí)行{}中的語(yǔ)句,否那么終止循環(huán)。tbfalsetrue循環(huán)語(yǔ)句:while循環(huán)語(yǔ)句do-while〔直到型循環(huán)〕[initialization]//初始化條件do{ body;//循環(huán)體 [iteration;]//迭代,變更循環(huán)條件}while(termination);//循環(huán)條件首先執(zhí)行一遍{}中的語(yǔ)句,當(dāng)表達(dá)式termination為true時(shí),繼續(xù)執(zhí)行{}中的語(yǔ)句,否那么終止循環(huán)。tbfalsetrue循環(huán)語(yǔ)句:do-while循環(huán)語(yǔ)句for〔另一種當(dāng)型循環(huán)〕for(initialization;termination;iteration){ body;//循環(huán)體}initialization//初始化條件termination//循環(huán)條件iteration//迭代,變更循環(huán)條件tbodyfalsetrueiterainit循環(huán)語(yǔ)句:forfor語(yǔ)句執(zhí)行時(shí),首先執(zhí)行初始化操作,然后判斷終止條件是否滿足,如果滿足,那么執(zhí)行循環(huán)體中的語(yǔ)句,最后執(zhí)行迭代局部。完成一次循環(huán)后,重新判斷終止條件。初始化、終止以及迭代局部都可以為空語(yǔ)句(但分號(hào)不能省),三者均為空的時(shí)候,相當(dāng)于一個(gè)無(wú)限循環(huán)。在初始化局部和迭代局部可以使用逗號(hào)語(yǔ)句,來(lái)進(jìn)行多個(gè)操作。逗號(hào)語(yǔ)句是用逗號(hào)分隔的語(yǔ)句序列。 for(inti=0,intj=10;i<j;i++,j--) { …… }循環(huán)語(yǔ)句:forintn=1,sum=0;while(n<=10){sum=sum+n;n++;}intn=10,sum=0;do{sum+=n;n--;}while(n>0);intsum=0;for(inti=1;i<=10;i++){sum+=i;}while循環(huán)do-while循環(huán)for循環(huán)循環(huán)語(yǔ)句continue語(yǔ)句用來(lái)結(jié)束本次循環(huán),跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,接著進(jìn)行終止條件的判斷,以決定是否繼續(xù)循環(huán)。對(duì)于for語(yǔ)句,在進(jìn)行終止條件的判斷前,還要先執(zhí)行迭代語(yǔ)句。它的格式為:continue;也可以用continue跳轉(zhuǎn)到括號(hào)指明的外層循環(huán)中,這時(shí)的格式為continueouterLable;2.4.3跳轉(zhuǎn)語(yǔ)句:continueouter:for(inti=0;i<10;i++)//外層循環(huán){inner:for(intj=0;j<10;j++)//內(nèi)層循環(huán){

if(i<j){ ……

continueouter; } ……}//內(nèi)層循環(huán)結(jié)束

……}//外層循環(huán)結(jié)束for(inti=0;i<10;i++){if(i==5){continue;}……}跳轉(zhuǎn)語(yǔ)句:continue在switch語(yǔ)中,break語(yǔ)句用來(lái)終止switch語(yǔ)句的執(zhí)行,使程序從整個(gè)switch語(yǔ)句后的第一條語(yǔ)句開(kāi)始執(zhí)行。在循環(huán)語(yǔ)句中,break用于終止并跳出循環(huán),從緊跟著循環(huán)體代碼段后的語(yǔ)句執(zhí)行。在Java中,可以為每個(gè)代碼塊加一個(gè)標(biāo)號(hào),一個(gè)代碼塊通常是用大括號(hào){}括起來(lái)的一段代碼。加標(biāo)號(hào)的格式為:BlockLabel:{

codeBlock;}break語(yǔ)句的第二種使用情況就是跳出它所指定的塊,并從緊跟該塊后的第一條語(yǔ)句處執(zhí)行。

BlockLabel:{

codeBlock;

breakBlockLabel;

codeBlock;}跳轉(zhuǎn)語(yǔ)句:breaka:{//標(biāo)記代碼塊a…… b:{ //標(biāo)記代碼塊b……c:{//標(biāo)記代碼塊c…… breakb; ……//這段語(yǔ)句將不執(zhí)行 }//代碼塊c結(jié)束…… //這段語(yǔ)句也不執(zhí)行}//代碼塊b結(jié)束…… //從這段語(yǔ)句開(kāi)始執(zhí)行}//代碼塊a結(jié)束跳轉(zhuǎn)語(yǔ)句:breakreturn語(yǔ)句從當(dāng)前方法中退出,返回到調(diào)用該方法的語(yǔ)句處,并從緊跟該語(yǔ)句的下一條語(yǔ)句繼續(xù)程序的執(zhí)行。返回語(yǔ)句有兩種格式: returnexpression;//當(dāng)方法需要返回某種類型數(shù)據(jù)時(shí) return;//當(dāng)方法的返回類型為void時(shí)單獨(dú)一條return語(yǔ)句放在方法中間時(shí),會(huì)產(chǎn)生編譯錯(cuò)誤,因?yàn)槠浜蟮恼Z(yǔ)句將不會(huì)執(zhí)行到。假設(shè)真需要退出方法,可以通過(guò)將return語(yǔ)句嵌入某些語(yǔ)句〔如if-else〕來(lái)使程序在未執(zhí)行完方法中所有語(yǔ)句時(shí)退出。跳轉(zhuǎn)語(yǔ)句:return2.5小結(jié)本章介紹Java的各種語(yǔ)法規(guī)那么:各種數(shù)據(jù)類型〔包括簡(jiǎn)單數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型〕,運(yùn)算符〔一元運(yùn)算符,二元運(yùn)算符,三元運(yùn)算符以及特殊運(yùn)算符〕和表達(dá)式,流程控制〔條件控制,循環(huán)控制,switch多分支控制,break語(yǔ)句,contiune語(yǔ)句等〕。此外,針對(duì)具體的數(shù)據(jù)類型、運(yùn)算符以及控制語(yǔ)句,我們都給出了相應(yīng)的實(shí)例以供大家更進(jìn)一步的學(xué)習(xí)相關(guān)內(nèi)容。練習(xí)〔1〕1.以下標(biāo)識(shí)符中,哪些是合法的變量名,哪些是不合法的變量名?〔1〕char〔2〕2abc〔3〕$_isTrue〔4〕i+j〔5〕_istrue〔6〕變量6〔7〕String〔8〕3.141592.判斷下面的程序段是否正確,假設(shè)有錯(cuò)誤,錯(cuò)在哪里,應(yīng)該如何改正,并且測(cè)試改正后的輸出果。publicstaticvoidmain(String[]args){ch=‘a(chǎn)’;charch;System.out.println(“ch=〞+ch);}練習(xí)〔1〕1.以下標(biāo)識(shí)符中,哪些是合法的變量名,哪些是不合法的變量名?〔1〕char〔2〕2abc〔3〕$_isTrue〔4〕i+j〔5〕_istrue〔6〕變量6〔7〕String〔8〕3.141592.判斷下面的程序段是否正確,假設(shè)有錯(cuò)誤,錯(cuò)在哪里,應(yīng)該如何改正,并且測(cè)試改正后的輸出果。publicstaticvoidmain(String[]args){ch=‘a(chǎn)’;charch;System.out.println(“ch=〞+ch);}練習(xí)〔2〕3.寫出下面程序的運(yùn)行結(jié)果。//第2章習(xí)題3,Examplex2_3.javapublicclassExample2_3{publicstaticvoidmain(String[]args){intx=1,a=0,b=0;switch(x){case0:b++;case1:a++;case2:a++,b++;}System.out.prinln(“a=〞+a);System.out.prinln(“b=〞+b);}}4.寫出下面表達(dá)式的最后運(yùn)算結(jié)果,并且令a=1,b=2,c=3,d=false?!?〕a+=b--/++c;〔2〕d=!((a>=--b/b++<=c--)&&a==b);〔3〕d=b>c^a!=c;5.編寫Java程序,計(jì)算小于一個(gè)整數(shù)的全部素?cái)?shù)并輸出。6.編寫Java程序,計(jì)算sum=1!+2!+……+10!。練習(xí)〔3〕練習(xí)〔4〕7.編寫Java程序,輸出從公元1990年到2007年所有閏年的年號(hào),每輸出兩個(gè)年號(hào)換一行。判斷年號(hào)是否為閏年的條件是:〔1〕假設(shè)年號(hào)能被4整除,而不能被100整除,那么是閏年;〔2〕假設(shè)年號(hào)能被400整除也是閏年。練習(xí)〔5〕8.利用for循環(huán)編寫一個(gè)程序,將如以下圖案分別打印輸出。*************************練習(xí)〔6〕9.編寫一個(gè)方法來(lái)計(jì)算正方形的面積和周長(zhǎng)。10.編寫程序找出所有的水仙花數(shù);水仙花數(shù)是三位數(shù),它的各位數(shù)字的立方和等于這個(gè)三位數(shù)本身。下課!

第三章對(duì)象與類3.1類與對(duì)象3.2定義類3.3成員變量的作用域3.4方法重載3.5創(chuàng)立對(duì)象3.6構(gòu)造方法3.7this關(guān)鍵字3.8初始化問(wèn)題3.9static關(guān)鍵字3.10對(duì)象的清理3.11訪問(wèn)控制修飾符3.12具體隱藏實(shí)現(xiàn)3.13參數(shù)傳遞3.14總結(jié)3.1定義類傳統(tǒng)程序設(shè)計(jì)語(yǔ)言的缺乏數(shù)據(jù)和對(duì)數(shù)據(jù)的操作相別離面向?qū)ο笤O(shè)計(jì)的思想什么是對(duì)象一切都是對(duì)象對(duì)象與類的關(guān)系類是對(duì)象的模版,對(duì)象是類的實(shí)例3.2定義類類是組成程序的根本單元,定義了自己的類就是定義了要使用的對(duì)象的類型。

例:定義一個(gè)汽車類:classCar{intcolor;intdoor;intspeed;

voidstart(){…}voidbrake(){…}}

聲明一個(gè)汽車類的引用變量:CarmyCar;聲明類的語(yǔ)法:修飾符class類名稱{//成員變量//方法}Java根本數(shù)據(jù)類型Java數(shù)據(jù)類型包括根本數(shù)據(jù)類型和引用類型包裝器類型把根本數(shù)據(jù)類型數(shù)據(jù)“包裝〞成對(duì)象從int類型創(chuàng)立一個(gè)Integer對(duì)象:

intmyInt;IntegermyInteger=newInteger(myInt);從包裝對(duì)象中取出根本類型值:myInt=myIValue();Java根本數(shù)據(jù)類型第一個(gè)Java程序程序3.1Rectangle.javaclassRectangle{inta,b;intgetArea(){returna*b;}voidlocate(intx,inty){ System.out.println("Thepositions("+x+","+y+")");}

publicstaticvoidmain(Stringargs[]){Rectangler1=newRectangle(); r1.locate(3,4); r1.a=2; r1.b=3; intarea=r1.getArea(); System.out.println("Areaofr1is:"+area); }}第一個(gè)Java程序main方法是程序的入口包含main方法的類是Java應(yīng)用程序的主類一個(gè)Java源文件可以包含多個(gè)類,但同一個(gè)Java源文件只有主類可以聲明為publicJava源文件的命名必須與主類同名3.3成員變量的作用域在Java中變量的作用域是由大括號(hào)組成的程序塊決定在不嵌套的程序塊中可以屢次聲明相同變量在嵌套的程序塊中不允許重復(fù)聲明同名的變量聲明在方法中的變量為局部變量,與實(shí)例變量重名的局部變量會(huì)覆蓋實(shí)例變量,其作用域?yàn)檎麄€(gè)方法體。見(jiàn)程序3.2TestScoping.java作用域舉例{intx=1;{inty=2//xy可用}//x可用y超出作用域}合法的聲明:{intx=1;}{intx=2;}不合法的嵌套聲明:{intx=1;{intx=2;}}3.4方法重載方法重載〔Overload〕是指一個(gè)類中可以定義參數(shù)列表不同但名字相同的多個(gè)方法,調(diào)用時(shí),會(huì)根據(jù)不同的參數(shù)列表來(lái)選擇對(duì)應(yīng)的方法。重載的方法名字必須相同重載的方法參數(shù)必須不同當(dāng)一個(gè)重載方法被調(diào)用時(shí),Java用參數(shù)的類型和〔或〕數(shù)量來(lái)說(shuō)明實(shí)際調(diào)用的重載方法的版本。每個(gè)重載方法的參數(shù)的類型和〔或〕數(shù)量必須是不同的。雖然每個(gè)重載方法可以有不同的返回類型,但返回類型并缺乏以區(qū)分所使用的是哪個(gè)方法。當(dāng)Java調(diào)用一個(gè)重載方法時(shí),參數(shù)與調(diào)用參數(shù)匹配的方法被執(zhí)行。見(jiàn)程序3.3TestOverload.java程序3.4TestOverload1.java被重載的方法必須有不同的參數(shù)列表,前面例子區(qū)分重載方法的參數(shù)采用了或者數(shù)量不同,或者類型不同,參數(shù)順序不同雖然也可以重載,但是容易產(chǎn)生歧義。例:程序3.5TestOverload2.javapublicclassTestOverload2{voidprint(inta,floatb){System.out.println("Printintaandfloatb:"+a+""+b);}voidprint(floata,intb){System.out.println("Printfloataandintb:"+a+""+b);}publicstaticvoidmain(String[]args){TestOverload2obj=newTestOverload2();obj.print(1,2);}}3.5創(chuàng)立對(duì)象先聲名引用變量Rectangler1;然后創(chuàng)立對(duì)象賦值給r1:r1=newrectangle();聲明引用變量的同時(shí)產(chǎn)生一個(gè)對(duì)象賦給它:Rectangler1=newRectangle();引用變量r1“代表〞了一個(gè)矩形對(duì)象,我們就可以使用引用變量加句點(diǎn)形式訪問(wèn)對(duì)象的成員了在Java中根本類型變量存儲(chǔ)在棧的內(nèi)存結(jié)構(gòu)中intx=10;booleany=true;引用型變量?jī)?nèi)儲(chǔ)存著對(duì)象實(shí)例的地址聲明兩個(gè)矩形類引用變量r1、r2:Rectangler1,r2;r1、r2沒(méi)有指向任何對(duì)象實(shí)例,系統(tǒng)默認(rèn)賦初值null產(chǎn)生一個(gè)新對(duì)象實(shí)例并賦值給r1:r1=newrectangle();r2=r1;在java中字符串類型數(shù)據(jù)是按照對(duì)象來(lái)處理的兩種方式顯式和隱式創(chuàng)立Java為了加快程序的執(zhí)行速度,把隱式創(chuàng)立的字符串對(duì)象放在棧中一個(gè)特殊區(qū)域—字符串池〔StringPool〕中,相同內(nèi)容的字符串對(duì)象只保存一份。Stringstr1=newString(“Hellojava!〞);Stringstr2=〞HelloJava!〞程序3.6TestString.javapublicclassTestString{publicstaticvoidmain(String[]args){Stringstr1=newString("HelloJava!");Stringstr2=str1;Stringstr3="HelloJava!";Stringstr4="HelloJava!";

System.out.println(str1==str2);System.out.println(str1==str3);System.out.println(str3==str4);}}輸出結(jié)果:truefalsetrue3.6構(gòu)造方法構(gòu)造方法是創(chuàng)立對(duì)象時(shí)調(diào)用的特殊方法方法名必須與要?jiǎng)?chuàng)立對(duì)象的類名相同不允許聲明返回類型,即使聲明為void也是不正確的如果類中并沒(méi)有定義構(gòu)造方法,Java會(huì)自動(dòng)地給你添加一個(gè)無(wú)參的缺省構(gòu)造方法可以自定義重載的多個(gè)構(gòu)造方法,在創(chuàng)立對(duì)象時(shí)使實(shí)例多樣化。例:程序3.7Student.java3.7this關(guān)鍵字publicStudent(intage){ System.out.println("Invokeconstructorwithage."); age=age;}以上構(gòu)造方法中出現(xiàn)age=age的奇怪語(yǔ)句,this關(guān)鍵字用來(lái)解決這個(gè)問(wèn)題。this引用指向的是其本身所在方法的當(dāng)前對(duì)象。以上構(gòu)造方法假設(shè)采用this關(guān)鍵字那么修改為:publicStudent(intage){ System.out.println("Invokeconstructorwithage."); this.age=age;}this.age=age意指把參數(shù)age的值賦給類成員變量age。3.8初始化問(wèn)題如果程序員使用了缺省的構(gòu)造方法并且沒(méi)有在類中初始化成員變量,創(chuàng)立對(duì)象時(shí)系統(tǒng)會(huì)對(duì)各種類型的成員變量按表3.3自動(dòng)進(jìn)行初始化賦予一個(gè)默認(rèn)值。用構(gòu)造方法完成初始化可以使用自定義的構(gòu)造方法在方法體內(nèi)初始化成員可以在構(gòu)造方法中使用this()調(diào)用其它構(gòu)造方法以減少代碼冗余構(gòu)造方法內(nèi)this必須在第一行只能調(diào)用一次this〔〕不允許調(diào)用兩次this〔〕只能在構(gòu)造器中使用,其他成員方法不得調(diào)用。

classStudent{intage;Stringname;publicStudent(){ System.out.println("Creatingdefaultstudent."); System.out.println("Defaultage="+age); System.out.println("Defaultname="+name); }publicStudent(inta,Stringn){ this(a);//必須在第一句 name=n; System.out.println("Initializestudentwithnameandage.");}publicStudent(intage){ this.age=age; System.out.println("Initializestudentwithage.");}

publicStudent(Stringname){ =name; System.out.println("Initializestudentwithname.");}}publicclassTestThis{publicstaticvoidmain(String[]args){Studentst1=newStudent();newStudent(24,"Jacky");}}程序3.8TestThis.java用構(gòu)造方法完成初始化可以使用自定義的構(gòu)造方法在方法體內(nèi)初始化成員可以在構(gòu)造方法中使用this()調(diào)用其它構(gòu)造方法以減少代碼冗余構(gòu)造方法內(nèi)this必須在第一行只能調(diào)用一次this〔〕不允許調(diào)用兩次this〔〕只能在構(gòu)造器中使用,其他成員方法不得調(diào)用。

3.9static關(guān)鍵字聲明為static的成員方法和變量在內(nèi)存中固定只存在一份,也就是說(shuō)所有類都可以共享使用的聲明為靜態(tài)的成員變量和成員方法在類內(nèi)部可以直接使用,在類外部可以通過(guò)類名加句點(diǎn)的方式直接訪問(wèn),而不必實(shí)例化再使用靜態(tài)方法內(nèi)部不能調(diào)用非靜態(tài)方法,因?yàn)殪o態(tài)方法本身是不會(huì)實(shí)例化的;this在靜態(tài)方法中沒(méi)有意義3.10對(duì)象的清理C語(yǔ)言和c++是通過(guò)程序員自己定義對(duì)象的生命周期,你必須在適當(dāng)?shù)臅r(shí)候自己寫程序去除不再使用的對(duì)象空間Java將釋放無(wú)用內(nèi)存空間的任務(wù)交給了Java虛擬機(jī),通過(guò)垃圾回收器來(lái)回收無(wú)用對(duì)象的內(nèi)存空間程序員無(wú)需強(qiáng)制垃圾回收器立即執(zhí)行進(jìn)行去除工作,只有當(dāng)內(nèi)存資源不夠用時(shí)垃圾回收器才開(kāi)始真正回收空間,所以整個(gè)程序過(guò)程中垃圾回收器可能不需要工作。什么樣的對(duì)象將被垃圾回收?classStudent{intage;Stringname;publicStudent(Stringn){ name=n;}publicstaticvoidp(){ Studentst1=newStudent("Peter"); Studentst2=newStudent("Julie"); st1=st2; st2=null;}}publicclassTestGc{publicstaticvoidmain(String[]args){Student.p();}}程序3.9TestGc.java靜態(tài)方法p中首先創(chuàng)立了兩個(gè)學(xué)生Peter和Julie,然后引用st1指向st2,這時(shí)st1和st2同時(shí)指向Julie,對(duì)象Peter沒(méi)有引用變量引用,所以處于待回收狀態(tài),st2賦空值后仍然有st1指向Julie所以Julie這時(shí)還不是垃圾,當(dāng)方法p()執(zhí)行完成返回main方法時(shí),局部變量st1和st2超出作用域,結(jié)束生命。內(nèi)存堆中的Peter和Julie都變成了垃圾,處于待回收狀態(tài)。處于待回收狀態(tài)只是告訴虛擬機(jī)哪些對(duì)象是垃圾,并不不知道垃圾回收器什么時(shí)候回收他們。當(dāng)內(nèi)存資源緊張時(shí),垃圾回收器會(huì)及時(shí)工作清理這些垃圾。finalize〔〕在某些情況下回收垃圾對(duì)象時(shí)需要結(jié)束與這個(gè)對(duì)象相關(guān)的一些工作,比方說(shuō)某個(gè)對(duì)象翻開(kāi)了一個(gè)文件,那么去除這個(gè)對(duì)象時(shí)就需要關(guān)閉這個(gè)文件,否那么這個(gè)文件在垃圾對(duì)象被回收以后就無(wú)法再編輯和關(guān)閉了finalize方法可以完成這些工作。finalize方法在垃圾回收發(fā)生之前調(diào)用,用來(lái)驗(yàn)證回收條件是否成熟,比方你的對(duì)象可能還與其他對(duì)象聯(lián)系在一起,這時(shí)在finalize方法中設(shè)定條件,阻止垃圾回收,使垃圾對(duì)象“復(fù)活〞。3.11訪問(wèn)控制修飾符類成員修飾符public指定類成員為public時(shí),該類成員在任何類中都可以通過(guò)一個(gè)該類對(duì)象的引用來(lái)進(jìn)行訪問(wèn),當(dāng)然該類內(nèi)部可直接訪問(wèn)。private即聲明說(shuō)這是私有的,指定成員變量或方法為private時(shí),該類成員變?yōu)榇祟惖摹八接胸?cái)產(chǎn)〞,只能在該類中訪問(wèn)。defualt即缺省,修飾符為隱含的package,可以在該類中訪問(wèn),也能夠在同一包中的類訪問(wèn)。但在不同包中即使是其子類也無(wú)法訪問(wèn)。protected說(shuō)明該成員是受保護(hù)的,可以在該類中訪問(wèn)。同時(shí)同一包中的類也可以對(duì)其進(jìn)行訪問(wèn),不同包的子類也可以進(jìn)行訪問(wèn)。類修飾符:public、default指定為public時(shí),可以通過(guò)import指令對(duì)該類進(jìn)行復(fù)用。如果缺省那么是隱含的package訪問(wèn)修飾語(yǔ),這時(shí)只有在相同包里的類才能調(diào)用該類。3.12具體隱藏實(shí)現(xiàn)

具體隱藏實(shí)現(xiàn)是面向?qū)ο笤O(shè)計(jì)中一個(gè)非常重要的概念,通過(guò)使用訪問(wèn)控制修飾符,把類中的無(wú)須公開(kāi)的數(shù)據(jù)與方法封裝起來(lái),對(duì)外隱藏了類功能的具體實(shí)現(xiàn)過(guò)程。改變類的功能時(shí)不會(huì)影響類的使用者,并且提高了程序的平安性與可維護(hù)性。通過(guò)添加訪問(wèn)器和修改器修改Rectangle類classRectangle{privateinta,b;publicintgetArea(){returna*b;}publicintsetAB(inta,intb){if(a<=0||b<=0)System.out.println(“Erroinput!〞);this.a=a;this.b=b;}}3.13參數(shù)傳遞Java的參數(shù)傳遞都是值傳遞Java參數(shù)傳遞分為根本類型參數(shù)傳遞與對(duì)象類型〔即引用類型〕參數(shù)傳遞。根本類型參數(shù)值傳遞意味著當(dāng)將一個(gè)實(shí)參值傳遞給一個(gè)方法時(shí),如果方法修改了該參數(shù),改變的是形參,而原始的實(shí)參的值保持不變。引用類型變量傳遞將一個(gè)參數(shù)傳遞給一個(gè)方法后,方法接收的是一個(gè)引用變量的值,這個(gè)值某個(gè)對(duì)象的內(nèi)存地址值。引用變量的參數(shù)傳遞仍然是值傳遞。程序3.10TestPass.javaclassStudent{intage;Stringname;publicStudent(inta,Stringn){ age=a; name=n;}}publicclassTestPass{publicstaticvoidchangeAge(intfromAge,inttoAge){ fromAge=toAge; System.out.println("AfterinvokemethodchangeAgefromAgeis:"+toAge);}

publicstaticvoidchangeObjAge(Studentst,inttoAge){ st.age=toAge;}publicstaticvoidmain(String[]args){Studentst1=newStudent(19,"Jacky");changeAge(st1.age,20);System.out.println("AfterinvokemethodchangeAgestudentageis:"+st1.age);changeObjAge(st1,20);System.out.println("AfterinvokemethodchangeObjAgestudentageis:"+st1.age);}}changeObjAge方法通過(guò)接受引用變量參數(shù)改變了對(duì)象的成員值,如果你從此就認(rèn)為傳遞了引用變量參數(shù)就可以改變對(duì)象就大錯(cuò)特錯(cuò)了。以修改后的程序3.10TestPass1.java為例方法調(diào)用完畢st完成使命從內(nèi)存中釋放,而原來(lái)的st1仍然指向“Jacky〞,“Julie〞沒(méi)有引用變量再引用它成為垃圾,等待垃圾回收器去除。整個(gè)過(guò)程“Jacky〞沒(méi)有發(fā)生改變。由此可知,Java的參數(shù)傳遞都是值傳遞,只要理解了這一點(diǎn)并掌握了內(nèi)存的變化過(guò)程,這樣的錯(cuò)誤很容易防止。4.8總結(jié)面向?qū)ο笤O(shè)計(jì)是一種更接近人類自然思維的程序設(shè)計(jì)方法,最重要的就是通過(guò)類的定義與使用,類的封裝等特性提高程序的復(fù)用性。類是封裝了相同屬性與行為的一類對(duì)象的模版,對(duì)象就是類的實(shí)例,使用new關(guān)鍵字加構(gòu)造方法的方式創(chuàng)立對(duì)象,然后通過(guò)引用變量名加點(diǎn)〔.〕運(yùn)算符來(lái)訪問(wèn)對(duì)象成員。實(shí)例成員變量是屬于類的一個(gè)對(duì)象實(shí)例的變量,要使用它必須通過(guò)創(chuàng)立類的對(duì)象實(shí)例然后用引用變量訪問(wèn)它。類屬成員變量和方法,即靜態(tài)成員,用static關(guān)鍵字聲明,靜態(tài)變量和靜態(tài)方法不依賴于具體實(shí)例,可以通過(guò)類名直接訪問(wèn)。修飾符指定類、方法和數(shù)據(jù)的訪問(wèn)方式。public表示任何用戶都具有訪問(wèn)權(quán)限。Private表示方法和數(shù)據(jù)成員只能在類內(nèi)部訪問(wèn)。方法的所有參數(shù)傳遞都是值傳遞。對(duì)于根本類型的參數(shù)傳遞實(shí)際值,對(duì)于引用類型的參數(shù)傳遞對(duì)象的引用。具體隱藏實(shí)現(xiàn)是通過(guò)設(shè)定修改器與訪問(wèn)器方法把類中的數(shù)據(jù)封裝起來(lái),通過(guò)這些方法訪問(wèn)類的數(shù)據(jù)提高了平安性。This是指向類的當(dāng)前實(shí)例的引用,關(guān)鍵字this也能在構(gòu)造方法中使用,this〔〕調(diào)用同一個(gè)類的另一個(gè)構(gòu)造方法。創(chuàng)立的對(duì)象存儲(chǔ)在對(duì)內(nèi)存中,這是一種靈活的存儲(chǔ)機(jī)制,你不必自己定義對(duì)象的生命周期,在適宜的時(shí)候垃圾回收器會(huì)對(duì)垃圾對(duì)象進(jìn)行清理以釋放內(nèi)存空間。第四章繼承和多態(tài)繼承和多態(tài)4.1繼承根底4.2構(gòu)造器的調(diào)用順序4.3繼承還是組合?4.4Object類4.5toString方法4.6對(duì)象的比較4.1繼承根底類與類之間還有一種父與子的關(guān)系,子類繼承父類方法與屬性,這個(gè)我們就稱之為繼承子類擁有父類的一些公有的屬性和方法,并且子類可能也會(huì)有自己的方法和屬性除了添加父類中沒(méi)有的新方法外子類還可以通過(guò)重寫父類的方法來(lái)重定義自己的行為方式繼承根底重寫與重載不同,重載需要不同的參數(shù)來(lái)區(qū)別相同方法名的方法,重寫是發(fā)生在子類與父類上,重寫父類方法必須與父類的方法名同名同參并且同返回值。當(dāng)訪問(wèn)修飾符為private時(shí),說(shuō)明該方法不能被重寫,同樣當(dāng)方法具有final關(guān)鍵字時(shí)該方法不能被重寫。子類雖然重寫了父類的某個(gè)方法,但仍然需要用到父類的這個(gè)方法,這時(shí)使用super關(guān)鍵字仍然可以調(diào)用父類的方法。程序4.1TestExtends.java例如繼承機(jī)制程序4.2TestOstrich.javapublicclassTestOstrich{publicstaticvoidmain(String[]args){ Birdostrich1=newOstrich();//向上轉(zhuǎn)型 ostrich1.fly();}}classBird{ publicstaticvoidfly(){ System.out.println("BirdFlying!"); }}classOstrichextendsBird{ publicstaticvoidfly(){ System.out.println("Ican'tfly!"); }}輸出結(jié)果:BirdFlying!St

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論