Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程(第二版)Java導(dǎo)論與基本語(yǔ)法課件_第1頁(yè)
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程(第二版)Java導(dǎo)論與基本語(yǔ)法課件_第2頁(yè)
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程(第二版)Java導(dǎo)論與基本語(yǔ)法課件_第3頁(yè)
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程(第二版)Java導(dǎo)論與基本語(yǔ)法課件_第4頁(yè)
Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程(第二版)Java導(dǎo)論與基本語(yǔ)法課件_第5頁(yè)
已閱讀5頁(yè),還剩100頁(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)介

1、第 1 章 Java導(dǎo)論 第1頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程2主要內(nèi)容1.1 Java語(yǔ)言的特點(diǎn)1.1.1 簡(jiǎn)單的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言1.1.2 健壯安全的分布式語(yǔ)言1.1.3 結(jié)構(gòu)中立、可移植性強(qiáng)的解釋型語(yǔ)言1.1.4 高效能1.1.5 支持多線程的動(dòng)態(tài)語(yǔ)言1.1.6 Java與幾種常用語(yǔ)言的比較1.2 Java執(zhí)行環(huán)境1.2.1 JVM機(jī)制Java平臺(tái)的基礎(chǔ)1.2.2 自動(dòng)垃圾收集1.2.3 保護(hù)域機(jī)制與沙箱模型1.2.4 類(lèi)加載器啟動(dòng)引擎的點(diǎn)火器1.3 JDK的組成與安裝設(shè)置1.3.1 Java平臺(tái)的組成結(jié)構(gòu)1.3.2 SET PATH和SET CLASSP

2、ATH的作用1.3.3 Java開(kāi)發(fā)平臺(tái)簡(jiǎn)介1.4 典型例子及常見(jiàn)問(wèn)題1.4.1 編譯器、解釋器、小程序觀察器和反編譯器1.4.2 簡(jiǎn)單的“Hello World!”例子1.4.3 應(yīng)用程序的主方法1.4.4 小程序的運(yùn)行第2頁(yè),共105頁(yè)。1.1 Java語(yǔ)言的特點(diǎn)第3頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程4Java的由來(lái)1991年初,Sun Microsystems公司設(shè)立一項(xiàng)較大規(guī)模“消費(fèi)者電子產(chǎn)品先進(jìn)軟件發(fā)展項(xiàng)目”,該項(xiàng)目是為了發(fā)展小型、可靠、可移植、分布式、實(shí)時(shí)的嵌入式系統(tǒng)。 項(xiàng)目小組開(kāi)發(fā)了一種與平臺(tái)無(wú)關(guān)的新語(yǔ)言,命名為“Oak”。其靈感來(lái)源于項(xiàng)目主持人Jame

3、s Gosling辦公室外的一棵橡樹(shù)(Oak),它就是Java語(yǔ)言的前身。 但因Oak名稱(chēng)與其它產(chǎn)品雷同,最后將開(kāi)發(fā)的新語(yǔ)言取名為“Java”。據(jù)說(shuō)是項(xiàng)目小組成員經(jīng)常在公司附近一家咖啡廳喝咖啡,因此把咖啡原產(chǎn)地Java作為新語(yǔ)言的名稱(chēng)。1995年,Sun Microsystems公司正式發(fā)布Java產(chǎn)品。 第4頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程5與Java有關(guān)的一些圖片Java的標(biāo)識(shí)Java的吉祥物DukeJava之父James Gosling第5頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程6Java語(yǔ)言的特點(diǎn) 在Java語(yǔ)言白皮書(shū)中,Java被描述為

4、“是一種簡(jiǎn)單、面向?qū)ο?、分布式、解釋、健壯、安全、結(jié)構(gòu)中立、可移植、高效能、多線程、動(dòng)態(tài)的語(yǔ)言。A simple, object-oriented, network-savvy, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded, dynamic language。 James Gosling, Henry McGilton. The Java Language Environment,A White Paper. 第6頁(yè),共105頁(yè)。2022/8/4Java

5、面向?qū)ο蟪绦蛟O(shè)計(jì)教程7簡(jiǎn)單的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言 “爪哇”Java總給人以小巧玲瓏 和C+很相近,但刪除許多極少被使用、不容易理解和令人混淆的C+功能,主要包括運(yùn)算符重載、多重繼承以及廣泛的自動(dòng)強(qiáng)迫同型。 自動(dòng)垃圾收集(Automatic garbage collection)功能,這不僅簡(jiǎn)化了Java程序的內(nèi)存分配與釋放工作,而且能大幅度減少程序中的漏洞。 Java程序非常小,對(duì)于在嵌入式的系統(tǒng)中使用是很重要的,同時(shí)也可以通過(guò)網(wǎng)絡(luò)輕易下載。 第7頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程8健壯安全的分布式語(yǔ)言 Java擁有廣泛的能輕易處理TCP/IP協(xié)議(如HTTP與FTP

6、等)的類(lèi)庫(kù),更容易創(chuàng)建網(wǎng)絡(luò)連接。 除了運(yùn)行時(shí)異常檢查外,Java提供了廣泛的編譯時(shí)異常檢查,以便盡早的發(fā)現(xiàn)可能存在的錯(cuò)誤。同時(shí),在Java中對(duì)象的創(chuàng)建機(jī)制(只能用new操作符)和自動(dòng)垃圾收集機(jī)制大大減少了因內(nèi)存管理不當(dāng)引發(fā)的錯(cuò)誤。 Java的驗(yàn)證技術(shù)是以公鑰加密算法為基礎(chǔ)。 第8頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程9結(jié)構(gòu)中立、可移植性強(qiáng)的解釋型語(yǔ)言 為了讓Java應(yīng)用程序能夠在網(wǎng)絡(luò)上任何地方執(zhí)行,其編譯器會(huì)產(chǎn)出一種結(jié)構(gòu)中立的字節(jié)代碼(Bytecode)。字節(jié)代碼可以在提供Java運(yùn)行時(shí)系統(tǒng)的多種不同處理器上面執(zhí)行。 Java嚴(yán)格定義了基本數(shù)據(jù)類(lèi)型的大小和算術(shù)運(yùn)算符的行為

