版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第1章面向?qū)ο蟾攀?.1面向過程與面向?qū)ο蟮?/p>
方法論比較2023/11/223系統(tǒng)建模方法軟件危機(jī)與系統(tǒng)建模方法的發(fā)展兩種流行的建模方法:面向過程建模方法面向?qū)ο蠼7椒?023/11/224面向過程的建模方法和建模語言始于20世紀(jì)70年代的結(jié)構(gòu)化分析設(shè)計(StructuredAnalysisandDesign,SAD)方法。把一個系統(tǒng)看作是功能的集合,可以進(jìn)行分解。用數(shù)據(jù)流圖設(shè)計系統(tǒng)的模塊結(jié)構(gòu)。IDEF(ICAMDEFinitionmethod)圖形化建模語言是面向過程建模技術(shù)的代表。2023/11/225IDEF的基本表示法盒子代表活動,連到盒子上的箭頭表示由活動產(chǎn)生的、或活動所需要的信息或真實對象。盒子左邊及上方進(jìn)入的箭頭表示為完成此活動所需要的數(shù)據(jù),控制說明了控制變換的條件或環(huán)境,或者說是約束;右邊離開盒子的箭頭表示執(zhí)行活動時產(chǎn)生的數(shù)據(jù);下方的箭頭作為執(zhí)行的機(jī)制,可以是執(zhí)行活動的人或設(shè)備。箭頭限制了盒子間的關(guān)系,而不是表示活動的順序。2023/11/226面向?qū)ο蟮慕7椒ㄅc建模語言發(fā)源于20世紀(jì)60年代,Simula語言中引入了類(Class)的概念;但真正的面向?qū)ο蟪绦蛟O(shè)計是Smalltalk語言奠定基礎(chǔ)的,“面向?qū)ο蟆币辉~也是Smalltalk首先采用的;C++的問世促進(jìn)面向?qū)ο蠹夹g(shù)的發(fā)展,也使之成為標(biāo)準(zhǔn)化的面向?qū)ο蟪绦蛟O(shè)計語言。20世紀(jì)90年代初,Booch、Jocobson、Rumbaugh一起開發(fā)了統(tǒng)一建模語言(UnifiedModelingLanguage,UML)。UML可以用于確定、展示和記錄軟件系統(tǒng),UML中的圖形標(biāo)記尤其適用于面向?qū)ο蟮能浖O(shè)計。2023/11/227UML的基本表示法UML有一套復(fù)雜的標(biāo)記法,這里只給出對類的基本表示,就是在一個矩形框中可以詳細(xì)描述類(抽象類、接口、對象實例等)的名稱、屬性和操作。2023/11/228面向過程程序設(shè)計方法從程序設(shè)計范型(Paradigm,指設(shè)計程序的規(guī)范、模型和風(fēng)格)看:
程序=過程(定義)+(過程)調(diào)用。從程序語言角度出發(fā),依靠各種循環(huán)、函數(shù)調(diào)用、參數(shù)傳遞維護(hù)程序。重視程序流程,不在乎數(shù)據(jù)的傳遞方式,只要程序能運行就可以了。2023/11/229面向過程程序設(shè)計方法的缺點子程序(過程)的抽象級別(函數(shù))太低,難以重用。需要花相當(dāng)多的成本維護(hù)程序與程序之間的關(guān)聯(lián)性。數(shù)據(jù)和操作相分離,當(dāng)一個或多個數(shù)據(jù)的結(jié)構(gòu)發(fā)生了變化,這種變化將波及程序的很多部分甚至遍及整個程序,往往變量和參數(shù)傳來傳去,傳到最后根本就不知道這個變量的作用何在,故程序的復(fù)雜性很難控制。已不適宜描述復(fù)雜的數(shù)據(jù)對象。2023/11/2210面向?qū)ο筌浖_發(fā)方法面向?qū)ο蟪绦虻幕驹貫閷ο螅∣bject)。程序結(jié)構(gòu)一般由類的定義和類的使用兩部分組成。程序中的一切操作都是通過向?qū)ο蟀l(fā)送相應(yīng)的消息來實現(xiàn):對象接收到消息后,啟動有關(guān)的方法完成相應(yīng)的操作。從面向?qū)ο蟪绦蛟O(shè)計范型看:
程序=對象+消息。2023/11/2211面向?qū)ο蠹夹g(shù)的優(yōu)點直觀性可增加程序的模塊性(Modularity)可提高程序的可復(fù)用性(Reusability)增加可擴(kuò)展性(Extendibility)可改善程序的可維護(hù)性(Maintainability),減少維護(hù)負(fù)荷可控制程序的復(fù)雜性可改進(jìn)質(zhì)量,降低成本2023/11/2212面向?qū)ο蠹夹g(shù)的缺點與困難面向?qū)ο笮枰耆淖兠總€人的思想以及開發(fā)文化面向?qū)ο蟛粌H僅是編程面向?qū)ο笮枰P(guān)注于需求、分析和設(shè)計開發(fā)人員必須和用戶緊密合作面向?qū)ο蟮脑S多優(yōu)點要經(jīng)過較長的時間才能顯示出來面向?qū)ο蠹夹g(shù)不能保證你能構(gòu)建出正確的系統(tǒng)2023/11/2213討論面向過程方法的優(yōu)勢面向?qū)ο蠓椒ǖ膬?yōu)勢結(jié)合面向過程與面向?qū)ο蠓椒ǖ膽?yīng)用優(yōu)勢歷史反思1.2面向?qū)ο蠹夹g(shù)的基本原則2023/11/2215OO(ObjectOrientation)四原則抽象(Abstraction)封裝(Encapsulation)模塊化(Modularity)分層(Hierarchy)2023/11/2216問題域的合理抽象實體抽象一個對象表示一個問題域的實體的有用模型。動作抽象一個對象提供一個通用化的操作集,它們的執(zhí)行是相似或有關(guān)聯(lián)的功能。子系統(tǒng)抽象一個對象是一組對象和操作的集合,它們是一個大系統(tǒng)的特定組成部分。對象設(shè)計成敗的關(guān)鍵就是抽象類型必須符合人們對該客觀事物的認(rèn)識習(xí)慣,這就要求設(shè)計人員對問題域應(yīng)該有深入的理解,并且具有較強(qiáng)的綜合分析能力,而達(dá)到這一步往往是有難度的。1.3面向?qū)ο蠹夹g(shù)的基本要素2023/11/2218寫字課老師:強(qiáng)調(diào)“飛鳳家”
——遙遠(yuǎn)的記憶,仍耳熟能詳…面向?qū)ο罄蠋煟簭?qiáng)調(diào)“PIE”
——多態(tài)(Polymorphism)
——繼承(Inheritance)
——封裝(Encapsulation)
“寫好飛鳳家”對于學(xué)習(xí)面向?qū)ο蟮膯⑹?/p>
2023/11/2219封裝性外界要改變一個對象的狀態(tài),也就是對它所包含的數(shù)據(jù)進(jìn)行操作,只能向該對象發(fā)出請求消息,然后由該對象的對應(yīng)方法來改變其自身的狀態(tài)。是一種典型的“黑箱”機(jī)制。有利于代碼復(fù)用和信息隱藏。2023/11/2220信息隱藏(Informationhiding)如果一個類想獲取另一個類的信息,必須先征得同意,而不是直接拿來就用;意味著類模塊中除了向外界提供的接口以外,還有大量不為外界所知的用以支持這些接口實現(xiàn)的屬性和方法。2023/11/2221繼承性繼承是在類、子類以及對象之間自動地共享屬性和方法的一種機(jī)制。繼承具有傳遞性,即如果有類C繼承B,B(間接)繼承A,則C(間接)繼承A。一個類實際上繼承了層次結(jié)構(gòu)中在其上面的所有類的全部描述。2023/11/2222繼承性保證類可合理層次化2023/11/2223多態(tài)性同一個方法名的操作不僅僅定義一種行為,因此有比較強(qiáng)的表達(dá)能力和更多的用途。多態(tài)形式:
參數(shù)多態(tài)(即重載,Overload)
包含多態(tài)(即覆蓋,Override)多態(tài)為描述客觀事物提供了極大的能動性。2023/11/2224不同人對play()請求的響應(yīng)2023/11/2225面向?qū)ο蟾拍詈托g(shù)語abstractclass(抽象類)對象不能從中實例化的類abstraction(抽象)某項目(如類或操作)的基本特征aggregation(聚合)表示兩個類或組件之間是“ispartof”關(guān)系aggregationhierarchy(聚合層次)通過聚合聯(lián)系的一組類association(關(guān)聯(lián))對象和其它對象發(fā)生聯(lián)系attribute(屬性)類知道的東西(數(shù)據(jù)/信息)cardinality(基數(shù))表示概念“多少”?class(類)相似對象的軟件抽象,創(chuàng)建對象的模板cohesion(內(nèi)聚)封裝單元(例如組件或類)的相關(guān)程度collaboration(協(xié)作)類協(xié)作來完成它們的職責(zé)2023/11/2226面向?qū)ο蟾拍詈托g(shù)語(續(xù))component(組件)可以獨立開發(fā)、分發(fā)以及與其它組件一起構(gòu)建較大單元的內(nèi)聚功能單元composition(組合)更強(qiáng)類型的聚合,其中“整體”完全負(fù)責(zé)它的各組成部分,每“部分”對象僅和一個“整體”對象相聯(lián)系concreteclass(具體類)可以進(jìn)行對象實例化的類coupling(耦合)兩個項目的依賴程度encapsulation(封裝)把相關(guān)的概念(例如類或組件)歸組到一個項目informationhiding(信息隱藏)限制外部對屬性的訪問inheritance(繼承)表示“isa”、“islike”或“iskindof”關(guān)系inheritancehierarchy(繼承層次)通過繼承相聯(lián)系的一組類instance(實例)對象是類的一個實例2023/11/2227面向?qū)ο蟾拍詈托g(shù)語(續(xù))instantiate(實例化)從類中實例化對象interface(接口)定義內(nèi)聚行為集的一個或多個操作特征標(biāo)記的集合message(消息)消息是信息請求或執(zhí)行一個動作的請求messaging(消息傳遞)為了協(xié)作,類互相發(fā)送與接收消息method(方法)類完成的事情(與結(jié)構(gòu)化編程中的函數(shù)相似)multipleinheritance(多重繼承)類直接從一個以上的類繼承object(對象)一個人、地址、物品、事件、概念、屏幕顯示或者報表objectspace(對象空間)主存,加上網(wǎng)絡(luò)上所有可供使用的存儲空間optionality(可選性)表示概念“你想要嗎?”override(覆蓋)有時在子類中你需要覆蓋(重定義)屬性與方法2023/11/2228面向?qū)ο蟾拍詈托g(shù)語(續(xù))pattern(模式)考慮到相關(guān)因素時通用問題的可復(fù)用方案persistence(持久性)對象怎樣永久被保存的問題persistentobject(持久對象)一個保存到永久存儲的對象polymorphism(多態(tài))以不同方式響應(yīng)同一消息的不同對象,使對象可以不必知道相互的類型而交互singleinheritance(單一繼承)一個類直接從唯一一個類繼承stereotype(原型)表示一種建模元素的通用用法subclass(子類)如果類B繼承自類A,我們說B是A的子類superclass(父類)如果類B繼承自類A,我們說A是B的父類transitoryobject(臨時對象)一個沒有被保存到永久存儲的對象1.4面向?qū)ο蟮能浖_發(fā)體系2023/11/2230面向?qū)ο罂蚣芟萝浖_發(fā)的生命周期
2023/11/2231OO框架下軟件項目開發(fā)的一般過程
業(yè)務(wù)模型需求模型分析模型設(shè)計模型實現(xiàn)模型測試模型關(guān)鍵UML元素業(yè)務(wù)流程(用例)、業(yè)務(wù)域?qū)ο笙到y(tǒng)、角色、用例、交互業(yè)務(wù)包/類/對象/消息軟硬件配置、包/類/對象/消息組件、節(jié)點、編碼測試計劃和測試案例關(guān)鍵問題業(yè)務(wù)建模系統(tǒng)黑箱建模不含實現(xiàn)細(xì)節(jié)的問題域業(yè)務(wù)元素建模面向特定實現(xiàn)(如軟硬件配置)分析圖及其說明書更改分布式環(huán)境物理元素建模以及按需求編碼單元(類/操作)測試、集成系統(tǒng)測試目標(biāo)(元素之間的低耦合高聚合)足夠的業(yè)務(wù)或企業(yè)信息足夠的用例/方案信息以及遞增/迭代計劃滿足需求的最簡單業(yè)務(wù)/問題域模型支持最大編碼或手工編碼的足夠信息優(yōu)化組件框架(網(wǎng)絡(luò)性能等)足夠的測試內(nèi)容靜態(tài)結(jié)構(gòu)圖業(yè)務(wù)域?qū)ο蠼巧娇驁D及用例圖包/類圖包/類圖組件與配置圖,逆向類圖-2023/11/2232OO框架下軟件項目開發(fā)的一般過程(續(xù))業(yè)務(wù)模型需求模型分析模型設(shè)計模型實現(xiàn)模型測試模型動態(tài)時基圖業(yè)務(wù)流程(用例)用例圖、各用例方案的順序圖、活動圖各用例方案的順序圖,狀態(tài)基類型的狀態(tài)圖及復(fù)雜操作的活動圖各用例方案的順序圖,狀態(tài)基類型的狀態(tài)圖及復(fù)雜操作的活動圖選擇性更改顯示分布信息的順序圖-關(guān)鍵團(tuán)隊成員業(yè)務(wù)分析師業(yè)務(wù)分析師業(yè)務(wù)分析師開發(fā)工程師架構(gòu)師,開發(fā)工程師開發(fā)工程師,測試工程師模型確認(rèn)項目經(jīng)理、架構(gòu)師、客戶項目經(jīng)理、架構(gòu)師、客戶項目經(jīng)理、架構(gòu)師、客戶項目經(jīng)理、架構(gòu)師項目經(jīng)理、架構(gòu)師項目經(jīng)理、架構(gòu)師、客戶2023/11/2233面向?qū)ο笙嚓P(guān)技術(shù)的基本概念及其關(guān)系
面向?qū)ο蠓治?/p>
(ObjectOrientedAnalysis,OOA)
OOA=對象+分類+繼承+消息通信面向?qū)ο笤O(shè)計
(ObjectOrientedDesign,OOD)面向?qū)ο蟪绦蛟O(shè)計
(ObjectOrientedProgramming,OOP)Java的地位第2章Java導(dǎo)論
2023/11/2216:4835主要內(nèi)容2.1Java語言的特點2.1.1簡單的面向?qū)ο蟪绦蛟O(shè)計語言2.1.2健壯安全的分布式語言2.1.3結(jié)構(gòu)中立、可移植性強(qiáng)的解釋型語言2.1.4高效能2.1.5支持多線程的動態(tài)語言2.1.6Java與幾種常用語言的比較2.2Java執(zhí)行環(huán)境2.2.1JVM機(jī)制——Java平臺的基礎(chǔ)2.2.2自動垃圾收集2.2.3保護(hù)域機(jī)制與沙箱模型2.2.4類加載器——啟動引擎的點火器2.3JDK的組成與安裝設(shè)置2.3.1Java平臺的組成結(jié)構(gòu)2.3.2SETPATH和SETCLASSPATH的作用2.4典型例子及常見問題2.4.1編譯器、解釋器、小程序觀察器和反編譯器2.4.2最簡單的例子2.4.3應(yīng)用程序的主方法2.4.4小程序的運行2.1Java語言的特點2023/11/2216:4837Java的由來1991年初,SunMicrosystems公司設(shè)立一項較大規(guī)?!跋M者電子產(chǎn)品先進(jìn)軟件發(fā)展項目”,該項目是為了發(fā)展小型、可靠、可移植、分布式、實時的嵌入式系統(tǒng)。
項目小組開發(fā)了一種與平臺無關(guān)的新語言,命名為“Oak”。其靈感來源于項目主持人JamesGosling辦公室外的一棵橡樹(Oak),它就是Java語言的前身。
但因Oak名稱與其它產(chǎn)品雷同,最后將開發(fā)的新語言取名為“Java”。據(jù)說是項目小組成員經(jīng)常在公司附近一家咖啡廳喝咖啡,因此把咖啡原產(chǎn)地Java作為新語言的名稱。1995年,SunMicrosystems公司正式發(fā)布Java產(chǎn)品。
2023/11/2216:4838與Java有關(guān)的一些圖片Java的標(biāo)識Java的吉祥物DukeJava之父JamesGosling2023/11/2216:4839Java語言的特點
在Java語言白皮書中,Java被描述為“是一種簡單、面向?qū)ο蟆⒎植际?、解釋、健壯、安全、結(jié)構(gòu)中立、可移植、高效能、多線程、動態(tài)的語言。Asimple,object-oriented,network-savvy,interpreted,robust,secure,architectureneutral,portable,high-performance,multithreaded,dynamiclanguage。
—JamesGosling,HenryMcGilton.TheJava?LanguageEnvironment,AWhitePaper.
2023/11/2216:4840簡單的面向?qū)ο蟪绦蛟O(shè)計語言
“爪哇”——Java總給人以小巧玲瓏
和C++很相近,但刪除許多極少被使用、不容易理解和令人混淆的C++功能,主要包括運算符重載、多重繼承以及廣泛的自動強(qiáng)迫同型。
自動垃圾收集(Automaticgarbagecollection)功能,這不僅簡化了Java程序的內(nèi)存分配與釋放工作,而且能大幅度減少程序中的漏洞。
Java程序非常小,對于在嵌入式的系統(tǒng)中使用是很重要的,同時也可以通過網(wǎng)絡(luò)輕易下載。
2023/11/2216:4841健壯安全的分布式語言
Java擁有廣泛的能輕易處理TCP/IP協(xié)議(如HTTP與FTP等)的類庫,更容易創(chuàng)建網(wǎng)絡(luò)連接。
除了運行時異常檢查外,Java提供了廣泛的編譯時異常檢查,以便盡早的發(fā)現(xiàn)可能存在的錯誤。同時,在Java中對象的創(chuàng)建機(jī)制(只能用new操作符)和自動垃圾收集機(jī)制大大減少了因內(nèi)存管理不當(dāng)引發(fā)的錯誤。
Java的驗證技術(shù)是以公鑰加密算法為基礎(chǔ)。
2023/11/2216:4842結(jié)構(gòu)中立、可移植性強(qiáng)的解釋型語言
為了讓Java應(yīng)用程序能夠在網(wǎng)絡(luò)上任何地方執(zhí)行,其編譯器會產(chǎn)出一種結(jié)構(gòu)中立的字節(jié)代碼(Bytecode)。字節(jié)代碼可以在提供Java運行時系統(tǒng)的多種不同處理器上面執(zhí)行。
Java嚴(yán)格定義了基本數(shù)據(jù)類型的大小和算術(shù)運算符的行為,因此不存在軟硬件平臺不兼容的情況。
Java系統(tǒng)本身具備相當(dāng)好的移植性。它的編譯器用Java寫成,而Java運行時程序則是參照POSIX(一個可移植接口工業(yè)標(biāo)準(zhǔn))規(guī)格使用ANSIC寫成的。
2023/11/2216:4843高效能
字節(jié)代碼可以動態(tài)地為執(zhí)行應(yīng)用程序的特定CPU解釋成機(jī)器碼。字節(jié)代碼格式在設(shè)計上即顧及機(jī)器碼的產(chǎn)生,因此實際的機(jī)器碼產(chǎn)生程序相當(dāng)簡單。
解釋器運行時不需檢查運行環(huán)境,自動垃圾收集器設(shè)為優(yōu)先級最低后臺線程,以保證內(nèi)存得到更有效的應(yīng)用。
對于運算量很大的程序可以采用原生代碼編寫,再經(jīng)由Java平臺轉(zhuǎn)換。Just-In-Time編譯技術(shù)更是讓字節(jié)代碼的執(zhí)行速度大幅度提升。
2023/11/2216:4844支持多線程的動態(tài)語言
在Java核心類庫中包含Thread類,同時Java運行時系統(tǒng)提供了線程監(jiān)視器和同步鎖定機(jī)制。多線程的其它優(yōu)點包括更好的交互式回應(yīng)能力與實時執(zhí)行行為。
Java是一種比C或C++更具動態(tài)特性的語言。它在設(shè)計上強(qiáng)調(diào)為進(jìn)化中的運算環(huán)境提供支援。甚至可以在不中斷網(wǎng)絡(luò)服務(wù)的情況下替換相關(guān)的組件。
2023/11/2216:4845Java與幾種常用語言的比較
2.2Java執(zhí)行環(huán)境2023/11/2216:4847Java執(zhí)行環(huán)境
2023/11/2216:4848Java虛擬機(jī)(JVM)執(zhí)行引擎負(fù)責(zé)把字節(jié)代碼導(dǎo)入虛擬機(jī);內(nèi)存管理
負(fù)責(zé)分配內(nèi)存給對象和數(shù)組,并進(jìn)行垃圾收集;錯誤和異常管理
負(fù)責(zé)異常的捕獲或拋出;線程接口
負(fù)責(zé)對線程的支持;對原生方法(NativeMethod)的支持
支持調(diào)用C/C++等語言編寫的方法。
2023/11/2216:4849什么是JVM?Java虛擬機(jī)(JavaVirtualMachine,JVM)實際上是一個類似于真實計算機(jī)系統(tǒng)的抽象機(jī)(AbstractComputingMachine),它擁有一組指令集,用來解釋“.class”字節(jié)代碼;也就是說,JVM并不認(rèn)識所謂的Java語言,而僅僅能夠讀懂class文件中有限的指令、符號及其它一些輔助信息。2023/11/2216:4850JVM類似于數(shù)控機(jī)床的數(shù)控系統(tǒng)數(shù)控機(jī)床數(shù)控機(jī)床抽象數(shù)控機(jī)床可以加工各種形狀的物體原因在于它擁有一個可以能讀懂指令的核心系統(tǒng)MachineVirtualMachine2023/11/2216:4851解釋產(chǎn)品(問題域)編程人員是熟悉的!但數(shù)控系統(tǒng)(JVM)是不認(rèn)識的??!編程人員根據(jù)自己的想法,在相應(yīng)的平臺上編寫出符合產(chǎn)品形狀要求的程序(.java)2023/11/2216:4852解釋這是程序員可以理解的程序(.java),因其是接近自然語言的。但對數(shù)控系統(tǒng)(JVM)來說太復(fù)雜,它是讀不懂的!2023/11/2216:4853解釋于是程序員利用相應(yīng)的平臺把它編譯成數(shù)控系統(tǒng)(JVM)可以理解的程序(.class)于是數(shù)控機(jī)床(JVM)動起來啦!產(chǎn)品也做出來啦!可是最終數(shù)控機(jī)床(JVM)也沒有明白它做出的產(chǎn)品是什么,只知道走了許許多多的直線或圓弧(JVM指令集)!2023/11/2216:4854演示虛擬的真實的2023/11/2216:4855JREJVM協(xié)同類加載器、字節(jié)代碼校驗器和Java類庫一起,組成了整個Java運行環(huán)境JRE。
一次編寫隨處運行
(WriteOnceRunAnywhere,WORA)2023/11/2216:4856保護(hù)域機(jī)制與沙箱模型
保護(hù)域(Protectiondomain)是有關(guān)系統(tǒng)安全的基本概念和重要模塊。域界定了作為主體的系統(tǒng)實體對各種對象集直接訪問的被許可程度。保護(hù)域概念提供一種在受保護(hù)單元中分組和隔離不安全因素的便利機(jī)制。
2023/11/2216:4857類加載器——啟動引擎的點火器
加載當(dāng)JVM加載類時,它尋找類或接口的二進(jìn)制表示,并從這個二進(jìn)制表示(通常是Java編譯器生成的類文件)生成Class對象。Class對象封裝類或接口的運行時狀態(tài)。鏈接鏈接是取得加載的類或接口,并將其與JVM運行時環(huán)境結(jié)合起來,以準(zhǔn)備執(zhí)行的過程。初始化初始化在JVM調(diào)用類或接口初始化方法時發(fā)生。2023/11/2216:4858類加載器——啟動引擎的點火器JVM在啟動獨立Java應(yīng)用程序時的第一步是生成初始Class對象,表示包含publicstaticvoidmain(String[]args)方法的Java的類。JVM鏈接與初始化這個類并調(diào)用main()方法。這個方法推動所需要的其他類和接口的加載、鏈接與初始化。
2.3JDK的組成與安裝設(shè)置2023/11/2216:4860Java平臺的組成結(jié)構(gòu)
2023/11/2216:4861JDK版本主要特點
2023/11/2216:4862SETPATH的作用SETPATH=c:\j2sdk1.4.0\bin含義是告訴操作系統(tǒng)到哪里可以找到Java的編譯器等可執(zhí)行文件的位置。2023/11/2216:4863SETCLASSPATH的作用SETCLASSPATH=.;c:\j2sdk1.4.0\lib\tools.jar含義是告訴操作系統(tǒng)到哪里可以找到編譯或解釋運行時所需字節(jié)代碼的位置。2023/11/2216:4864在運行環(huán)境中的設(shè)置方法如果系統(tǒng)平臺為Windows9X,則把以上的設(shè)置內(nèi)容加入系統(tǒng)根目錄下的autoexec.bat文件中;如果系統(tǒng)平臺為WindowsNT、Windows2000及以后版本,則把以上的設(shè)置內(nèi)容加入【控制面板】|【系統(tǒng)】|【高級】|【環(huán)境變量】中。2.4典型例子及常見問題2023/11/2216:4866演示編譯器javac的使用解釋器java的使用小程序觀察器appletviewer的使用反編譯器javap的使用2023/11/2216:4867應(yīng)用程序編程舉例//:HelloWorld.java//packageg3ds.joop.ch2;publicclassHelloWorld{//anapplication publicstaticvoidmain(String[]args){ System.out.println("HelloWorld!"); }}程序保存為HelloWorld.java編譯時執(zhí)行javacHelloWorld.java
得到字節(jié)代碼HelloWorld.class。運行時執(zhí)行javaHelloWorld
2023/11/2216:4868小程序編程舉例//:HelloWorldApplet.java//packageg3ds.joop.ch2;importjava.awt.Graphics;importjavax.swing.JApplet;publicclassHelloWorldAppletextendsJApplet{//anapplet publicvoidpaint(Graphicsg){ g.drawString("HelloWorld!",150,50);}}<HTML><!--HelloWorldShow.html--><APPLETCODE="HelloWorldApplet.class"WIDTH=300HEIGHT=100></APPLET></HTML>保存為HelloWorldShow.html或HelloWorldShow.htmappletviewerHelloWorldShow.html
進(jìn)一步討論2023/11/2216:4870反編譯程序樣式j(luò)avap–cHelloWorld
則可以獲得字節(jié)碼的助記符版本:CompiledfromHelloWorld.javapublicclassHelloWorldextendsjava.lang.Object{publicHelloWorld();publicstaticvoidmain(java.lang.String[]);}MethodHelloWorld()0aload_01invokespecial#1<Methodjava.lang.Object()>4returnMethodvoidmain(java.lang.String[])0getstatic#2<Fieldjava.io.PrintStreamout>3ldc#3<String"HelloWorld!">5invokevirtual#4<Methodvoidprintln(java.lang.String)>8return2023/11/2216:4871哪些類被加載了2023/11/2216:4872使用Java的一些注意事項Java中規(guī)定,在一個.java的源文件中最多只能有一個(另一個意思是可以沒有)publicclass。當(dāng)這個publicclass存在時,要求該類名必須與.Java源文件的名字一致。如果你想編寫一個應(yīng)用程序(通常被聲明為publicclass),在這一個類中必須定義一個publicstaticvoidmain(String[]agrs)方法,在這個方法中,除了變量名agrs可以改變,其它內(nèi)容均不可改變,甚至排放的順序都是幾乎不可改變的。2023/11/2216:4873應(yīng)用程序的主方法JVM解釋應(yīng)用程序需要一個程序執(zhí)行入口,也就是程序中邏輯運行的啟動模塊,或者稱為應(yīng)用程序的驅(qū)動器,這就是對應(yīng)類中的main方法,它的聲明publicstaticvoidmain(String[]agrs)也叫main方法的標(biāo)志性簽名。JVM解釋某個應(yīng)用程序時,就會首先查找對應(yīng)類的這個main方法,當(dāng)無法匹配時就引發(fā)如上述的異常報告:
Exceptioninthread"main"java.lang.NoSuchMethodError:main
2023/11/2216:4874小程序的生命周期
2023/11/2216:4875小程序的HTML標(biāo)記和屬性<APPLET CODE=filename.class WIDTH=pixelsHEIGTH=pixels [ARCHIVE=archiveList] [CODEBASE=codebaseURL] [ALT=alternateText] [NAME=appletInstanceName] [ALIGN=alignment] [VSPACE=pixels][HSPACE=pixels] > [<PARAMNAME=appletAttribute1VALUE=value>] [<PARAMNAME=appletAttribute2VALUE=value>]
…</APPLET>第3章Java的基本語法2023/11/2277主要內(nèi)容3.1類型、值與基本變量3.1.1基本概念3.1.2基本類型3.1.3引用類型3.1.4類型轉(zhuǎn)換3.2運算符與表達(dá)式3.2.1算術(shù)運算符與表達(dá)式3.2.2關(guān)系運算符與表達(dá)式3.2.3邏輯運算符與表達(dá)式3.2.4位運算符與表達(dá)式3.2.5條件運算符與表達(dá)式3.2.6賦值運算符與表達(dá)式3.2.7instanceof運算符3.2.8運算符優(yōu)先級與賦值順序的理解3.2.9基本類型所支持的操作運算3.3語句3.3.1編組語句3.3.2表達(dá)式語句3.3.3選擇語句3.3.4循環(huán)語句3.3.5迭代與遞歸3.3.6控制轉(zhuǎn)移語句3.3.7注釋語句3.1類型、值與基本變量2023/11/2279基本概念:字符集
ASCII(AmericanStandardCodeforInformationInterchange)字符集:使用7位代碼表示大小寫字母、數(shù)字0~9以及若干控制字符,如NUL和EOT。ISO8859-1Latin-1字符集:在西歐,用戶希望字符集能夠表示他們本國字符集的所有字符,ASCII字符集因而被擴(kuò)展到8位,即增加了128個字符,用于表示英文中不存在的各種西歐語言的字符。Unicode字符集:是ISO標(biāo)準(zhǔn)16位字符集,支持65536個不同的字符。其中大約有21000個字符專門用于中文、日文和韓文的表意文字。ASCII、ISOLatin-1都是Unicode的子集。Java內(nèi)部使用2個字節(jié)表示每個字符,采用Unicode編碼。2023/11/2280基本概念:關(guān)鍵字、值、標(biāo)識符關(guān)鍵字(Keyword):也稱保留字(Reservedword),全部由小寫的英文字母所組成。關(guān)鍵字總共有50多個,其中一些留作將來供語言設(shè)計者擴(kuò)充語言功能時使用。值(Literal):是指不能由程序員規(guī)定的代表某一特定常量或數(shù)字的可知的或未知的字母或符號,一般譯作“直接量”或“字面值”,實際上泛指賦給各種不同類型(常指基本類型、字符串類型、空類型等)的有效值。本書將它簡稱為“值”,而另一個單詞“Value”則稱為“數(shù)值”。標(biāo)識符(Identifier):是程序員提供的名字,在Java中,標(biāo)識符的長度不受限制,但必須以字母、下劃線或$符號開始,隨后位置也可以包含數(shù)字。Java標(biāo)識符支持幾萬個Unicode字母中所包含的世界上任何重要語言中的任何字母。舉例:IdentifierTest.java
2023/11/2281Java關(guān)鍵字abstractdefaultifprivatethisbooleandoimplementsprotectedthrowbreakdoubleimportpublicthrowsbyteelseinstanceofreturntransientcaseextendsintshorttrycatchfinalinterfacestaticvoidcharfinallylongstrictfpvolatileclassfloatnativesuperwhileconstfornewswitchcontinuegotopackagesynchronizedconst和goto是保留字true,false和null為相應(yīng)類型的值,不屬于關(guān)鍵字2023/11/2282強(qiáng)類型語言
(Stronglytypedlanguage)Java屬于強(qiáng)類型的程序設(shè)計語言。所有變量和表達(dá)式在編譯時都有明確的類型,它有助于編譯時的錯誤檢測:類型限制了一個變量能夠擁有的或者一個表達(dá)式能夠生成的值;類型還限制了各種操作對這些值的支持程度以及決定操作的含義。2023/11/2283Java語言的類型結(jié)構(gòu)Java類型基本類型引用類型數(shù)值類型布爾類型整型浮點型類/接口類型數(shù)組類型byteshortintlongcharbooleanfloatclassdoubleinterfaceType[](空類型)(null)2023/11/2284基本類型
(PrimitiveType)boolean用于邏輯運算。int、long、byte和short用于整數(shù)算術(shù)運算。char主要用于輸入輸出。double和float用于實數(shù)(即浮點數(shù))的算術(shù)運算。整型數(shù)值缺省為int型,long型在數(shù)值之后加l或L浮點型數(shù)值缺省為double型,float型在數(shù)值之后加f或F2023/11/2285基本類型的特點基本類型在所有的平臺和實現(xiàn)中的定義相同,類型名稱屬于Java保留的關(guān)鍵字?;绢愋偷闹挡辉试S共享,任何一個基本類型的變量都會獨自擁有一份相同類型的值?;绢愋偷淖兞康闹抵荒芡ㄟ^賦值操作才能被改變。2023/11/2286基本類型的值(1)類型位數(shù)取值范圍byte8bits–128~127short16bits–32768~32767int32bits–2147483648~2147483647long64bits–9223372036854775808~9223372036854775807char16bits'\u0000'~'\uffff'(0~65535)2023/11/2287基本類型的值(2)類型位數(shù)取值范圍float32bits–3.40282347e+38f~–1.40239846e-45f0.0f1.40239846e-45f~3.40282347e+38fdouble64bits–1.79769313486231570e+308~
–4.94065645841246544e-3240.04.94065645841246544e-324~1.79769313486231570e+3082023/11/2288基本類型的值(3)類型位數(shù)取值范圍boolean1bittrue/false轉(zhuǎn)義字符Unicode字符含義\b\u0008backspaceBS(退格)\t\u0009horizontaltabHT(Tab鍵)\n\u000alinefeedLF(換行)\f\u000cformfeedFF(換頁)\r\u000dcarriagereturnCR(回車)\"\u0022"(doublequote,雙引號)\'\u0027'(singlequote,單引號)\\\u005c\(backslash,反斜杠)2023/11/2289舉例整數(shù)值的不同進(jìn)制表示:NumeralExpression.java字符的表達(dá)方式:CharacterExpression.java浮點數(shù)運算:FloatingTest.java數(shù)值類型的取值范圍:ValueScope.java2023/11/2290引用類型類類型(Classtype)接口類型(Interfacetype)數(shù)組類型(Arraytype)2023/11/2291類類型使用關(guān)鍵字“class”,它定義了一個新的引用類型,并描述這一類型的具體實現(xiàn)。Java語言定義的根類(Rootclass)是Object類,也就是說除了Object類以外,其它類都是Object類的直接或間接子類(Subclass),這些類只能擴(kuò)展(使用關(guān)鍵字“extends”
)自唯一一個業(yè)已存在的類。Object類是缺省的繼承父類,如果有一個類直接繼承自O(shè)bject類,“extendsObject”可以省略不寫。2023/11/2292類體的結(jié)構(gòu)組成類的成員類型:類成員(使用關(guān)鍵字static)和實例成員(無關(guān)鍵字static)形式:域(Field;也習(xí)慣地叫屬性,Attribute)、方法(Method)、內(nèi)嵌類(Nestedclass)和內(nèi)嵌接口(Nestedinterface)實例初始化或者類初始化的語句塊(Block)實例對象構(gòu)造器(Constructor,也稱構(gòu)造方法)舉例:ClassExample.java2023/11/2293接口類型使用關(guān)鍵字“interface”,定義一套必須由類或組件實現(xiàn)的操作特征標(biāo)記。一般有一個或多個操作特征標(biāo)記以及零個或多個屬性集合的定義。標(biāo)識接口(Taginterface):不包含任何成員的接口類型,如java.io.Serializable、java.lang.Cloneable通過類來實現(xiàn),使用關(guān)鍵字“implements”,多個接口類型之間用“,”隔開。類必須包括接口中定義的方法。接口可以進(jìn)行多繼承,也使用關(guān)鍵字“extends”
。接口類型中不存在被其它所有接口類型繼承的根接口類型。2023/11/2294接口體的結(jié)構(gòu)與特點包含與該接口有關(guān)的成員,這些成員可以是內(nèi)嵌類、內(nèi)嵌接口、常量或抽象方法。所有接口的成員都被隱式聲明為“public”;所有的內(nèi)嵌類或接口都被隱式聲明為“static”;所有的成員屬性都被隱式聲明為“static”和“final”,亦即所有的成員屬性都是常量;所有的成員方法都被隱式聲明為“abstract”,亦即所有的成員方法都不包含任何具體的實現(xiàn),但成員方法不能被聲明為“static”,因為靜態(tài)方法不能是抽象的。舉例:InterfaceExample.java
2023/11/2295數(shù)組類型一個數(shù)組對象包含一定數(shù)量的數(shù)組變量,稱為數(shù)組的組件或元素。數(shù)組元素通過一個非負(fù)的整型索引數(shù)值被引用。如果數(shù)組中包含有n個元素,則數(shù)組元素的索引值分別為0~(n-1)。數(shù)組元素的個數(shù)可以為零,這時該數(shù)組被稱為empty(空)數(shù)組。數(shù)組元素的類型可以是基本類型,也可以是其它的引用類型,一個數(shù)組中的所有元素的類型都是一樣的。2023/11/2296數(shù)組表示法Java語言中正式使用的表示法是,假如數(shù)組元素的類型表示為Type,則數(shù)組表示為Type[]x。如int[]x,讀作int數(shù)組x。另一種表示法是提供給那些有C/C++編程經(jīng)驗的人們使用的,將方括號移到變量名稱的后面,即Typex[],如intx[]。2023/11/2297數(shù)組的一些特點Java語言中沒有直接的多維數(shù)組定義,而是把多維數(shù)組的實現(xiàn)理解為數(shù)組的數(shù)組。Java語言中,多維數(shù)組中每維數(shù)組的長度可以不同,數(shù)組空間也不一定是連續(xù)分配的。數(shù)組的直接超類是Object類,因此可以調(diào)用Object類中的所有方法。每個數(shù)組類型都已經(jīng)實現(xiàn)了java.io.Serializable和java.lang.Cloneable接口,也就是可以對數(shù)組對象直接進(jìn)行串行化處理和對象復(fù)制,但對于多維數(shù)組也是只能實現(xiàn)單層復(fù)制。數(shù)組中元素的個數(shù)可通過數(shù)組屬性length進(jìn)行訪問。舉例:ArrayExample.java2023/11/2298基本類型的包裝類包裝類對應(yīng)的基本類型字符串轉(zhuǎn)換成數(shù)值數(shù)值轉(zhuǎn)換成字符串包裝類中定義的常量Bytebyteb=Byte.parseByte(s)b=newByte(s).byteValue()s=String.valueOf(b)TYPE,MAX_VALUE,MIN_VALUEShortshortsh=Short.parseShort(s)sh=newShort(s).shortValue()s=String.valueOf(sh)TYPE,MAX_VALUE,MIN_VALUECharacterchars=String.valueOf(c)TYPE,MAX_VALUE,MIN_VALUEIntegerintn=Interger.parseInt(s)n=newInteger(s).intValue()s=String.valueOf(n)TYPE,MAX_VALUE,MIN_VALUELonglongg=Long.parseLong(s)g=newLong(s).longValue()s=String.valueOf(g)TYPE,MAX_VALUE,MIN_VALUEFloatfloatf=Float.parseFloat(s)f=newFloat(s).floatValue()s=String.valueOf(f)TYPE,MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITYDoubledoubled=Double.parseDouble(s)d=newDouble(s).doubleValue()s=String.valueOf(d)TYPE,MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITYBooleanbooleanb=newBoolean(s).booleanValue()s=String.valueOf(b)TYPE,F(xiàn)ALSE,TRUE2023/11/2299與字符串相關(guān)的封裝類String和StringBuffer類分別用于處理不變字符串(常量)和可變字符串。Java語言中還提供了一種快速創(chuàng)建String對象的方式,非常像基本類型的賦值方式:
Stringstr=”Iamastringconstant.”
String被設(shè)計為存儲字符串常量的類,這種實例化形式在大多數(shù)情況下是更好的String構(gòu)造技術(shù),這與所創(chuàng)建的字符串存儲在字符串常量池使其可被共享有關(guān)。字符串常量池的工作機(jī)制是,當(dāng)需要某一個字符串時,先到池里查找,如果已經(jīng)存在,則直接引用;如果還沒有就在池中創(chuàng)建一個新的字符串對象。也可以說,字符串常量池中內(nèi)容相同的String對象只有一個,該對象直到JVM退出時才被清除。舉例:StringExample.java2023/11/22100類型轉(zhuǎn)換類型轉(zhuǎn)換方式分為窄化(Narrowing)和拓寬(Widening)轉(zhuǎn)換。編譯時可以自動執(zhí)行拓寬轉(zhuǎn)換(稱為Promotion,提升)。而窄化轉(zhuǎn)換則總是要求顯式執(zhí)行強(qiáng)制轉(zhuǎn)換(稱為Cast,轉(zhuǎn)型)。2023/11/22101基本類型的拓寬轉(zhuǎn)換原則如果存在一個double型,則按double型執(zhí)行運算。否則,如果存在一個float型,則按float型執(zhí)行運算。否則,如果存在一個long型,則按long型執(zhí)行運算。否則,按照32位的int型計算精度執(zhí)行運算。當(dāng)在整型與浮點型之間進(jìn)行轉(zhuǎn)換時,計算精度不僅僅是數(shù)據(jù)類型的取值范圍問題,它還包括浮點能夠存儲的十進(jìn)制數(shù)的位數(shù)。舉例:PrimitiveWidening.java2023/11/22102基本類型的窄化轉(zhuǎn)換窄化轉(zhuǎn)換意味著余數(shù)轉(zhuǎn)換,這種從一個大容量的數(shù)據(jù)類型到另一個小容量的數(shù)據(jù)類型的賦值只會取其較小的數(shù)值范圍,這可能造成數(shù)量級的損失。如果需要把一個范圍較大的整型數(shù)值賦給一個范圍較小的數(shù)據(jù)類型的變量,原則上都需要對數(shù)值執(zhí)行強(qiáng)制轉(zhuǎn)換。對于byte、short、char類型的變量,在相應(yīng)類型的取值范圍內(nèi)時,允許不需要顯式強(qiáng)制類型轉(zhuǎn)換而直接賦給int型數(shù)值,因為這樣做并不會引起數(shù)據(jù)丟失;當(dāng)所賦數(shù)值不在其取值范圍內(nèi)時,則必須顯式進(jìn)行類型強(qiáng)制轉(zhuǎn)換,否則將出現(xiàn)錯誤而不是警告。如果把浮點型數(shù)值轉(zhuǎn)換成整型數(shù)值,小數(shù)點后面的數(shù)值將被圓整去掉。舉例:PrimitiveNarrowing.java
2023/11/22103引用類型的轉(zhuǎn)換從子類型轉(zhuǎn)換為父類型即屬于引用類型的拓寬轉(zhuǎn)換,特別是從任何引用類型(包括類、接口、數(shù)組)轉(zhuǎn)換成Java的根類Object都屬于此種轉(zhuǎn)換形式。引用類型的拓寬轉(zhuǎn)換可以自動進(jìn)行,不會引發(fā)任何異常。引用類型的窄化轉(zhuǎn)換指的是從父類型轉(zhuǎn)換為子類型,特別是從Object類轉(zhuǎn)換成其它任何引用類型都屬于這種轉(zhuǎn)換形式。引用類型的窄化轉(zhuǎn)換同樣需要強(qiáng)制進(jìn)行,即所謂的轉(zhuǎn)型,這種轉(zhuǎn)換的使用十分廣泛,它體現(xiàn)了面向?qū)ο蟮亩鄳B(tài)性。轉(zhuǎn)型將在運行時進(jìn)行類型匹配檢查,如果類型不匹配將引發(fā)異常ClassCastException。舉例:ReferenceConversion.java2023/11/22104類型轉(zhuǎn)換討論自動轉(zhuǎn)換——
不要以為擴(kuò)大取值范圍就萬無一失浮點型的有效位問題引用型的屬性問題強(qiáng)制轉(zhuǎn)換3.2運算符和表達(dá)式2023/11/22106Java語言中的算術(shù)運算符與表達(dá)式操作數(shù)數(shù)目運算符表達(dá)式描述一元++op正值--op負(fù)值++++op,op++自增1----op,op--自減1二元+op1+op2加-op1-op2減*op1*op2乘/op1/op2除%op1%op2取模(求余)2023/11/22107Java語言中的關(guān)系運算符與表達(dá)式運算符表達(dá)式返回true的情況>op1>op2op1大于op2>=op1>=op2op1大于或等于op2<o(jì)p1<o(jì)p2op1小于op2<=op1<=op2op1小于或等于op2==op1==op2op1與op2相等!=op1!=op2op1與op2不等2023/11/22108Java語言中的邏輯運算符與表達(dá)式操作數(shù)取值表達(dá)式運算結(jié)果op1op2op1&&op2op1||op2!op1falsefalsefalsefalsetruefalsetruefalsetruetruetruefalsefalsetruefalsetruetruetruetruefalse2023/11/22109Java語言中的位運算符與表達(dá)式運算符表達(dá)式描述&op1&op2二元運算,邏輯與,參與運算的兩個操作數(shù),如果兩個相應(yīng)位都為1(或true),則該位的結(jié)果為1(或true),否則為0(false)。|op1|op2二元運算,邏輯或,參與運算的兩個操作數(shù),如果兩個相應(yīng)位有一個為1(或true),則該位的結(jié)果為1(或true),否則為0(false)。^op1^op2二元運算,邏輯異或,參與運算的兩個操作數(shù),如果兩個相應(yīng)位值相反,則該位的結(jié)果為1(或true),否則為0(false)。~~op1一元運算,對數(shù)據(jù)的每個二進(jìn)制位按位取反。<<op1<<op2二元運算,操作數(shù)op1按位左移op2位,每左移一位,其數(shù)值加倍。>>op1>>op2二元運算,操作數(shù)op1按位右移op2位,每右移一位,其數(shù)值減半。>>>op1>>>op2二元運算,操作數(shù)op1按位右移op2位,正整數(shù)運算與>>同,負(fù)整數(shù)則求該數(shù)的反碼,但符號位不變。舉例:BitOperand.java2023/11/22110其它運算符條件運算符:三元運算符,其表達(dá)式為
someCondition?tureExpression:falseExpression賦值運算符與表達(dá)式:=、+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^=
instanceof運算符2023/11/22111Java語言運算符優(yōu)先級以及
同等優(yōu)先級運算符的組合順序運算符描述優(yōu)先級(數(shù)越大優(yōu)先級越高)同等優(yōu)先級結(jié)合順序()圓括號15左→右new創(chuàng)建類實例15左→右[]數(shù)組下標(biāo)運算符15左→右.成員(屬性、方法)選擇15左→右++、--后綴自增(自減)114右→左++、--前綴自增(自減)113右→左~按位取反13右→左!邏輯非13右→左-、+算術(shù)負(fù)(正)號13右→左(Type)強(qiáng)制類型轉(zhuǎn)換13右→左*、/、%乘、除、取模運算12左→右+、-加、減運算11左→右<<、>>、>>>左右移位運算10左→右2023/11/22112Java語言運算符優(yōu)先級以及
同等優(yōu)先級運算符的組合順序(續(xù))運算符描述優(yōu)先級(數(shù)越大優(yōu)先級越高)同等優(yōu)先級結(jié)合順序instanceof、
<、<=、>、>=關(guān)系運算9左→右==、!=相等性運算8左→右&位邏輯與7左→右^位邏輯異或6左→右|位邏輯或5左→右&&條件與4左→右||條件或3左→右?:條件運算符2右→左=、*=、/=、%=、+=、-=、<<=、>>=、>>>=、&=、^=、|=賦值運算符1右→左舉例:EvaluationOrder.java2023/11/22113關(guān)于斷句無雞鴨亦可無魚肉亦可青菜一小碟足矣2023/11/22114整型支持的操作運算比較運算,其結(jié)果為boolean型:大小比較<、<=、>、>=相等比較==、!=數(shù)值運算,其結(jié)果為int或long型:加減運算+、-乘除運算*、/、%符號運算+、-前(后)綴自增運算++前(后)綴自減運算--位運算<<、>>、>>>按位取反運算~按位邏輯運算&、|、^條件運算?:類型轉(zhuǎn)換運算(Type)字符串連接運算+Byte、Short、Integer、Long、Character等包裝類中的方法Java中存在一個稱為的java.math.BigInteger類,支持無限制的整數(shù)運算。2023/11/22115浮點型支持的操作運算比較運算,其結(jié)果為boolean型:大小比較<、<=、>、>=相等比較==、!=數(shù)值運算,其結(jié)果為float或double型:加減運算+、-乘除運算*、/、%符號運算+、-前(后)綴自增運算++前(后)綴自減運算--條件運算?:類型轉(zhuǎn)換運算(Type)字符串連接運算+Float、Double等包裝類中的方法以及java.lang.Math類,Math類中包含許多與數(shù)學(xué)運算有關(guān)的方法,如冪運算方法exp(doublea)、隨機(jī)數(shù)生成方法random()、正弦函數(shù)計算方法sin(doublea),等等。Java語言存在一個稱為java.math.BigDecimal的類,支持無限制的實數(shù)運算。2023/11/22116布爾型支持的操作運算關(guān)系比較運算==、!=邏輯非運算!邏輯運算&、|、^條件與和條件或&&、||條件運算?:字符串連接運算+,布爾型的值true和false都可以轉(zhuǎn)換成字符串,并作字符串連接運算。Boolean包裝類中的方法。3.3語句2023/11/22118編組語句代碼塊由一對花括號“{}”界定,中間包含零或多個語句以及局部變量聲明組成,且能夠以任何順序存在。
無論任何位置,只要允許單個語句存在,都可以放置代碼塊。空語句僅僅是分號“;”本身。
空語句不執(zhí)行任何動作,無論何處,只要可以放置普通語句,都可以使用空語句。
空語句總是可以完全正常執(zhí)行。2023/11/22119表達(dá)式語句賦值、方法調(diào)用、類的實例化、自增(減)1運算等,都是表達(dá)式語句。常用的語句格式如下:newStringBuffer(“Hello”);//創(chuàng)建不被引用的實例對象newJFrame().setVisible(true);//方法調(diào)用i++;//自增運算a=b;//賦值2023/11/22120選擇語句if語句的一般語法格式如下: if(boolean-expression) statement1; [else statement2;]switch語句的一般語法格式如下: switch(expression){ casevalue1:statement1; break; casevalue2:statement2; break;
… casevalueN:statemendN; break; [default:defaultStatement;] }舉例:Kid.java2023/11/22121循環(huán)語句while語句 [initialization]//初始化部分 while(termination){//布爾型表達(dá)式,循環(huán)終止條件 body;//循環(huán)體部分 [iteration;]//迭代部分 }do-while語句 [initialization]//初始化部分 do{ body;//循環(huán)體部分 [iteration;]//迭代部分 }while(termination);//布爾型表達(dá)式,循環(huán)終止條件for語句 for(initialization;termination;iteration){//初始化部分;循環(huán)終止條件;迭代部分 body;//循環(huán)體部分 }無限循環(huán)語句
while(true){…}
for(;;){…}2023/11/22122討論:迭代與遞歸迭代(Iteration)法通常采用循環(huán)語句(如for語句、while語句、do-while語句等)來完成運算,遞歸(Recursion)法通常采用選擇語句(如if語句、if-else語句、switch語句等)來完成運算。本質(zhì)上迭代和遞歸都包含著循環(huán):迭代法是顯式調(diào)用了循環(huán)語句,而遞歸法則通過自我調(diào)用的策略來實現(xiàn)循環(huán)。舉例:Fibonacci.java2023/11/22123控制轉(zhuǎn)移語句標(biāo)識語句continue語句break語句return語句2023/11/22124注釋語句單行注釋以“//”開始,直至行末端結(jié)束。多行注釋也可以采用以“/*”開始、以“*/”結(jié)束的方式來定義。以“/**”開始的注釋形式,表明此后的正文內(nèi)容可以由自動文檔生成器javadoc讀取。舉例:Control.java第4章Java對象的生命周期2023/11/22126主要內(nèi)容4.1對象的聲明與創(chuàng)建4.1.1基本術(shù)語4.1.2對象的聲明4.1.3對象的創(chuàng)建4.1.4數(shù)組對象的聲明和創(chuàng)建4.2對象的初始化4.2.1成員變量的缺省初始化過程4.2.2類成員變量的初始化與靜態(tài)代碼塊4.2.3實例成員變量的初始化與構(gòu)造方法4.2.4程序健壯性的代價和編碼啟示4.2.5類成員變量與實例成員變量初始化的區(qū)別4.2.6繼承鏈上相關(guān)類的加載順序以及構(gòu)造方法鏈的調(diào)用4.3對象的使用4.3.1多態(tài)的使用4.3.2對象的比較4.3.3對象的傳遞4.3.4內(nèi)部類的使用4.4對象的清除4.1對象的聲明與創(chuàng)建2023/11/22128基本術(shù)語:類類(Class)
可以由用戶自己定義的引用類型,它是相似對象的軟件抽象、創(chuàng)建對象的模板。每一個類都組合了一些能夠反映某種類型屬性的字段和反映某種類型動作的方法。2023/11/22129基本術(shù)語:對象對象(Object)
是一個人、地址、物品、事件、概念、屏幕顯示或者報表,它屬于某一個類,對象擁有自己的屬性值和方法調(diào)用。作為類設(shè)計的初衷,每一個類都將存在許多相互獨立的對象。通常我們說一個對象是類的一個實例,一個對象的生命周期包括聲明、創(chuàng)建、使用和清除四個狀態(tài)。2023/11/22130基本術(shù)語:對象引用在Java語言中只能引用對象,無法聲明一個直接包含對象的變量。類類型變量稱為引用變量,它們并不直接保留對象,只是保留對象的地址,而不是擁有對象本身,通過引用變量即可以得到一個對象。所有對象總是且只是通過內(nèi)存引用訪問的,這種方式稱為間接尋址。對象引用可以在需要的時候自動撤銷。2023/11/22131類、對象和對象引用的關(guān)系示意圖
2023/11/22132基本術(shù)語:類變量類變量必須在類體中聲明,并且使用關(guān)鍵字“static”,因此也稱為靜態(tài)變量。類變量在類被加載時完成相應(yīng)的初始化工作。類變量在一個運行系統(tǒng)中只有一份供整個類和實例對象共享的值,該值有可能被類(及其子類)和它們所創(chuàng)建的實例改變,每一次的改變都將影響到該類(及其子類)和其它實例的調(diào)用。類變量的作用域是整個類。2023/11/22133基本術(shù)語:實例變量實例變量在類體中聲明但不使用關(guān)鍵字“static”,也稱為非靜態(tài)變量。它在對象初始化時完成相應(yīng)的初始化工作,并由某一個對象獨自擁有。實例變量的作用域是某一個類具體創(chuàng)建的實例對象。2023/11/22134基本術(shù)語:局部變量局部變量在某一個語句(如for語句)或代碼塊(如方法體)中聲明。當(dāng)該語句或代碼塊被調(diào)用時,每次都將立即創(chuàng)建相關(guān)的局部變量。在一個局部變量的聲明語句中可能包含有用于初始化的表達(dá)式,但是,該表達(dá)式一般要等到這條聲明語句被執(zhí)行的時候才會進(jìn)行相應(yīng)的初始化。當(dāng)該語句或代碼塊被執(zhí)行完畢退出,相應(yīng)的局部變量也將失效。局部變量的作用域是聲明該變量的語句或代碼塊。2023/11/22135基本術(shù)語:參數(shù)變量方法和構(gòu)造方法用于傳遞信息的參數(shù)(Argument)變量和作用于方法體的局部變量相類似,當(dāng)方法被調(diào)用的時候進(jìn)行相應(yīng)的初始化,當(dāng)方法體執(zhí)行結(jié)束后失效。2023/11/22136變量舉例類變量和實例變量都擁有一個缺省初值,如果某個變量在初始化時沒有顯式賦值,那么將被賦予缺省初值。局部變量則沒有缺省初值,如果某個變量在初始化時沒有顯式賦值,并且在其后的語句中試圖直接調(diào)用,Java編譯器將會報錯提示,以保證每個變量都是按照編程人員的意圖進(jìn)行賦值。舉例:VariableInit.java2023/11/22137討論以下程序的問題所在publicclassInitializationDemo{ intscore=100;
publicStringisExcellent(){ Stringresult;
if(score>=90) result="Veryverygood!";
returnresult; }
publicstaticvoidmain(String[]args){ InitializationDemoobj=newInitializationDemo(); System.out.print(obj.isExcellent()); }}2023/11/22138基本術(shù)語:關(guān)鍵字thisthis只能用于與實例有關(guān)的代碼塊中,如實例方法、構(gòu)造方法、實例初始化代碼塊或?qū)嵗兞康某跏蓟a塊等,this就代表當(dāng)前或者正在創(chuàng)建的實例對象的引用,通??梢岳眠@一關(guān)鍵字實現(xiàn)與局部變量同名的實例變量的調(diào)用。在構(gòu)造方法中還可以用this來代表要顯式調(diào)用的其它構(gòu)造方法。除此以外,使用this關(guān)鍵字都將引發(fā)編譯時錯誤。2023/11/22139基本術(shù)語:關(guān)鍵字supersuper只能用于與實例有關(guān)的代碼塊中,如實例方法、構(gòu)造方法、實例初始化代碼塊或?qū)嵗兞康某跏蓟a塊等,super代表當(dāng)前或者正在創(chuàng)建的實例對象的父類,通??梢岳眠@一關(guān)鍵字實現(xiàn)對父類同名屬性或方法的調(diào)用。在構(gòu)造方法中還可以用super來代表要調(diào)用的父類構(gòu)造方法,以實現(xiàn)構(gòu)造方法鏈的初始化。由于Object類為Java語言的根類,已經(jīng)沒有父類,因此,如果在Object類中使用了關(guān)鍵字super,將引發(fā)編譯時錯誤。2023/11/22140this和super舉例this和super是在設(shè)計類的時候、而不是使用類及其實例的時候引用。舉例:ThisSuper.java2023/11/22141基本術(shù)語:訪問權(quán)限修飾符訪問權(quán)限控制由強(qiáng)到弱的順序是public、protected、(default)、private。public訪問權(quán)限意味著在任何地方,只要能訪問到該類,即可訪問到該成員。protected訪問權(quán)限意味著類中的成員允許同一個包或該類的擴(kuò)展子類訪
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四年級數(shù)學(xué)(四則混合運算帶括號)計算題專項練習(xí)與答案
- 綠植租擺協(xié)議書(2篇)
- 南京工業(yè)大學(xué)浦江學(xué)院《移動通信技術(shù)產(chǎn)品及物聯(lián)網(wǎng)應(yīng)用》2022-2023學(xué)年第一學(xué)期期末試卷
- 南京工業(yè)大學(xué)浦江學(xué)院《社會企業(yè)》2022-2023學(xué)年第一學(xué)期期末試卷
- 分?jǐn)?shù)的產(chǎn)生說課稿
- 蹲踞式跳遠(yuǎn)說課稿
- 南京工業(yè)大學(xué)浦江學(xué)院《計算機(jī)網(wǎng)絡(luò)課程設(shè)計》2023-2024學(xué)年期末試卷
- 《線段的垂直平分線》說課稿
- 幼兒課件圖畫教學(xué)課件
- 南京工業(yè)大學(xué)《虛擬儀器設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 砌筑工-技能評分記錄表3
- 司索工安全操作規(guī)程
- 人教版數(shù)學(xué)五年級上冊課本習(xí)題(題目)
- 鋼筋合格證(共6頁)
- BIM技術(shù)全過程工程管理及應(yīng)用策劃方案
- 彎扭構(gòu)件制作工藝方案(共22頁)
- 水利工程填塘固基、堤身加固施工方法
- 中醫(yī)針灸的骨邊穴怎樣定位
- 人教版八年級上冊英語單詞表默寫版(直接打印)
- 電脫水、電脫鹽講解
- 違約損失率(LGD)研究
評論
0/150
提交評論