版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第 1 章 Java導論 第1頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程2主要內(nèi)容1.1 Java語言的特點1.1.1 簡單的面向?qū)ο蟪绦蛟O(shè)計語言1.1.2 健壯安全的分布式語言1.1.3 結(jié)構(gòu)中立、可移植性強的解釋型語言1.1.4 高效能1.1.5 支持多線程的動態(tài)語言1.1.6 Java與幾種常用語言的比較1.2 Java執(zhí)行環(huán)境1.2.1 JVM機制Java平臺的基礎(chǔ)1.2.2 自動垃圾收集1.2.3 保護域機制與沙箱模型1.2.4 類加載器啟動引擎的點火器1.3 JDK的組成與安裝設(shè)置1.3.1 Java平臺的組成結(jié)構(gòu)1.3.2 SET PATH和SET CLASSP
2、ATH的作用1.3.3 Java開發(fā)平臺簡介1.4 典型例子及常見問題1.4.1 編譯器、解釋器、小程序觀察器和反編譯器1.4.2 簡單的“Hello World!”例子1.4.3 應(yīng)用程序的主方法1.4.4 小程序的運行第2頁,共105頁。1.1 Java語言的特點第3頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程4Java的由來1991年初,Sun Microsystems公司設(shè)立一項較大規(guī)?!跋M者電子產(chǎn)品先進軟件發(fā)展項目”,該項目是為了發(fā)展小型、可靠、可移植、分布式、實時的嵌入式系統(tǒng)。 項目小組開發(fā)了一種與平臺無關(guān)的新語言,命名為“Oak”。其靈感來源于項目主持人Jame
3、s Gosling辦公室外的一棵橡樹(Oak),它就是Java語言的前身。 但因Oak名稱與其它產(chǎn)品雷同,最后將開發(fā)的新語言取名為“Java”。據(jù)說是項目小組成員經(jīng)常在公司附近一家咖啡廳喝咖啡,因此把咖啡原產(chǎn)地Java作為新語言的名稱。1995年,Sun Microsystems公司正式發(fā)布Java產(chǎn)品。 第4頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程5與Java有關(guān)的一些圖片Java的標識Java的吉祥物DukeJava之父James Gosling第5頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程6Java語言的特點 在Java語言白皮書中,Java被描述為
4、“是一種簡單、面向?qū)ο?、分布式、解釋、健壯、安全、結(jié)構(gòu)中立、可移植、高效能、多線程、動態(tài)的語言。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頁,共105頁。2022/8/4Java
5、面向?qū)ο蟪绦蛟O(shè)計教程7簡單的面向?qū)ο蟪绦蛟O(shè)計語言 “爪哇”Java總給人以小巧玲瓏 和C+很相近,但刪除許多極少被使用、不容易理解和令人混淆的C+功能,主要包括運算符重載、多重繼承以及廣泛的自動強迫同型。 自動垃圾收集(Automatic garbage collection)功能,這不僅簡化了Java程序的內(nèi)存分配與釋放工作,而且能大幅度減少程序中的漏洞。 Java程序非常小,對于在嵌入式的系統(tǒng)中使用是很重要的,同時也可以通過網(wǎng)絡(luò)輕易下載。 第7頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程8健壯安全的分布式語言 Java擁有廣泛的能輕易處理TCP/IP協(xié)議(如HTTP與FTP
6、等)的類庫,更容易創(chuàng)建網(wǎng)絡(luò)連接。 除了運行時異常檢查外,Java提供了廣泛的編譯時異常檢查,以便盡早的發(fā)現(xiàn)可能存在的錯誤。同時,在Java中對象的創(chuàng)建機制(只能用new操作符)和自動垃圾收集機制大大減少了因內(nèi)存管理不當引發(fā)的錯誤。 Java的驗證技術(shù)是以公鑰加密算法為基礎(chǔ)。 第8頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程9結(jié)構(gòu)中立、可移植性強的解釋型語言 為了讓Java應(yīng)用程序能夠在網(wǎng)絡(luò)上任何地方執(zhí)行,其編譯器會產(chǎn)出一種結(jié)構(gòu)中立的字節(jié)代碼(Bytecode)。字節(jié)代碼可以在提供Java運行時系統(tǒng)的多種不同處理器上面執(zhí)行。 Java嚴格定義了基本數(shù)據(jù)類型的大小和算術(shù)運算符的行為
7、,因此不存在軟硬件平臺不兼容的情況。 Java系統(tǒng)本身具備相當好的移植性。它的編譯器用Java寫成,而Java運行時程序則是參照POSIX(一個可移植接口工業(yè)標準)規(guī)格使用ANSI C寫成的。 第9頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程10高效能 字節(jié)代碼可以動態(tài)地為執(zhí)行應(yīng)用程序的特定CPU解釋成機器碼。字節(jié)代碼格式在設(shè)計上即顧及機器碼的產(chǎn)生,因此實際的機器碼產(chǎn)生程序相當簡單。 解釋器運行時不需檢查運行環(huán)境,自動垃圾收集器設(shè)為優(yōu)先級最低后臺線程,以保證內(nèi)存得到更有效的應(yīng)用。 對于運算量很大的程序可以采用原生代碼編寫,再經(jīng)由Java平臺轉(zhuǎn)換。Just-In-Time (JI
8、T)編譯技術(shù)更是讓字節(jié)代碼的執(zhí)行速度大幅度提升。 第10頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程11支持多線程的動態(tài)語言 在Java核心類庫中包含Thread類,同時Java運行時系統(tǒng)提供了線程監(jiān)視器和同步鎖定機制。多線程的其它優(yōu)點包括更好的交互式回應(yīng)能力與實時執(zhí)行行為。 Java是一種比C或C+更具動態(tài)特性的語言。它在設(shè)計上強調(diào)為進化中的運算環(huán)境提供支援。甚至可以在不中斷網(wǎng)絡(luò)服務(wù)的情況下替換相關(guān)的組件。 第11頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程12Java與幾種常用語言的比較 第12頁,共105頁。1.2 Java執(zhí)行環(huán)境第13頁,共105頁。2
9、022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程14Java執(zhí)行環(huán)境 Java源程序(*.java)首先被編譯成字節(jié)代碼(*.class);這些字節(jié)代碼就是Java虛擬機可以解釋的指令集。經(jīng)過安全驗證后字節(jié)代碼進入虛擬機,要么經(jīng)由解釋器解釋執(zhí)行,要么由JIT編譯器(也稱為即時代碼生成器)轉(zhuǎn)成機器代碼執(zhí)行,程序中使用到的類則根據(jù)需要動態(tài)加載到內(nèi)存中。Java執(zhí)行環(huán)境由編譯時(Compile-time)和運行時(Runtime)環(huán)境兩部分組成。第14頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程15JREJVM協(xié)同類加載器、字節(jié)代碼校驗器和Java類庫一起,組成了整個Java運行環(huán)境JRE
10、。 一次編寫隨處運行(Write Once Run Anywhere, WORA)第15頁,共105頁。Java虛擬機機制Java虛擬機(Java Virtual Machine, JVM)是一個類似于真實計算機系統(tǒng)的抽象機(Abstract Computing Machine),它擁有一組指令集,用來解釋“.class”字節(jié)代碼;也就是說,JVM并不認識所謂的Java語言,而僅僅能夠讀懂class文件中有限的指令、符號及其他一些輔助信息。它除了負責執(zhí)行指令外,還要管理數(shù)據(jù)、內(nèi)存和寄存器。這臺虛擬的機器在任何平臺上都提供給編譯程序一個的共同的接口。編譯程序只需要面向虛擬機,生成虛擬機能夠理解的
11、代碼,然后由解釋器來將虛擬機代碼轉(zhuǎn)換為特定系統(tǒng)的機器碼執(zhí)行。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程16第16頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程17JVM的組成執(zhí)行引擎 負責把字節(jié)代碼導入虛擬機;內(nèi)存管理 負責分配內(nèi)存給對象和數(shù)組,并進行垃圾收集;錯誤和異常管理 負責異常的捕獲或拋出;線程接口 負責對線程的支持;對原生方法(Native Method)的支持 支持調(diào)用C/C+等語言編寫的方法。 第17頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程18JVM的理解:機床數(shù)控機床虛擬機床數(shù)控機床數(shù)控機床抽象數(shù)控機床可以加工各種形狀的物體原因在于它擁有一個
12、可以能讀懂指令的核心系統(tǒng)MachineVirtual Machine第18頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程19解釋產(chǎn)品(問題域)編程人員是熟悉的!但數(shù)控系統(tǒng)(JVM)是不認識的!編程人員根據(jù)自己的想法,在相應(yīng)的平臺上編寫出符合產(chǎn)品形狀要求的程序(.java)第19頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程20解釋這是程序員可以理解的程序(.java),因其是接近自然語言的。但對數(shù)控系統(tǒng)(JVM)來說太復雜,它是讀不懂的!第20頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程21解釋于是程序員利用相應(yīng)的平臺把它編譯成數(shù)控系統(tǒng)(JVM)可以
13、理解的程序(.class)于是數(shù)控機床(JVM)動起來啦!產(chǎn)品也做出來啦!可是最終數(shù)控機床(JVM)也沒有明白它做出的產(chǎn)品是什么,只知道走了許許多多的直線或圓弧(JVM指令集)!第21頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程22示例虛擬的真實的第22頁,共105頁。實現(xiàn)代碼移植的一種技術(shù)策略(為什么要使用Java虛擬機? )2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程23使用Java虛擬機,其技術(shù)路線的本質(zhì)就是改變了編譯型語言環(huán)境把易變的應(yīng)用和相對穩(wěn)定的系統(tǒng)平臺之間直接綁定的做法,通過增加語言環(huán)境的中介接口,實現(xiàn)了易變的應(yīng)用和相對穩(wěn)定的系統(tǒng)平臺之間的松耦合。第23頁,共10
14、5頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程24保護域機制與沙箱模型 保護域(Protection domain)是有關(guān)系統(tǒng)安全的基本概念和重要模塊。域界定了作為主體的系統(tǒng)實體對各種對象集直接訪問的被許可程度。保護域概念提供一種在受保護單元中分組和隔離不安全因素的便利機制。 第24頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程25類加載器啟動引擎的點火器 加載 當JVM加載類時,它尋找類或接口的二進制表示,并從這個二進制表示(通常是Java編譯器生成的類文件)生成Class對象。Class對象封裝類或接口的運行時狀態(tài)。鏈接 鏈接是取得加載的類或接口,并將其與JVM運行時環(huán)境
15、結(jié)合起來,以準備執(zhí)行的過程。初始化 初始化在JVM調(diào)用類或接口初始化方法時發(fā)生。第25頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程26類加載器啟動引擎的點火器JVM在啟動獨立Java應(yīng)用程序時的第一步是生成初始Class對象,表示包含public static void main(String args)方法的Java的類。JVM鏈接與初始化這個類并調(diào)用main()方法。這個方法推動所需要的其他類和接口的加載、鏈接與初始化。 第26頁,共105頁。1.3 JDK的組成與安裝設(shè)置第27頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程28Java平臺的組成結(jié)構(gòu) 第28頁
16、,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程29Java標準版 第29頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程30Java版本的平臺信息 這些軟件可以從Sun公司的網(wǎng)站/上免費下載獲得。值得說明的是,這兩個版本的開發(fā)工具包的縮寫從“J2SDK(或Java 2 SDK)”改回到“JDK”,運行環(huán)境的縮寫從“J2RE”改回到“JRE”,下載時需要注意。 第30頁,共105頁。Java版本的服務(wù)期限2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程31GA date : Release families general availability date EOL: Jav
17、a technology end of life參考網(wǎng)址:/products/archive/eol.policy.html第31頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程32SET PATH的作用SET PATH = c:jdk1.5.0bin 含義是告訴操作系統(tǒng)到哪里可以找到Java的編譯器等可執(zhí)行文件的位置。第32頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程33SET CLASSPATH的作用SET CLASSPATH = .;c:jdk1.5.0libtools.jar 含義是告訴操作系統(tǒng)到哪里可以找到編譯或解釋運行時所需字節(jié)代碼的位置。第33頁,共1
18、05頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程34在運行環(huán)境中的設(shè)置方法如果系統(tǒng)平臺為Windows 9X,則把以上的設(shè)置內(nèi)容加入系統(tǒng)根目錄下的autoexec.bat文件中;如果系統(tǒng)平臺為Windows XP、Windows 2000及以后版本,則把以上的設(shè)置內(nèi)容加入【控制面板】|【系統(tǒng)】|【高級】|【環(huán)境變量】中。 第34頁,共105頁。Java開發(fā)平臺簡介集成開發(fā)環(huán)境: Integrated Development Environment, IDEJCreatorEclipseNetBeans2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程35第35頁,共105頁。1.4 典型例子及常
19、見問題第36頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程37常用指令簡介編譯器 javac的使用 解釋器java的使用 小程序觀察器appletviewer的使用 反編譯器javap的使用第37頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程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 編譯時執(zhí)行javac ApplicationStyle.java得到字節(jié)代碼ApplicationStyle.class。運行時執(zhí)行java ApplicationStyle 第38頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程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頁,共105頁?!癏ello World!”的演繹2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程40第40頁,共105頁。進一步討論第41頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程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頁,共
23、105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程43哪些類被加載了第43頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程44使用Java的一些注意事項Java中規(guī)定,在一個 . java的源文件中最多只能有一個(另一個意思是可以沒有)public class。當這個public class存在時,要求該類名必須與. Java源文件的名字一致。如果你想編寫一個應(yīng)用程序(通常被聲明為public class),在這一個類中必須定義一個public static void main(String agrs)方法,在這個方法中,除了變量名agrs可以改變,其它內(nèi)容均不可改變,甚至排放
24、的順序都是幾乎不可改變的。第44頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程45應(yīng)用程序的主方法JVM解釋應(yīng)用程序需要一個程序執(zhí)行入口,也就是程序中邏輯運行的啟動模塊,或者稱為應(yīng)用程序的驅(qū)動器,這就是對應(yīng)類中的main方法,它的聲明public static void main(String agrs)也叫main方法的標志性簽名。JVM解釋某個應(yīng)用程序時,就會首先查找對應(yīng)類的這個main方法,當無法匹配時就引發(fā)如上述的異常報告:Exception in thread main java.lang.NoSuchMethodError: main 第45頁,共105頁。2022/
25、8/4Java面向?qū)ο蟪绦蛟O(shè)計教程46小程序的生命周期 第46頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程47小程序的HTML標記和屬性 第47頁,共105頁。第 2 章 Java的基本語法第48頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程49主要內(nèi)容2.1 類型、值與基本變量2.1.1 基本概念2.1.2 基本類型2.1.3 引用類型2.1.4 類型轉(zhuǎn)換2.1.5 簡化操作的一些輔助手段2.2 運算符與表達式2.2.1 算術(shù)運算符與表達式2.2.2 關(guān)系運算符與表達式2.2.3 邏輯運算符與表達式2.2.4 位運算符與表達式2.2.5 條件運算符與表達式2.2
26、.6 賦值運算符與表達式2.2.7 instanceof運算符2.2.8 運算符優(yōu)先級與賦值順序的理解2.2.9 基本類型所支持的操作運算2.3 語句2.3.1 編組語句2.3.2 表達式語句2.3.3 選擇語句2.3.4 循環(huán)語句2.3.5 迭代與遞歸2.3.6 控制轉(zhuǎn)移語句2.3.7 注釋語第49頁,共105頁。2.1 類型、值與基本變量第50頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程51基本概念:字符集 ASCII(American Standard Code for Information Interchange)字符集:使用7位代碼表示大小寫字母、數(shù)字09以及若干控
27、制字符,如NUL和EOT。 ISO8859-1 Latin-1字符集:在西歐,用戶希望字符集能夠表示他們本國字符集的所有字符,ASCII字符集因而被擴展到8位,即增加了128個字符,用于表示英文中不存在的各種西歐語言的字符。Unicode字符集:是ISO標準16位字符集,支持65536個不同的字符。其中大約有21000個字符專門用于中文、日文和韓文的表意文字。 ASCII、ISO Latin-1都是Unicode的子集。Java內(nèi)部使用2個字節(jié)表示每個字符,采用Unicode編碼。 第51頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程52基本概念:關(guān)鍵字、值、標識符關(guān)鍵字(Key
28、word) :也稱保留字(Reserved word),全部由小寫的英文字母所組成。關(guān)鍵字總共有50多個,其中一些留作將來供語言設(shè)計者擴充語言功能時使用。 值 (Literal):是指不能由程序員規(guī)定的代表某一特定常量或數(shù)字的可知的或未知的字母或符號,一般譯作“直接量”或“字面值”,實際上泛指賦給各種不同類型(常指基本類型、字符串類型、空類型等)的有效值。本書將它簡稱為“值”,而另一個單詞“Value”則稱為“數(shù)值”。 標識符(Identifier):是程序員提供的名字,在Java中,標識符的長度不受限制,但必須以字母、下劃線或$符號開始,隨后位置也可以包含數(shù)字。Java標識符支持幾萬個Uni
29、code字母中所包含的世界上任何重要語言中的任何字母。 舉例: IdentifierTest.java 第52頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程53Java關(guān)鍵字 const和goto是保留字 true, false和null為相應(yīng)類型的值,不屬于關(guān)鍵字主要用途關(guān) 鍵 字用于內(nèi)置類型booleanbytechardoublefloatintlongshortstrictfpvoid用于對象newsuperthis用于選擇語句casedefaultelseifswitch用于循環(huán)語句doforwhile用于控制轉(zhuǎn)移breakcontinuereturn用于異常處理cat
30、chfinallythrowthrowstryassert用于線程synchronized用于修飾說明abstractfinalprivateprotectedpublicstatic用于其他方法或相關(guān)類classinstanceofnativetransientvolatile用于類的擴展和接口的繼承extendsimplementsimportinterfaceenum package留作將來使用constgoto第53頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程54強類型語言(Strongly typed language)Java屬于強類型的程序設(shè)計語言。所有變量和表達
31、式在編譯時都有明確的類型,它有助于編譯時的錯誤檢測:類型限制了一個變量能夠擁有的或者一個表達式能夠生成的值;類型還限制了各種操作對這些值的支持程度以及決定操作的含義。第54頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程55Java語言的類型結(jié)構(gòu) 第55頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程56基本類型(Primitive Type)boolean 用于邏輯運算。int、long、byte和short 用于整數(shù)算術(shù)運算。char 主要用于輸入輸出。double和float 用于實數(shù)(即浮點數(shù))的算術(shù)運算。整型數(shù)值缺省為int型,long型在數(shù)值之后加l或L浮點
32、型數(shù)值缺省為double型,float型在數(shù)值之后加f或F第56頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程57基本類型的特點基本類型在所有的平臺和實現(xiàn)中的定義相同,類型名稱屬于Java保留的關(guān)鍵字?;绢愋偷闹挡辉试S共享,任何一個基本類型的變量都會獨自擁有一份相同類型的值?;绢愋偷淖兞康闹抵荒芡ㄟ^賦值操作才能被改變。第57頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程58基本類型的值(1)類 型位 數(shù)取值范圍有符號類型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)無符號類型char16 bitsu0000 uffff(0 65 535,即0 216-1)第58頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程59基本類型的值(2)類 型位 數(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頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程60基本類型的值(3)類 型位 數(shù)取值范圍boolean1 bittrue / false轉(zhuǎn)義字符Unicode字符含 義 bu0008backspace BS(退格) tu0009horizontal tab HT(Tab鍵) nu000alinefeed LF(換行) fu000cform feed FF(換頁)
35、ru000dcarriage return CR(回車) u0022(double quote,雙引號) u0027(single quote,單引號) u005c(backslash,反斜杠)第60頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程61舉 例整數(shù)值的不同進制表示:NumeralExpression.java 字符的表達方式:CharacterExpression.java 浮點數(shù)NaN結(jié)果及浮點計算的非精確性演示:FloatingTest.java 數(shù)值類型的取值范圍:ValueScope.java 第61頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程
36、62引用類型類類型(Class type)接口類型(Interface type)數(shù)組類型(Array type)枚舉類型(Enumerate type) 第62頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程63類類型 使用關(guān)鍵字“class”,它定義了一個新的引用類型,并描述這一類型的具體實現(xiàn)。 Java語言定義的根類(Root class)是Object類,也就是說除了Object類以外,其它類都是Object類的直接或間接子類(Subclass),這些類只能擴展(使用關(guān)鍵字“extends” )自唯一一個業(yè)已存在的類。Object類是缺省的繼承父類,如果有一個類直接繼承自O(shè)
37、bject類,“extends Object”可以省略不寫。 第63頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程64類體的結(jié)構(gòu)組成類的成員類型:類成員(使用關(guān)鍵字static)和實例成員(無關(guān)鍵字static)形式:域(Field;也習慣地叫屬性,Attribute)、方法(Method)、內(nèi)嵌類(Nested class)和內(nèi)嵌接口(Nested interface) 實例初始化或者類初始化的語句塊(Block)實例對象構(gòu)造器(Constructor,也稱構(gòu)造方法)舉例:ClassExample.java 第64頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程65
38、接口類型 使用關(guān)鍵字“interface”,定義一套必須由類或組件實現(xiàn)的操作特征標記。一般有一個或多個操作特征標記以及零個或多個屬性集合的定義。 標識接口(Tag interface):不包含任何成員的接口類型,如java.io.Serializable、java.lang.Cloneable通過類來實現(xiàn),使用關(guān)鍵字“implements”,多個接口類型之間用“,”隔開 。類必須包括接口中定義的方法 。接口可以進行多繼承,也使用關(guān)鍵字“extends” 。接口類型中不存在被其它所有接口類型繼承的根接口類型。 第65頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程66接口體的結(jié)構(gòu)與特
39、點包含與該接口有關(guān)的成員,這些成員可以是內(nèi)嵌類、內(nèi)嵌接口、常量或抽象方法。所有接口的成員都被隱式聲明為“public”;所有的內(nèi)嵌類或接口都被隱式聲明為“static”;所有的成員屬性都被隱式聲明為“static”和“final”,亦即所有的成員屬性都是常量;所有的成員方法都被隱式聲明為“abstract”,亦即所有的成員方法都不包含任何具體的實現(xiàn),但成員方法不能被聲明為“static”,因為靜態(tài)方法不能是抽象的。舉例:InterfaceExample.java 第66頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程67數(shù)組類型 一個數(shù)組對象包含一定數(shù)量的數(shù)組變量,稱為數(shù)組的組件或
40、元素。數(shù)組元素通過一個非負的整型索引數(shù)值被引用。如果數(shù)組中包含有n個元素,則數(shù)組元素的索引值分別為0(n-1)。數(shù)組元素的個數(shù)可以為零,這時該數(shù)組被稱為empty(空)數(shù)組。數(shù)組元素的類型可以是基本類型,也可以是其它的引用類型,一個數(shù)組中的所有元素的類型都是一樣的。 第67頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程68數(shù)組表示法Java語言中正式使用的表示法是,假如數(shù)組元素的類型表示為Type,則數(shù)組表示為Type x。如int x,讀作int數(shù)組x。另一種表示法是提供給那些有C/C+編程經(jīng)驗的人們使用的,將方括號移到變量名稱的后面,即Type x,如int x。 第68頁,
41、共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程69數(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ù)組對象直接進行串行化處理和對象復制,但對于多維數(shù)組也是只能實現(xiàn)單層復制。數(shù)組中元素的個數(shù)可通過數(shù)組屬性length進行訪問。 舉例:ArrayExample.java
42、第69頁,共105頁。枚舉類型枚舉類型使用關(guān)鍵字“enum”,它允許用常量來表示特定的數(shù)據(jù)片斷,這些數(shù)據(jù)片斷只接受預(yù)先定義的值集合。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程70第70頁,共105頁?!癳num”和采用“class”或“interface” 的“final”型屬性表達的區(qū)別枚舉類型看起來更加簡潔最關(guān)鍵的是枚舉表示的這組常量值是類型安全的,如果調(diào)用這個枚舉類型的值超出集合的范圍,將引發(fā)編譯錯誤用類或接口中的常量表示,通常會借助基本類型的值來描述常量,這個數(shù)值的取值范圍是我們主觀賦予的,如果在調(diào)用過程中賦值超出此范圍,從語法上看并沒有問題,編譯時就無法檢查出來。例如: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è)計教程71第71頁,共105頁。枚舉類型本質(zhì)也是類類型使用enum關(guān)鍵字創(chuàng)建一個新的枚舉類型時,實際上是在擴展java.lang.Enum類。Java語言中定義了“abstract class EnumE extends Enum”作為所有枚舉類型的通用基類,其中 E 表示枚舉類型的名稱。枚舉類
44、型中的每一個枚舉值就是通過構(gòu)造方法“protected Enum(String name, int ordinal) ”創(chuàng)建出來的一個實例,其中字符串 name 記錄每個枚舉值的名稱,ordinal 設(shè)置了該枚舉值在值集合中所在位置的序數(shù)。這些枚舉值成為該枚舉類型的“public static final”成員。舉例:EnumSample.java2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程72第72頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程73類型轉(zhuǎn)換 類型轉(zhuǎn)換方式分為窄化(Narrowing)和拓寬(Widening)轉(zhuǎn)換。編譯時可以自動執(zhí)行拓寬轉(zhuǎn)換(稱為Promotio
45、n,提升)。而窄化轉(zhuǎn)換則總是要求顯式執(zhí)行強制轉(zhuǎn)換(稱為Cast,轉(zhuǎn)型)。 第73頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程74基本類型的拓寬轉(zhuǎn)換原則 如果存在一個double型,則按double型執(zhí)行運算。否則,如果存在一個float型,則按float型執(zhí)行運算。否則,如果存在一個long型,則按long型執(zhí)行運算。否則,按照32位的int型計算精度執(zhí)行運算。 當在整型與浮點型之間進行轉(zhuǎn)換時,計算精度不僅僅是數(shù)據(jù)類型的取值范圍問題,它還包括浮點能夠存儲的十進制數(shù)的位數(shù)。 舉例:PrimitiveWidening.java 第74頁,共105頁。2022/8/4Java面向?qū)ο?/p>
46、程序設(shè)計教程75基本類型的窄化轉(zhuǎn)換 窄化轉(zhuǎn)換意味著余數(shù)轉(zhuǎn)換,這種從一個大容量的數(shù)據(jù)類型到另一個小容量的數(shù)據(jù)類型的賦值只會取其較小的數(shù)值范圍,這可能造成數(shù)量級的損失。 如果需要把一個范圍較大的整型數(shù)值賦給一個范圍較小的數(shù)據(jù)類型的變量,原則上都需要對數(shù)值執(zhí)行強制轉(zhuǎn)換。對于byte、short、char類型的變量,在相應(yīng)類型的取值范圍內(nèi)時,允許不需要顯式強制類型轉(zhuǎn)換而直接賦給int型數(shù)值,因為這樣做并不會引起數(shù)據(jù)丟失;當所賦數(shù)值不在其取值范圍內(nèi)時,則必須顯式進行類型強制轉(zhuǎn)換,否則將出現(xiàn)錯誤而不是警告。如果把浮點型數(shù)值轉(zhuǎn)換成整型數(shù)值,小數(shù)點后面的數(shù)值將被圓整去掉。 舉例:PrimitiveNarrow
47、ing.java 第75頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程76引用類型的轉(zhuǎn)換 從子類型轉(zhuǎn)換為父類型即屬于引用類型的拓寬轉(zhuǎn)換,特別是從任何引用類型(包括類、接口、數(shù)組)轉(zhuǎn)換成Java的根類Object都屬于此種轉(zhuǎn)換形式。引用類型的拓寬轉(zhuǎn)換可以自動進行,不會引發(fā)任何異常。引用類型的窄化轉(zhuǎn)換指的是從父類型轉(zhuǎn)換為子類型,特別是從Object類轉(zhuǎn)換成其它任何引用類型都屬于這種轉(zhuǎn)換形式。引用類型的窄化轉(zhuǎn)換同樣需要強制進行,即所謂的轉(zhuǎn)型,這種轉(zhuǎn)換的使用十分廣泛,它體現(xiàn)了面向?qū)ο蟮亩鄳B(tài)性。轉(zhuǎn)型將在運行時進行類型匹配檢查,如果類型不匹配將引發(fā)異常ClassCastException。
48、舉例:ReferenceConversion.java第76頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程77類型轉(zhuǎn)換討論自動轉(zhuǎn)換不要以為擴大取值范圍就萬無一失浮點型的有效位問題引用型的屬性問題強制轉(zhuǎn)換第77頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程78基本類型的包裝類 包裝類對應(yīng)的基本類型字符串轉(zhuǎn)換成數(shù)值數(shù)值轉(zhuǎn)換成字符串包裝類中定義的常量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頁,共105頁。自動裝箱與自動拆箱自動裝箱和自動拆箱(Auto Boxing / Unboxing) ,是指當我們想創(chuàng)建一個包裝類對象時,可以直接賦予一個對應(yīng)基本類型數(shù)值,或者當我們想為基本類型變量賦值時,可以直接賦予一個對應(yīng)包裝類對象,而編譯器在編譯時會自動幫我們做相應(yīng)的轉(zhuǎn)換工作。自動裝箱時對于值從-128到127之間的值,它們被裝箱為Integer對象后,該對象就保存在內(nèi)存
52、中被重用。自動裝箱時只允許采用相同類型的數(shù)值,如果類型不匹配則會引發(fā)編譯錯誤,如“Long obj = 127;”或“Float obj = 127.0;”都是錯的,需寫成“Long obj = 127L;”或“Float obj = 127.0f;”。舉例: AutoBoxing.java2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程79第79頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程80與字符串相關(guān)的封裝類 字符串在Java語言中并不定義為基本類型,而是一個類類型。Java中封裝了3個與字符串相關(guān)的最終類,即String、StringBuffer和StringBuilder
53、類,并提供了一系列的方法對整個字符串進行操作,使得字符串的處理更加容易,也符合面向?qū)ο缶幊桃?guī)范。String用于處理不變字符串(常量),StringBuffer和StringBuilder用于處理可變字符串。StringBuffer是線程安全的,而StringBuilder不是線程安全的,但它的執(zhí)行速度比較快。第80頁,共105頁。字符串常量的類型StringJava語言中還提供了一種快速創(chuàng)建String對象的方式,非常像基本類型的賦值方式:String str=”I am a string constant.” String被設(shè)計為存儲字符串常量的類,這種實例化形式在大多數(shù)情況下是更好的St
54、ring構(gòu)造技術(shù),這與所創(chuàng)建的字符串存儲在字符串常量池使其可被共享有關(guān)。 字符串常量池的工作機制是,當需要某一個字符串時,先到池里查找,如果已經(jīng)存在,則直接引用;如果還沒有就在池中創(chuàng)建一個新的字符串對象。也可以說,字符串常量池中內(nèi)容相同的String對象只有一個,該對象直到JVM退出時才被清除。舉例:StringExample.java 2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程81第81頁,共105頁。泛型泛型通常也稱為參數(shù)類型(Parameterized Type),它增加了集合框架(Collections Framework)編譯時類型安全,并減少原先讀取集合中元素時必須進行的轉(zhuǎn)型操作
55、。泛型帶來的好處至少有:保留類型動態(tài)綁定的同時,增加靜態(tài)類型檢查,使得編譯時能發(fā)現(xiàn)更多的錯誤。減少容器之間的類型模糊性,使代碼更容易閱讀。減少使用轉(zhuǎn)型,使代碼看起來更加簡潔。舉例:GenericsSample.java2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程82第82頁,共105頁。2.2 運算符和表達式第83頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程84Java語言中的算術(shù)運算符與表達式操作數(shù)數(shù)目運算符表達式描 述一元+op正值-op負值+op, op+自增1-op, op-自減1二元+op1+op2加-op1-op2減*op1*op2乘/op1/op2除%op1%op
56、2取模(求余)第84頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程85Java語言中的關(guān)系運算符與表達式 運算符表達式返回true的情況op1op2op1大于op2=op1=op2op1大于或等于op2op1op2op1小于op2=op1=op2op1小于或等于op2=op1=op2op1與op2相等!=op1!=op2op1與op2不等第85頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程86Java語言中的邏輯運算符與表達式 操作數(shù)取值表達式運算結(jié)果op1op2op1&op2op1|op2!op1falsefalsefalsefalsetruefalsetruef
57、alsetruetruetruefalsefalsetruefalsetruetruetruetruefalse第86頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程87Java語言中的位運算符與表達式 運算符表達式描 述&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ù),如
58、果兩個相應(yīng)位值相反,則該位的結(jié)果為1(或true),否則為0(false)。 op1一元運算,對數(shù)據(jù)的每個二進制位按位取反。op1 op1 op2二元運算,操作數(shù)op1按位右移op2位,左邊補齊的數(shù)值和最高位相同(正數(shù)補0,負數(shù)補1),即每右移一位,其數(shù)值減半。op1 op2二元運算,操作數(shù)op1按位右移op2位,左邊補齊的數(shù)值總是為0,即正整數(shù)運算與同,負整數(shù)則求該數(shù)的反碼,但符號位不變。第87頁,共105頁。關(guān)于運算op1 op2二元運算,操作數(shù)op1按位右移op2位,左邊補齊的數(shù)值總是為0,即正整數(shù)運算與同,負整數(shù)則求該數(shù)的反碼,但符號位不變。對于短整數(shù)和字節(jié)來講,因為在運算之前,首先需
59、要把它們提升到整數(shù),當操作數(shù)為負數(shù)時,第7或1531位將會變?yōu)?。執(zhí)行運算后,第31位將會變?yōu)?,最終會把負數(shù)變?yōu)檎龜?shù)。例如,int數(shù)值“-22 3”:“-22”的原碼:1000 0000 0000 0000 0000 0000 0001 0110符號位不變的反碼: 1111 1111 1111 1111 1111 1111 1110 1001右移3位:000 1111 1111 1111 1111 1111 1111 1110 1其結(jié)果為:536870909建議:不要以數(shù)學意義上的數(shù)值來分析移位舉例:BitOperand.java 2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程88第88頁,共
60、105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程89其它運算符條件運算符:三元運算符,其表達式為someCondition?tureExpression: falseExpression賦值運算符與表達式 := 、+=、- =、*=、/=、%= 、=、=、&=、 |=、 = instanceof運算符 第89頁,共105頁。2022/8/4Java面向?qū)ο蟪绦蛟O(shè)計教程90Java語言運算符優(yōu)先級以及同等優(yōu)先級運算符的組合順序運算符描 述優(yōu)先級(數(shù)越大優(yōu)先級越高)同等優(yōu)先級結(jié)合順序( )圓括號15左右new創(chuàng)建類實例15左右 數(shù)組下標運算符15左右.成員(屬性、方法)選擇15左右+、-后綴
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025江蘇省安全員《A證》考試題庫
- 靈芝種植產(chǎn)業(yè)基地項目可行性研究報告-靈芝市場需求持續(xù)擴大
- 廣州中醫(yī)藥大學《試劑生產(chǎn)工藝》2023-2024學年第一學期期末試卷
- 2025青海省建筑安全員-B證考試題庫及答案
- 廣州醫(yī)科大學《哲學通論》2023-2024學年第一學期期末試卷
- 2025遼寧建筑安全員考試題庫
- 2025年江蘇建筑安全員考試題庫及答案
- 2025年-江蘇省安全員《B證》考試題庫及答案
- 《FOOD中國飲食文化》課件
- 【語文課件】冀中的地道戰(zhàn)課件
- 你比我猜成語
- 異質(zhì)結(jié)完整分
- 膿毒癥1小時bundle質(zhì)量控制
- 第7講 高斯光束的聚焦和準直課件
- 骨科患者術(shù)后疼痛管理的新進展
- 小學生三好學生競選演講稿PPT幻燈片
- 01S201室外消火栓安裝圖集
- 蒸餾酒及配制酒衛(wèi)生檢驗原始記錄
- 高一英語外研版必修一(2019)Unit 1 Period 8 Writing-Writing a journal entry(學案)
- 鉆井HSE作業(yè)風險控制
- S7-200SMARTPLC應(yīng)用技術(shù)PPT完整全套教學課件
評論
0/150
提交評論