7、,因此不存在軟硬件平臺(tái)不兼容的情況。 Java系統(tǒng)本身具備相當(dāng)好的移植性。它的編譯器用Java寫(xiě)成,而Java運(yùn)行時(shí)程序則是參照POSIX(一個(gè)可移植接口工業(yè)標(biāo)準(zhǔn))規(guī)格使用ANSI C寫(xiě)成的。 第9頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程10高效能 字節(jié)代碼可以動(dòng)態(tài)地為執(zhí)行應(yīng)用程序的特定CPU解釋成機(jī)器碼。字節(jié)代碼格式在設(shè)計(jì)上即顧及機(jī)器碼的產(chǎn)生,因此實(shí)際的機(jī)器碼產(chǎn)生程序相當(dāng)簡(jiǎn)單。 解釋器運(yùn)行時(shí)不需檢查運(yùn)行環(huán)境,自動(dòng)垃圾收集器設(shè)為優(yōu)先級(jí)最低后臺(tái)線程,以保證內(nèi)存得到更有效的應(yīng)用。 對(duì)于運(yùn)算量很大的程序可以采用原生代碼編寫(xiě),再經(jīng)由Java平臺(tái)轉(zhuǎn)換。Just-In-Time (JI

8、T)編譯技術(shù)更是讓字節(jié)代碼的執(zhí)行速度大幅度提升。 第10頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程11支持多線程的動(dòng)態(tài)語(yǔ)言 在Java核心類(lèi)庫(kù)中包含Thread類(lèi),同時(shí)Java運(yùn)行時(shí)系統(tǒng)提供了線程監(jiān)視器和同步鎖定機(jī)制。多線程的其它優(yōu)點(diǎn)包括更好的交互式回應(yīng)能力與實(shí)時(shí)執(zhí)行行為。 Java是一種比C或C+更具動(dòng)態(tài)特性的語(yǔ)言。它在設(shè)計(jì)上強(qiáng)調(diào)為進(jìn)化中的運(yùn)算環(huán)境提供支援。甚至可以在不中斷網(wǎng)絡(luò)服務(wù)的情況下替換相關(guān)的組件。 第11頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程12Java與幾種常用語(yǔ)言的比較 第12頁(yè),共105頁(yè)。1.2 Java執(zhí)行環(huán)境第13頁(yè),共105頁(yè)。2

9、022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程14Java執(zhí)行環(huán)境 Java源程序(*.java)首先被編譯成字節(jié)代碼(*.class);這些字節(jié)代碼就是Java虛擬機(jī)可以解釋的指令集。經(jīng)過(guò)安全驗(yàn)證后字節(jié)代碼進(jìn)入虛擬機(jī),要么經(jīng)由解釋器解釋執(zhí)行,要么由JIT編譯器(也稱(chēng)為即時(shí)代碼生成器)轉(zhuǎn)成機(jī)器代碼執(zhí)行,程序中使用到的類(lèi)則根據(jù)需要?jiǎng)討B(tài)加載到內(nèi)存中。Java執(zhí)行環(huán)境由編譯時(shí)(Compile-time)和運(yùn)行時(shí)(Runtime)環(huán)境兩部分組成。第14頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程15JREJVM協(xié)同類(lèi)加載器、字節(jié)代碼校驗(yàn)器和Java類(lèi)庫(kù)一起,組成了整個(gè)Java運(yùn)行環(huán)境JRE

10、。 一次編寫(xiě)隨處運(yùn)行(Write Once Run Anywhere, WORA)第15頁(yè),共105頁(yè)。Java虛擬機(jī)機(jī)制Java虛擬機(jī)(Java Virtual Machine, JVM)是一個(gè)類(lèi)似于真實(shí)計(jì)算機(jī)系統(tǒng)的抽象機(jī)(Abstract Computing Machine),它擁有一組指令集,用來(lái)解釋“.class”字節(jié)代碼;也就是說(shuō),JVM并不認(rèn)識(shí)所謂的Java語(yǔ)言,而僅僅能夠讀懂class文件中有限的指令、符號(hào)及其他一些輔助信息。它除了負(fù)責(zé)執(zhí)行指令外,還要管理數(shù)據(jù)、內(nèi)存和寄存器。這臺(tái)虛擬的機(jī)器在任何平臺(tái)上都提供給編譯程序一個(gè)的共同的接口。編譯程序只需要面向虛擬機(jī),生成虛擬機(jī)能夠理解的

11、代碼,然后由解釋器來(lái)將虛擬機(jī)代碼轉(zhuǎn)換為特定系統(tǒng)的機(jī)器碼執(zhí)行。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程16第16頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程17JVM的組成執(zhí)行引擎 負(fù)責(zé)把字節(jié)代碼導(dǎo)入虛擬機(jī);內(nèi)存管理 負(fù)責(zé)分配內(nèi)存給對(duì)象和數(shù)組,并進(jìn)行垃圾收集;錯(cuò)誤和異常管理 負(fù)責(zé)異常的捕獲或拋出;線程接口 負(fù)責(zé)對(duì)線程的支持;對(duì)原生方法(Native Method)的支持 支持調(diào)用C/C+等語(yǔ)言編寫(xiě)的方法。 第17頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程18JVM的理解:機(jī)床數(shù)控機(jī)床虛擬機(jī)床數(shù)控機(jī)床數(shù)控機(jī)床抽象數(shù)控機(jī)床可以加工各種形狀的物體原因在于它擁有一個(gè)

12、可以能讀懂指令的核心系統(tǒng)MachineVirtual Machine第18頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程19解釋產(chǎn)品(問(wèn)題域)編程人員是熟悉的!但數(shù)控系統(tǒng)(JVM)是不認(rèn)識(shí)的!編程人員根據(jù)自己的想法,在相應(yīng)的平臺(tái)上編寫(xiě)出符合產(chǎn)品形狀要求的程序(.java)第19頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程20解釋這是程序員可以理解的程序(.java),因其是接近自然語(yǔ)言的。但對(duì)數(shù)控系統(tǒng)(JVM)來(lái)說(shuō)太復(fù)雜,它是讀不懂的!第20頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程21解釋于是程序員利用相應(yīng)的平臺(tái)把它編譯成數(shù)控系統(tǒng)(JVM)可以

13、理解的程序(.class)于是數(shù)控機(jī)床(JVM)動(dòng)起來(lái)啦!產(chǎn)品也做出來(lái)啦!可是最終數(shù)控機(jī)床(JVM)也沒(méi)有明白它做出的產(chǎn)品是什么,只知道走了許許多多的直線或圓弧(JVM指令集)!第21頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程22示例虛擬的真實(shí)的第22頁(yè),共105頁(yè)。實(shí)現(xiàn)代碼移植的一種技術(shù)策略(為什么要使用Java虛擬機(jī)? )2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程23使用Java虛擬機(jī),其技術(shù)路線的本質(zhì)就是改變了編譯型語(yǔ)言環(huán)境把易變的應(yīng)用和相對(duì)穩(wěn)定的系統(tǒng)平臺(tái)之間直接綁定的做法,通過(guò)增加語(yǔ)言環(huán)境的中介接口,實(shí)現(xiàn)了易變的應(yīng)用和相對(duì)穩(wěn)定的系統(tǒng)平臺(tái)之間的松耦合。第23頁(yè),共10

14、5頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程24保護(hù)域機(jī)制與沙箱模型 保護(hù)域(Protection domain)是有關(guān)系統(tǒng)安全的基本概念和重要模塊。域界定了作為主體的系統(tǒng)實(shí)體對(duì)各種對(duì)象集直接訪問(wèn)的被許可程度。保護(hù)域概念提供一種在受保護(hù)單元中分組和隔離不安全因素的便利機(jī)制。 第24頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程25類(lèi)加載器啟動(dòng)引擎的點(diǎn)火器 加載 當(dāng)JVM加載類(lèi)時(shí),它尋找類(lèi)或接口的二進(jìn)制表示,并從這個(gè)二進(jìn)制表示(通常是Java編譯器生成的類(lèi)文件)生成Class對(duì)象。Class對(duì)象封裝類(lèi)或接口的運(yùn)行時(shí)狀態(tài)。鏈接 鏈接是取得加載的類(lèi)或接口,并將其與JVM運(yùn)行時(shí)環(huán)境

15、結(jié)合起來(lái),以準(zhǔn)備執(zhí)行的過(guò)程。初始化 初始化在JVM調(diào)用類(lèi)或接口初始化方法時(shí)發(fā)生。第25頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程26類(lèi)加載器啟動(dòng)引擎的點(diǎn)火器JVM在啟動(dòng)獨(dú)立Java應(yīng)用程序時(shí)的第一步是生成初始Class對(duì)象,表示包含public static void main(String args)方法的Java的類(lèi)。JVM鏈接與初始化這個(gè)類(lèi)并調(diào)用main()方法。這個(gè)方法推動(dòng)所需要的其他類(lèi)和接口的加載、鏈接與初始化。 第26頁(yè),共105頁(yè)。1.3 JDK的組成與安裝設(shè)置第27頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程28Java平臺(tái)的組成結(jié)構(gòu) 第28頁(yè)

16、,共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程29Java標(biāo)準(zhǔn)版 第29頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程30Java版本的平臺(tái)信息 這些軟件可以從Sun公司的網(wǎng)站/上免費(fèi)下載獲得。值得說(shuō)明的是,這兩個(gè)版本的開(kāi)發(fā)工具包的縮寫(xiě)從“J2SDK(或Java 2 SDK)”改回到“JDK”,運(yùn)行環(huán)境的縮寫(xiě)從“J2RE”改回到“JRE”,下載時(shí)需要注意。 第30頁(yè),共105頁(yè)。Java版本的服務(wù)期限2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程31GA date : Release families general availability date EOL: Jav

17、a technology end of life參考網(wǎng)址:/products/archive/eol.policy.html第31頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程32SET PATH的作用SET PATH = c:jdk1.5.0bin 含義是告訴操作系統(tǒng)到哪里可以找到Java的編譯器等可執(zhí)行文件的位置。第32頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程33SET CLASSPATH的作用SET CLASSPATH = .;c:jdk1.5.0libtools.jar 含義是告訴操作系統(tǒng)到哪里可以找到編譯或解釋運(yùn)行時(shí)所需字節(jié)代碼的位置。第33頁(yè),共1

18、05頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程34在運(yùn)行環(huán)境中的設(shè)置方法如果系統(tǒng)平臺(tái)為Windows 9X,則把以上的設(shè)置內(nèi)容加入系統(tǒng)根目錄下的autoexec.bat文件中;如果系統(tǒng)平臺(tái)為Windows XP、Windows 2000及以后版本,則把以上的設(shè)置內(nèi)容加入【控制面板】|【系統(tǒng)】|【高級(jí)】|【環(huán)境變量】中。 第34頁(yè),共105頁(yè)。Java開(kāi)發(fā)平臺(tái)簡(jiǎn)介集成開(kāi)發(fā)環(huán)境: Integrated Development Environment, IDEJCreatorEclipseNetBeans2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程35第35頁(yè),共105頁(yè)。1.4 典型例子及常

19、見(jiàn)問(wèn)題第36頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程37常用指令簡(jiǎn)介編譯器 javac的使用 解釋器java的使用 小程序觀察器appletviewer的使用 反編譯器javap的使用第37頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程38應(yīng)用程序編程舉例 /: ApplicationStyle.java/package g3ds.joop.ch1;public class ApplicationStyle /an application public static void main (String args) System.out.println(Hell

20、o World!); 程序保存為ApplicationStyle.java 編譯時(shí)執(zhí)行javac ApplicationStyle.java得到字節(jié)代碼ApplicationStyle.class。運(yùn)行時(shí)執(zhí)行java ApplicationStyle 第38頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程39小程序編程舉例 /: AppletStyle.java/package g3ds.joop.ch1;import java.awt.Graphics;import javax.swing.JApplet;public class AppletStyle extends JApp

21、let /an appletpublic void paint(Graphics g) g.drawString(Hello World!,150,50); 保存為HelloWorldShow.html或HelloWorldShow.htm appletviewer HelloWorldShow.html 第39頁(yè),共105頁(yè)?!癏ello World!”的演繹2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程40第40頁(yè),共105頁(yè)。進(jìn)一步討論第41頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程42反編譯程序樣式j(luò)avap c ApplicationStyle 則可以獲得字節(jié)碼的助記

22、符版本:Compiled from ApplicationStyle.javapublic class HelloWorld extends java.lang.Object public HelloWorld(); public static void main(java.lang.String);Method HelloWorld() 0 aload_0 1 invokespecial #1 4 returnMethod void main(java.lang.String) 0 getstatic #2 3 ldc #3 5 invokevirtual #4 8 return第42頁(yè),共

23、105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程43哪些類(lèi)被加載了第43頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程44使用Java的一些注意事項(xiàng)Java中規(guī)定,在一個(gè) . java的源文件中最多只能有一個(gè)(另一個(gè)意思是可以沒(méi)有)public class。當(dāng)這個(gè)public class存在時(shí),要求該類(lèi)名必須與. Java源文件的名字一致。如果你想編寫(xiě)一個(gè)應(yīng)用程序(通常被聲明為public class),在這一個(gè)類(lèi)中必須定義一個(gè)public static void main(String agrs)方法,在這個(gè)方法中,除了變量名agrs可以改變,其它內(nèi)容均不可改變,甚至排放

24、的順序都是幾乎不可改變的。第44頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程45應(yīng)用程序的主方法JVM解釋?xiě)?yīng)用程序需要一個(gè)程序執(zhí)行入口,也就是程序中邏輯運(yùn)行的啟動(dòng)模塊,或者稱(chēng)為應(yīng)用程序的驅(qū)動(dòng)器,這就是對(duì)應(yīng)類(lèi)中的main方法,它的聲明public static void main(String agrs)也叫main方法的標(biāo)志性簽名。JVM解釋某個(gè)應(yīng)用程序時(shí),就會(huì)首先查找對(duì)應(yīng)類(lèi)的這個(gè)main方法,當(dāng)無(wú)法匹配時(shí)就引發(fā)如上述的異常報(bào)告:Exception in thread main java.lang.NoSuchMethodError: main 第45頁(yè),共105頁(yè)。2022/

25、8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程46小程序的生命周期 第46頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程47小程序的HTML標(biāo)記和屬性 第47頁(yè),共105頁(yè)。第 2 章 Java的基本語(yǔ)法第48頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程49主要內(nèi)容2.1 類(lèi)型、值與基本變量2.1.1 基本概念2.1.2 基本類(lèi)型2.1.3 引用類(lèi)型2.1.4 類(lèi)型轉(zhuǎn)換2.1.5 簡(jiǎn)化操作的一些輔助手段2.2 運(yùn)算符與表達(dá)式2.2.1 算術(shù)運(yùn)算符與表達(dá)式2.2.2 關(guān)系運(yùn)算符與表達(dá)式2.2.3 邏輯運(yùn)算符與表達(dá)式2.2.4 位運(yùn)算符與表達(dá)式2.2.5 條件運(yùn)算符與表達(dá)式2.2

26、.6 賦值運(yùn)算符與表達(dá)式2.2.7 instanceof運(yùn)算符2.2.8 運(yùn)算符優(yōu)先級(jí)與賦值順序的理解2.2.9 基本類(lèi)型所支持的操作運(yùn)算2.3 語(yǔ)句2.3.1 編組語(yǔ)句2.3.2 表達(dá)式語(yǔ)句2.3.3 選擇語(yǔ)句2.3.4 循環(huán)語(yǔ)句2.3.5 迭代與遞歸2.3.6 控制轉(zhuǎn)移語(yǔ)句2.3.7 注釋語(yǔ)第49頁(yè),共105頁(yè)。2.1 類(lèi)型、值與基本變量第50頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程51基本概念:字符集 ASCII(American Standard Code for Information Interchange)字符集:使用7位代碼表示大小寫(xiě)字母、數(shù)字09以及若干控

27、制字符,如NUL和EOT。 ISO8859-1 Latin-1字符集:在西歐,用戶希望字符集能夠表示他們本國(guó)字符集的所有字符,ASCII字符集因而被擴(kuò)展到8位,即增加了128個(gè)字符,用于表示英文中不存在的各種西歐語(yǔ)言的字符。Unicode字符集:是ISO標(biāo)準(zhǔn)16位字符集,支持65536個(gè)不同的字符。其中大約有21000個(gè)字符專(zhuān)門(mén)用于中文、日文和韓文的表意文字。 ASCII、ISO Latin-1都是Unicode的子集。Java內(nèi)部使用2個(gè)字節(jié)表示每個(gè)字符,采用Unicode編碼。 第51頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程52基本概念:關(guān)鍵字、值、標(biāo)識(shí)符關(guān)鍵字(Key

28、word) :也稱(chēng)保留字(Reserved word),全部由小寫(xiě)的英文字母所組成。關(guān)鍵字總共有50多個(gè),其中一些留作將來(lái)供語(yǔ)言設(shè)計(jì)者擴(kuò)充語(yǔ)言功能時(shí)使用。 值 (Literal):是指不能由程序員規(guī)定的代表某一特定常量或數(shù)字的可知的或未知的字母或符號(hào),一般譯作“直接量”或“字面值”,實(shí)際上泛指賦給各種不同類(lèi)型(常指基本類(lèi)型、字符串類(lèi)型、空類(lèi)型等)的有效值。本書(shū)將它簡(jiǎn)稱(chēng)為“值”,而另一個(gè)單詞“Value”則稱(chēng)為“數(shù)值”。 標(biāo)識(shí)符(Identifier):是程序員提供的名字,在Java中,標(biāo)識(shí)符的長(zhǎng)度不受限制,但必須以字母、下劃線或$符號(hào)開(kāi)始,隨后位置也可以包含數(shù)字。Java標(biāo)識(shí)符支持幾萬(wàn)個(gè)Uni

29、code字母中所包含的世界上任何重要語(yǔ)言中的任何字母。 舉例: IdentifierTest.java 第52頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程53Java關(guān)鍵字 const和goto是保留字 true, false和null為相應(yīng)類(lèi)型的值,不屬于關(guān)鍵字主要用途關(guān) 鍵 字用于內(nèi)置類(lèi)型booleanbytechardoublefloatintlongshortstrictfpvoid用于對(duì)象newsuperthis用于選擇語(yǔ)句casedefaultelseifswitch用于循環(huán)語(yǔ)句doforwhile用于控制轉(zhuǎn)移breakcontinuereturn用于異常處理cat

30、chfinallythrowthrowstryassert用于線程synchronized用于修飾說(shuō)明abstractfinalprivateprotectedpublicstatic用于其他方法或相關(guān)類(lèi)classinstanceofnativetransientvolatile用于類(lèi)的擴(kuò)展和接口的繼承extendsimplementsimportinterfaceenum package留作將來(lái)使用constgoto第53頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程54強(qiáng)類(lèi)型語(yǔ)言(Strongly typed language)Java屬于強(qiáng)類(lèi)型的程序設(shè)計(jì)語(yǔ)言。所有變量和表達(dá)

31、式在編譯時(shí)都有明確的類(lèi)型,它有助于編譯時(shí)的錯(cuò)誤檢測(cè):類(lèi)型限制了一個(gè)變量能夠擁有的或者一個(gè)表達(dá)式能夠生成的值;類(lèi)型還限制了各種操作對(duì)這些值的支持程度以及決定操作的含義。第54頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程55Java語(yǔ)言的類(lèi)型結(jié)構(gòu) 第55頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程56基本類(lèi)型(Primitive Type)boolean 用于邏輯運(yùn)算。int、long、byte和short 用于整數(shù)算術(shù)運(yùn)算。char 主要用于輸入輸出。double和float 用于實(shí)數(shù)(即浮點(diǎn)數(shù))的算術(shù)運(yùn)算。整型數(shù)值缺省為int型,long型在數(shù)值之后加l或L浮點(diǎn)

32、型數(shù)值缺省為double型,float型在數(shù)值之后加f或F第56頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程57基本類(lèi)型的特點(diǎn)基本類(lèi)型在所有的平臺(tái)和實(shí)現(xiàn)中的定義相同,類(lèi)型名稱(chēng)屬于Java保留的關(guān)鍵字?;绢?lèi)型的值不允許共享,任何一個(gè)基本類(lèi)型的變量都會(huì)獨(dú)自擁有一份相同類(lèi)型的值?;绢?lèi)型的變量的值只能通過(guò)賦值操作才能被改變。第57頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程58基本類(lèi)型的值(1)類(lèi) 型位 數(shù)取值范圍有符號(hào)類(lèi)型byte8 bits128 127(-27 27-1)short16 bits32 768 32 767(-215 215-1)int32 bi

33、ts2 147 483 648 2 147 483 647(-231 231-1)long64 bits9 223 372 036 854 775 808 9 223 372 036 854 775 807(-263 263-1)無(wú)符號(hào)類(lèi)型char16 bitsu0000 uffff(0 65 535,即0 216-1)第58頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程59基本類(lèi)型的值(2)類(lèi) 型位 數(shù)取值范圍float32 bits3.40282347e+38f 1.40239846e-45f0.0f1.40239846e-45f 3.40282347e+38fdouble6

34、4 bits1.79769313486231570e+308 4.94065645841246544e-3240.04.94065645841246544e-324 1.79769313486231570e+308第59頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程60基本類(lèi)型的值(3)類(lèi) 型位 數(shù)取值范圍boolean1 bittrue / false轉(zhuǎn)義字符Unicode字符含 義 bu0008backspace BS(退格) tu0009horizontal tab HT(Tab鍵) nu000alinefeed LF(換行) fu000cform feed FF(換頁(yè))

35、ru000dcarriage return CR(回車(chē)) u0022(double quote,雙引號(hào)) u0027(single quote,單引號(hào)) u005c(backslash,反斜杠)第60頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程61舉 例整數(shù)值的不同進(jìn)制表示:NumeralExpression.java 字符的表達(dá)方式:CharacterExpression.java 浮點(diǎn)數(shù)NaN結(jié)果及浮點(diǎn)計(jì)算的非精確性演示:FloatingTest.java 數(shù)值類(lèi)型的取值范圍:ValueScope.java 第61頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程

36、62引用類(lèi)型類(lèi)類(lèi)型(Class type)接口類(lèi)型(Interface type)數(shù)組類(lèi)型(Array type)枚舉類(lèi)型(Enumerate type) 第62頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程63類(lèi)類(lèi)型 使用關(guān)鍵字“class”,它定義了一個(gè)新的引用類(lèi)型,并描述這一類(lèi)型的具體實(shí)現(xiàn)。 Java語(yǔ)言定義的根類(lèi)(Root class)是Object類(lèi),也就是說(shuō)除了Object類(lèi)以外,其它類(lèi)都是Object類(lèi)的直接或間接子類(lèi)(Subclass),這些類(lèi)只能擴(kuò)展(使用關(guān)鍵字“extends” )自唯一一個(gè)業(yè)已存在的類(lèi)。Object類(lèi)是缺省的繼承父類(lèi),如果有一個(gè)類(lèi)直接繼承自O(shè)

37、bject類(lèi),“extends Object”可以省略不寫(xiě)。 第63頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程64類(lèi)體的結(jié)構(gòu)組成類(lèi)的成員類(lèi)型:類(lèi)成員(使用關(guān)鍵字static)和實(shí)例成員(無(wú)關(guān)鍵字static)形式:域(Field;也習(xí)慣地叫屬性,Attribute)、方法(Method)、內(nèi)嵌類(lèi)(Nested class)和內(nèi)嵌接口(Nested interface) 實(shí)例初始化或者類(lèi)初始化的語(yǔ)句塊(Block)實(shí)例對(duì)象構(gòu)造器(Constructor,也稱(chēng)構(gòu)造方法)舉例:ClassExample.java 第64頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程65

38、接口類(lèi)型 使用關(guān)鍵字“interface”,定義一套必須由類(lèi)或組件實(shí)現(xiàn)的操作特征標(biāo)記。一般有一個(gè)或多個(gè)操作特征標(biāo)記以及零個(gè)或多個(gè)屬性集合的定義。 標(biāo)識(shí)接口(Tag interface):不包含任何成員的接口類(lèi)型,如java.io.Serializable、java.lang.Cloneable通過(guò)類(lèi)來(lái)實(shí)現(xiàn),使用關(guān)鍵字“implements”,多個(gè)接口類(lèi)型之間用“,”隔開(kāi) 。類(lèi)必須包括接口中定義的方法 。接口可以進(jìn)行多繼承,也使用關(guān)鍵字“extends” 。接口類(lèi)型中不存在被其它所有接口類(lèi)型繼承的根接口類(lèi)型。 第65頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程66接口體的結(jié)構(gòu)與特

39、點(diǎn)包含與該接口有關(guān)的成員,這些成員可以是內(nèi)嵌類(lèi)、內(nèi)嵌接口、常量或抽象方法。所有接口的成員都被隱式聲明為“public”;所有的內(nèi)嵌類(lèi)或接口都被隱式聲明為“static”;所有的成員屬性都被隱式聲明為“static”和“final”,亦即所有的成員屬性都是常量;所有的成員方法都被隱式聲明為“abstract”,亦即所有的成員方法都不包含任何具體的實(shí)現(xiàn),但成員方法不能被聲明為“static”,因?yàn)殪o態(tài)方法不能是抽象的。舉例:InterfaceExample.java 第66頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程67數(shù)組類(lèi)型 一個(gè)數(shù)組對(duì)象包含一定數(shù)量的數(shù)組變量,稱(chēng)為數(shù)組的組件或

40、元素。數(shù)組元素通過(guò)一個(gè)非負(fù)的整型索引數(shù)值被引用。如果數(shù)組中包含有n個(gè)元素,則數(shù)組元素的索引值分別為0(n-1)。數(shù)組元素的個(gè)數(shù)可以為零,這時(shí)該數(shù)組被稱(chēng)為empty(空)數(shù)組。數(shù)組元素的類(lèi)型可以是基本類(lèi)型,也可以是其它的引用類(lèi)型,一個(gè)數(shù)組中的所有元素的類(lèi)型都是一樣的。 第67頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程68數(shù)組表示法Java語(yǔ)言中正式使用的表示法是,假如數(shù)組元素的類(lèi)型表示為T(mén)ype,則數(shù)組表示為T(mén)ype x。如int x,讀作int數(shù)組x。另一種表示法是提供給那些有C/C+編程經(jīng)驗(yàn)的人們使用的,將方括號(hào)移到變量名稱(chēng)的后面,即Type x,如int x。 第68頁(yè),

41、共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程69數(shù)組的一些特點(diǎn)Java語(yǔ)言中沒(méi)有直接的多維數(shù)組定義,而是把多維數(shù)組的實(shí)現(xiàn)理解為數(shù)組的數(shù)組。 Java語(yǔ)言中,多維數(shù)組中每維數(shù)組的長(zhǎng)度可以不同,數(shù)組空間也不一定是連續(xù)分配的。 數(shù)組的直接超類(lèi)是Object類(lèi),因此可以調(diào)用Object類(lèi)中的所有方法。 每個(gè)數(shù)組類(lèi)型都已經(jīng)實(shí)現(xiàn)了java.io.Serializable和java.lang.Cloneable接口,也就是可以對(duì)數(shù)組對(duì)象直接進(jìn)行串行化處理和對(duì)象復(fù)制,但對(duì)于多維數(shù)組也是只能實(shí)現(xiàn)單層復(fù)制。數(shù)組中元素的個(gè)數(shù)可通過(guò)數(shù)組屬性length進(jìn)行訪問(wèn)。 舉例:ArrayExample.java

42、第69頁(yè),共105頁(yè)。枚舉類(lèi)型枚舉類(lèi)型使用關(guān)鍵字“enum”,它允許用常量來(lái)表示特定的數(shù)據(jù)片斷,這些數(shù)據(jù)片斷只接受預(yù)先定義的值集合。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程70第70頁(yè),共105頁(yè)?!癳num”和采用“class”或“interface” 的“final”型屬性表達(dá)的區(qū)別枚舉類(lèi)型看起來(lái)更加簡(jiǎn)潔最關(guān)鍵的是枚舉表示的這組常量值是類(lèi)型安全的,如果調(diào)用這個(gè)枚舉類(lèi)型的值超出集合的范圍,將引發(fā)編譯錯(cuò)誤用類(lèi)或接口中的常量表示,通常會(huì)借助基本類(lèi)型的值來(lái)描述常量,這個(gè)數(shù)值的取值范圍是我們主觀賦予的,如果在調(diào)用過(guò)程中賦值超出此范圍,從語(yǔ)法上看并沒(méi)有問(wèn)題,編譯時(shí)就無(wú)法檢查出來(lái)。例如:enum S

43、eason SPRING, SUMMER, AUTUMN, WINTER class Seasonfinal int SPRING = 1;final int SUMMER = 2;final int AUTUMN = 3;final int WINTER = 4;2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程71第71頁(yè),共105頁(yè)。枚舉類(lèi)型本質(zhì)也是類(lèi)類(lèi)型使用enum關(guān)鍵字創(chuàng)建一個(gè)新的枚舉類(lèi)型時(shí),實(shí)際上是在擴(kuò)展java.lang.Enum類(lèi)。Java語(yǔ)言中定義了“abstract class EnumE extends Enum”作為所有枚舉類(lèi)型的通用基類(lèi),其中 E 表示枚舉類(lèi)型的名稱(chēng)。枚舉類(lèi)

44、型中的每一個(gè)枚舉值就是通過(guò)構(gòu)造方法“protected Enum(String name, int ordinal) ”創(chuàng)建出來(lái)的一個(gè)實(shí)例,其中字符串 name 記錄每個(gè)枚舉值的名稱(chēng),ordinal 設(shè)置了該枚舉值在值集合中所在位置的序數(shù)。這些枚舉值成為該枚舉類(lèi)型的“public static final”成員。舉例:EnumSample.java2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程72第72頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程73類(lèi)型轉(zhuǎn)換 類(lèi)型轉(zhuǎn)換方式分為窄化(Narrowing)和拓寬(Widening)轉(zhuǎn)換。編譯時(shí)可以自動(dòng)執(zhí)行拓寬轉(zhuǎn)換(稱(chēng)為Promotio

45、n,提升)。而窄化轉(zhuǎn)換則總是要求顯式執(zhí)行強(qiáng)制轉(zhuǎn)換(稱(chēng)為Cast,轉(zhuǎn)型)。 第73頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程74基本類(lèi)型的拓寬轉(zhuǎn)換原則 如果存在一個(gè)double型,則按double型執(zhí)行運(yùn)算。否則,如果存在一個(gè)float型,則按float型執(zhí)行運(yùn)算。否則,如果存在一個(gè)long型,則按long型執(zhí)行運(yùn)算。否則,按照32位的int型計(jì)算精度執(zhí)行運(yùn)算。 當(dāng)在整型與浮點(diǎn)型之間進(jìn)行轉(zhuǎn)換時(shí),計(jì)算精度不僅僅是數(shù)據(jù)類(lèi)型的取值范圍問(wèn)題,它還包括浮點(diǎn)能夠存儲(chǔ)的十進(jìn)制數(shù)的位數(shù)。 舉例:PrimitiveWidening.java 第74頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο?/p>

46、程序設(shè)計(jì)教程75基本類(lèi)型的窄化轉(zhuǎn)換 窄化轉(zhuǎn)換意味著余數(shù)轉(zhuǎn)換,這種從一個(gè)大容量的數(shù)據(jù)類(lèi)型到另一個(gè)小容量的數(shù)據(jù)類(lèi)型的賦值只會(huì)取其較小的數(shù)值范圍,這可能造成數(shù)量級(jí)的損失。 如果需要把一個(gè)范圍較大的整型數(shù)值賦給一個(gè)范圍較小的數(shù)據(jù)類(lèi)型的變量,原則上都需要對(duì)數(shù)值執(zhí)行強(qiáng)制轉(zhuǎn)換。對(duì)于byte、short、char類(lèi)型的變量,在相應(yīng)類(lèi)型的取值范圍內(nèi)時(shí),允許不需要顯式強(qiáng)制類(lèi)型轉(zhuǎn)換而直接賦給int型數(shù)值,因?yàn)檫@樣做并不會(huì)引起數(shù)據(jù)丟失;當(dāng)所賦數(shù)值不在其取值范圍內(nèi)時(shí),則必須顯式進(jìn)行類(lèi)型強(qiáng)制轉(zhuǎn)換,否則將出現(xiàn)錯(cuò)誤而不是警告。如果把浮點(diǎn)型數(shù)值轉(zhuǎn)換成整型數(shù)值,小數(shù)點(diǎn)后面的數(shù)值將被圓整去掉。 舉例:PrimitiveNarrow

47、ing.java 第75頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程76引用類(lèi)型的轉(zhuǎn)換 從子類(lèi)型轉(zhuǎn)換為父類(lèi)型即屬于引用類(lèi)型的拓寬轉(zhuǎn)換,特別是從任何引用類(lèi)型(包括類(lèi)、接口、數(shù)組)轉(zhuǎn)換成Java的根類(lèi)Object都屬于此種轉(zhuǎn)換形式。引用類(lèi)型的拓寬轉(zhuǎn)換可以自動(dòng)進(jìn)行,不會(huì)引發(fā)任何異常。引用類(lèi)型的窄化轉(zhuǎn)換指的是從父類(lèi)型轉(zhuǎn)換為子類(lèi)型,特別是從Object類(lèi)轉(zhuǎn)換成其它任何引用類(lèi)型都屬于這種轉(zhuǎn)換形式。引用類(lèi)型的窄化轉(zhuǎn)換同樣需要強(qiáng)制進(jìn)行,即所謂的轉(zhuǎn)型,這種轉(zhuǎn)換的使用十分廣泛,它體現(xiàn)了面向?qū)ο蟮亩鄳B(tài)性。轉(zhuǎn)型將在運(yùn)行時(shí)進(jìn)行類(lèi)型匹配檢查,如果類(lèi)型不匹配將引發(fā)異常ClassCastException。

48、舉例:ReferenceConversion.java第76頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程77類(lèi)型轉(zhuǎn)換討論自動(dòng)轉(zhuǎn)換不要以為擴(kuò)大取值范圍就萬(wàn)無(wú)一失浮點(diǎn)型的有效位問(wèn)題引用型的屬性問(wèn)題強(qiáng)制轉(zhuǎn)換第77頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程78基本類(lèi)型的包裝類(lèi) 包裝類(lèi)對(duì)應(yīng)的基本類(lèi)型字符串轉(zhuǎn)換成數(shù)值數(shù)值轉(zhuǎn)換成字符串包裝類(lèi)中定義的常量Bytebyteb=Byte.parseByte(s)b=new Byte(s).byteValue()s=String.valueOf(b)TYPE,MAX_VALUE,MIN_VALUEShortshortsh=Short

49、.parseShort(s)sh=new Short(s).shortValue()s=String.valueOf(sh)TYPE,MAX_VALUE,MIN_VALUECharacterchars=String.valueOf(c)TYPE, MAX_VALUE,MIN_VALUEIntegerintn=Interger.parseInt(s)n=new Integer(s).intValue()s=String.valueOf(n)TYPE,MAX_VALUE,MIN_VALUELonglongg=Long.parseLong(s)g=new Long(s).longValue()s=S

50、tring.valueOf(g)TYPE,MAX_VALUE,MIN_VALUEFloatfloatf=Float.parseFloat(s)f=new Float(s).floatValue()s=String.valueOf(f)TYPE,MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITYDoubledoubled=Double.parseDouble(s)d=new Double(s).doubleValue()s=String.valueOf(d)TYPE,MAX_VALUE,MIN_VALUE,NaN,NEGATIV

51、E_INFINITY,POSITIVE_INFINITYBooleanbooleanb=new Boolean(s).booleanValue()s=String.valueOf(b)TYPE,F(xiàn)ALSE,TRUE第78頁(yè),共105頁(yè)。自動(dòng)裝箱與自動(dòng)拆箱自動(dòng)裝箱和自動(dòng)拆箱(Auto Boxing / Unboxing) ,是指當(dāng)我們想創(chuàng)建一個(gè)包裝類(lèi)對(duì)象時(shí),可以直接賦予一個(gè)對(duì)應(yīng)基本類(lèi)型數(shù)值,或者當(dāng)我們想為基本類(lèi)型變量賦值時(shí),可以直接賦予一個(gè)對(duì)應(yīng)包裝類(lèi)對(duì)象,而編譯器在編譯時(shí)會(huì)自動(dòng)幫我們做相應(yīng)的轉(zhuǎn)換工作。自動(dòng)裝箱時(shí)對(duì)于值從-128到127之間的值,它們被裝箱為Integer對(duì)象后,該對(duì)象就保存在內(nèi)存

52、中被重用。自動(dòng)裝箱時(shí)只允許采用相同類(lèi)型的數(shù)值,如果類(lèi)型不匹配則會(huì)引發(fā)編譯錯(cuò)誤,如“Long obj = 127;”或“Float obj = 127.0;”都是錯(cuò)的,需寫(xiě)成“Long obj = 127L;”或“Float obj = 127.0f;”。舉例: AutoBoxing.java2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程79第79頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程80與字符串相關(guān)的封裝類(lèi) 字符串在Java語(yǔ)言中并不定義為基本類(lèi)型,而是一個(gè)類(lèi)類(lèi)型。Java中封裝了3個(gè)與字符串相關(guān)的最終類(lèi),即String、StringBuffer和StringBuilder

53、類(lèi),并提供了一系列的方法對(duì)整個(gè)字符串進(jìn)行操作,使得字符串的處理更加容易,也符合面向?qū)ο缶幊桃?guī)范。String用于處理不變字符串(常量),StringBuffer和StringBuilder用于處理可變字符串。StringBuffer是線程安全的,而StringBuilder不是線程安全的,但它的執(zhí)行速度比較快。第80頁(yè),共105頁(yè)。字符串常量的類(lèi)型StringJava語(yǔ)言中還提供了一種快速創(chuàng)建String對(duì)象的方式,非常像基本類(lèi)型的賦值方式:String str=”I am a string constant.” String被設(shè)計(jì)為存儲(chǔ)字符串常量的類(lèi),這種實(shí)例化形式在大多數(shù)情況下是更好的St

54、ring構(gòu)造技術(shù),這與所創(chuàng)建的字符串存儲(chǔ)在字符串常量池使其可被共享有關(guān)。 字符串常量池的工作機(jī)制是,當(dāng)需要某一個(gè)字符串時(shí),先到池里查找,如果已經(jīng)存在,則直接引用;如果還沒(méi)有就在池中創(chuàng)建一個(gè)新的字符串對(duì)象。也可以說(shuō),字符串常量池中內(nèi)容相同的String對(duì)象只有一個(gè),該對(duì)象直到JVM退出時(shí)才被清除。舉例:StringExample.java 2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程81第81頁(yè),共105頁(yè)。泛型泛型通常也稱(chēng)為參數(shù)類(lèi)型(Parameterized Type),它增加了集合框架(Collections Framework)編譯時(shí)類(lèi)型安全,并減少原先讀取集合中元素時(shí)必須進(jìn)行的轉(zhuǎn)型操作

55、。泛型帶來(lái)的好處至少有:保留類(lèi)型動(dòng)態(tài)綁定的同時(shí),增加靜態(tài)類(lèi)型檢查,使得編譯時(shí)能發(fā)現(xiàn)更多的錯(cuò)誤。減少容器之間的類(lèi)型模糊性,使代碼更容易閱讀。減少使用轉(zhuǎn)型,使代碼看起來(lái)更加簡(jiǎn)潔。舉例:GenericsSample.java2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程82第82頁(yè),共105頁(yè)。2.2 運(yùn)算符和表達(dá)式第83頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程84Java語(yǔ)言中的算術(shù)運(yùn)算符與表達(dá)式操作數(shù)數(shù)目運(yùn)算符表達(dá)式描 述一元+op正值-op負(fù)值+op, op+自增1-op, op-自減1二元+op1+op2加-op1-op2減*op1*op2乘/op1/op2除%op1%op

56、2取模(求余)第84頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程85Java語(yǔ)言中的關(guān)系運(yùn)算符與表達(dá)式 運(yùn)算符表達(dá)式返回true的情況op1op2op1大于op2=op1=op2op1大于或等于op2op1op2op1小于op2=op1=op2op1小于或等于op2=op1=op2op1與op2相等!=op1!=op2op1與op2不等第85頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程86Java語(yǔ)言中的邏輯運(yùn)算符與表達(dá)式 操作數(shù)取值表達(dá)式運(yùn)算結(jié)果op1op2op1&op2op1|op2!op1falsefalsefalsefalsetruefalsetruef

57、alsetruetruetruefalsefalsetruefalsetruetruetruetruefalse第86頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程87Java語(yǔ)言中的位運(yùn)算符與表達(dá)式 運(yùn)算符表達(dá)式描 述&op1 & op2二元運(yùn)算,邏輯與,參與運(yùn)算的兩個(gè)操作數(shù),如果兩個(gè)相應(yīng)位都為1(或true),則該位的結(jié)果為1(或true),否則為0(false)。|op1 | op2二元運(yùn)算,邏輯或,參與運(yùn)算的兩個(gè)操作數(shù),如果兩個(gè)相應(yīng)位有一個(gè)為1(或true),則該位的結(jié)果為1(或true),否則為0(false)。op1 op2二元運(yùn)算,邏輯異或,參與運(yùn)算的兩個(gè)操作數(shù),如

58、果兩個(gè)相應(yīng)位值相反,則該位的結(jié)果為1(或true),否則為0(false)。 op1一元運(yùn)算,對(duì)數(shù)據(jù)的每個(gè)二進(jìn)制位按位取反。op1 op1 op2二元運(yùn)算,操作數(shù)op1按位右移op2位,左邊補(bǔ)齊的數(shù)值和最高位相同(正數(shù)補(bǔ)0,負(fù)數(shù)補(bǔ)1),即每右移一位,其數(shù)值減半。op1 op2二元運(yùn)算,操作數(shù)op1按位右移op2位,左邊補(bǔ)齊的數(shù)值總是為0,即正整數(shù)運(yùn)算與同,負(fù)整數(shù)則求該數(shù)的反碼,但符號(hào)位不變。第87頁(yè),共105頁(yè)。關(guān)于運(yùn)算op1 op2二元運(yùn)算,操作數(shù)op1按位右移op2位,左邊補(bǔ)齊的數(shù)值總是為0,即正整數(shù)運(yùn)算與同,負(fù)整數(shù)則求該數(shù)的反碼,但符號(hào)位不變。對(duì)于短整數(shù)和字節(jié)來(lái)講,因?yàn)樵谶\(yùn)算之前,首先需

59、要把它們提升到整數(shù),當(dāng)操作數(shù)為負(fù)數(shù)時(shí),第7或1531位將會(huì)變?yōu)?。執(zhí)行運(yùn)算后,第31位將會(huì)變?yōu)?,最終會(huì)把負(fù)數(shù)變?yōu)檎龜?shù)。例如,int數(shù)值“-22 3”:“-22”的原碼:1000 0000 0000 0000 0000 0000 0001 0110符號(hào)位不變的反碼: 1111 1111 1111 1111 1111 1111 1110 1001右移3位:000 1111 1111 1111 1111 1111 1111 1110 1其結(jié)果為:536870909建議:不要以數(shù)學(xué)意義上的數(shù)值來(lái)分析移位舉例:BitOperand.java 2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程88第88頁(yè),共

60、105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程89其它運(yùn)算符條件運(yùn)算符:三元運(yùn)算符,其表達(dá)式為someCondition?tureExpression: falseExpression賦值運(yùn)算符與表達(dá)式 := 、+=、- =、*=、/=、%= 、=、=、&=、 |=、 = instanceof運(yùn)算符 第89頁(yè),共105頁(yè)。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程90Java語(yǔ)言運(yùn)算符優(yōu)先級(jí)以及同等優(yōu)先級(jí)運(yùn)算符的組合順序運(yùn)算符描 述優(yōu)先級(jí)(數(shù)越大優(yōu)先級(jí)越高)同等優(yōu)先級(jí)結(jié)合順序( )圓括號(hào)15左右new創(chuàng)建類(lèi)實(shí)例15左右 數(shù)組下標(biāo)運(yùn)算符15左右.成員(屬性、方法)選擇15左右+、-后綴

溫馨提示

  • 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)論