




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java程序設(shè)計(jì)
張白一
2021年8月編程語(yǔ)言排行榜
編程語(yǔ)言排行榜每月更新一次,來(lái)自于下面網(wǎng)站計(jì)算。
/tiobe-index/programming-languages-definition/
排行信息基于全球技術(shù)工程師、課程和第三方供應(yīng)商的數(shù)量,流行的搜索引擎,如谷歌、必應(yīng)、維基百科、亞馬遜和百度等的統(tǒng)計(jì)。Java版本的更新我們使用的版本是2022年Java18版Java三大平臺(tái)
1.JavaSE標(biāo)準(zhǔn)版:
JavaSE是Java平臺(tái)標(biāo)準(zhǔn)版的簡(jiǎn)稱(JavaPlatform,StandardEdition),適用于桌面系統(tǒng),用于開(kāi)發(fā)和部署桌面、服務(wù)器以及嵌入設(shè)備和實(shí)時(shí)環(huán)境中的Java應(yīng)用程序。JavaSE為JavaEE提供了基礎(chǔ)。
2.JavaEE企業(yè)版:
JavaEE體系結(jié)構(gòu)提供中間層集成框架用來(lái)滿足無(wú)需太多費(fèi)用而又需要高可用性以及可擴(kuò)展性的應(yīng)用的需求。通過(guò)提供統(tǒng)一的開(kāi)發(fā)平臺(tái),J2EE降低了開(kāi)發(fā)多層應(yīng)用的費(fèi)用和復(fù)雜性,同時(shí)提供對(duì)現(xiàn)有應(yīng)用程序集成強(qiáng)有力支持,完全支持EJB,有良好的向?qū)еС执虬筒渴饝?yīng)用,添加目錄支持,增強(qiáng)了安全機(jī)制,提高了性能。JavaSE標(biāo)準(zhǔn)版和JavaEE企業(yè)版的應(yīng)用包括:
(1)Web應(yīng)用:網(wǎng)絡(luò)游戲、各類網(wǎng)站等。
(2)企業(yè)級(jí)應(yīng)用:各種行業(yè)應(yīng)用、企業(yè)信息化、電子政務(wù)等。涉及領(lǐng)域:辦公自動(dòng)化OA,客戶關(guān)系管理CRM,人力資源HR,企業(yè)資源計(jì)劃ERP、知識(shí)管理KM、供應(yīng)鏈管理SCM、企業(yè)設(shè)備管理系統(tǒng)EAM、產(chǎn)品生命周期管理PLM、面向服務(wù)體系架構(gòu)SOA、商業(yè)智能BI、項(xiàng)目管理PM、營(yíng)銷管理、流程管理WorkFlow、財(cái)務(wù)管理……等等幾乎所有你能想到的應(yīng)用。
(3)桌面系統(tǒng)。
3.JavaME微型版(J2ME,Java2PlatformMicroEdition)適用于小型設(shè)備和智能卡。
JavaME目前分為兩類配置:
(1)面向小型移動(dòng)設(shè)備的CLDC(ConnectedLimitedDeviceProfile)。嵌入式設(shè)備及消費(fèi)類電子產(chǎn)品應(yīng)用:無(wú)線手持設(shè)備、智能卡、通信終端、醫(yī)療設(shè)備、信息家電(如數(shù)字電視、機(jī)頂盒、電冰箱)、汽車電子設(shè)備等。
(2)面向功能更強(qiáng)大的移動(dòng)設(shè)備如智能手機(jī)和機(jī)頂盒,稱為CDC(ConnectedDeviceProfileCDC)。例如:手機(jī)上的Java應(yīng)用程序和Java游戲、
1.1Java的發(fā)展歷程
1.1.1Java的產(chǎn)生
1991年初,美國(guó)加州的Sun公司成立了一個(gè)以JamesGosling為首、名為Green的項(xiàng)目研發(fā)小組,其目標(biāo)是開(kāi)發(fā)一個(gè)面向家用電器市場(chǎng)的軟件產(chǎn)品,用軟件實(shí)現(xiàn)一個(gè)對(duì)家用電器進(jìn)行集成控制的小型控制裝置。要求這個(gè)產(chǎn)品具有高度的簡(jiǎn)潔性和安全性,而C++?在這方面顯然無(wú)法勝任。因此,Gosling決定自行開(kāi)發(fā)一種新的語(yǔ)言,并將該語(yǔ)言命名為Oak(橡樹)。
Oak是Green項(xiàng)目小組開(kāi)發(fā)名為“*7”(StarSeven)產(chǎn)品中的一個(gè)組成部分。StarSeven是一個(gè)集成了Oak、GreenOS(一種操作系統(tǒng))、用戶接口模塊和硬件模塊四個(gè)部分的設(shè)備。第一個(gè)原型于1992年8月問(wèn)世。盡管這個(gè)原型非常成功,但在競(jìng)爭(zhēng)激烈的家用電器市場(chǎng)上卻敗給了競(jìng)爭(zhēng)對(duì)手。失敗的原因固然是多方面的,這與Sun公司的主業(yè)是計(jì)算機(jī)產(chǎn)品而不是家用電器產(chǎn)品這一因素密切相關(guān)。當(dāng)時(shí)Internet上廣為流行的WWW瀏覽器Mosaic1.0版,雖然內(nèi)容豐富,聲、圖、文并茂,但它卻是靜態(tài)的,若想使它有動(dòng)感,必須嵌入一種既安全可靠,又非常簡(jiǎn)練的語(yǔ)言。Oak完全能滿足這一要求,但是要將它推向市場(chǎng),為人們所廣泛接受,還必須采用一種合適的策略。1994年,Sun公司的創(chuàng)始人之一BillJoy介入,促成Oak成為Java并得以走紅。
BillJoy不僅指定Gosling繼續(xù)完善Oak(發(fā)布時(shí)改名為Java),同時(shí)要求Naughton用Oak編寫一個(gè)真正的應(yīng)用程序——WebRunner,后被命名為HotJava的WWW瀏覽器。1994年底,兩人均出色地完成了各自的任務(wù)。在這個(gè)產(chǎn)品的發(fā)布問(wèn)題上,BillJoy力排眾議,采取了“讓用戶免費(fèi)使用來(lái)占領(lǐng)市場(chǎng)份額”的策略,促成了Java與HotJava于1995年初在Internet上的免費(fèi)發(fā)布。由于Java是一種分布式、安全性高、內(nèi)部包含編譯器又非常小的適合網(wǎng)絡(luò)開(kāi)發(fā)環(huán)境的語(yǔ)言,因而一經(jīng)發(fā)布,立即得到包括Netscape在內(nèi)的各WWW廠商的廣泛支持。工業(yè)界一致認(rèn)為:“Java是(20世紀(jì))80年代以來(lái)計(jì)算機(jī)界的一件大事。”微軟總裁BillGates認(rèn)為:“Java是長(zhǎng)期以來(lái)最卓越的程序設(shè)計(jì)語(yǔ)言”。Java已成為最流行的網(wǎng)絡(luò)編程語(yǔ)言。
由于Oak這個(gè)名稱與其他產(chǎn)品的名稱雷同,因此開(kāi)發(fā)小組為這個(gè)新語(yǔ)言取了一個(gè)新名稱——Java。據(jù)說(shuō)研發(fā)小組成員經(jīng)常在公司附近的一家咖啡廳喝咖啡,而咖啡的原產(chǎn)地是Java(爪哇),于是就將這一新語(yǔ)言取名為Java。1.1.2面向?qū)ο蟮恼Z(yǔ)言Java編程語(yǔ)言的發(fā)展與“語(yǔ)言的鴻溝”的變化1.1.3面向?qū)ο蟮恼Z(yǔ)言
面向?qū)ο蟮木幊陶Z(yǔ)言(Object-OrientedProgrammingLanguage,OOPL)的設(shè)計(jì)出發(fā)點(diǎn)是為了能更直接地描述問(wèn)題域中客觀存在的事物(即對(duì)象)以及它們之間的關(guān)系。面向?qū)ο蠹夹g(shù)追求的是軟件系統(tǒng)對(duì)現(xiàn)實(shí)世界的直接模擬,是將現(xiàn)實(shí)世界中的事物直接映射到軟件系統(tǒng)的解空間。它希望用戶最大程度地利用軟件系統(tǒng),花費(fèi)少量的編程時(shí)間來(lái)解決需要解決的問(wèn)題。
在面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言中,可以把程序描述為:
程序?=?對(duì)象?+?消息把客觀世界的這一事實(shí)映射到面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言中,則需把問(wèn)題域中的事物抽象成對(duì)象,用一組數(shù)據(jù)描述該對(duì)象的靜態(tài)特征(即屬性,在Java中稱之為數(shù)據(jù)成員),用一組方法來(lái)刻畫該對(duì)象的動(dòng)態(tài)特征(即行為)。
面向?qū)ο蟮恼Z(yǔ)言對(duì)現(xiàn)實(shí)世界的直接模擬體現(xiàn)在下面幾個(gè)方面:
(1)對(duì)象(object)。程序設(shè)計(jì)所面對(duì)的問(wèn)題域——客觀世界,客觀世界是由一些具體的事物構(gòu)成的,每個(gè)事物都具有自己的一組靜態(tài)特征(屬性)和一組動(dòng)態(tài)特征(行為)。
例如:一輛汽車具有顏色、型號(hào)、馬力、生產(chǎn)廠家等靜態(tài)特征,也具有行駛、轉(zhuǎn)彎、停車等動(dòng)態(tài)特征。
(2)類(class)??陀^世界中的事物既具有特殊性又具有共同性。人類認(rèn)識(shí)客觀世界的基本方法之一就是對(duì)事物進(jìn)行分類,即根據(jù)事物的共同性把事物歸結(jié)為某些類??紤]一下所有的汽車和一輛汽車之間的關(guān)系就很容易理解這一點(diǎn)。OOPL很自然地用類(class)來(lái)表示一組具有相同屬性和方法的對(duì)象。
(3)繼承(inheritance)。在同一類事物中,每個(gè)事物既具有同類的共同性,又具有自己的特殊性。OOPL用父類與子類的概念來(lái)描述這一事實(shí)。在父類中描述事物的共性,通過(guò)父類派生(derive)子類的機(jī)制來(lái)體現(xiàn)事物的個(gè)性??紤]同類事物中每個(gè)事物的特殊性時(shí),可由這個(gè)父類派生子類,子類可以繼承父類的共同性,又具有自己的特殊性。(4)封裝(encapsulation)??陀^世界中的事物是一個(gè)獨(dú)立的整體,它的許多內(nèi)部實(shí)現(xiàn)細(xì)節(jié)是外部所不關(guān)心的。例如,對(duì)于一個(gè)只管開(kāi)車的駕駛員來(lái)說(shuō),他可能根本不知道他所駕駛的這輛汽車內(nèi)部用了多少根螺釘以及它們是怎樣組裝的。OOPL用封裝機(jī)制把對(duì)象的屬性和方法結(jié)合為一個(gè)整體,并且屏蔽了對(duì)象的內(nèi)部細(xì)節(jié)。
(5)關(guān)聯(lián)(association)??陀^世界中的一個(gè)事物可能與其他事物之間存在某種行為上的聯(lián)系。例如,一輛行駛中的汽車遇到紅色信號(hào)燈時(shí)要?jiǎng)x車停止,OOPL便通過(guò)消息連接來(lái)表示對(duì)象之間的這種動(dòng)態(tài)聯(lián)系,也稱之為關(guān)聯(lián)。
(6)組合體(composite)。擁有其他對(duì)象的對(duì)象被稱為組合體??陀^世界中較為復(fù)雜的事物往往是由其他一些比較簡(jiǎn)單的事物構(gòu)成的。例如,一輛自行車是由車架、車輪、把手等構(gòu)件構(gòu)成的。OOPL也提供了描述這種組合體的功能。
綜上所述,面向?qū)ο蟮木幊陶Z(yǔ)言使程序能夠比較直接地反映客觀世界的本來(lái)面目,并且使軟件開(kāi)發(fā)人員能夠運(yùn)用人類認(rèn)識(shí)事物所采用的一般思維方法來(lái)進(jìn)行軟件開(kāi)發(fā)。1.2Java的特性
Sun公司對(duì)Java的定義是:Java是一種具有“簡(jiǎn)單、面向?qū)ο蟮?、分布式、解釋型、健壯、安全、與體系結(jié)構(gòu)無(wú)關(guān)、可移植、高性能、多線程和動(dòng)態(tài)執(zhí)行”等特性的語(yǔ)言。
1.簡(jiǎn)單性
Java語(yǔ)言簡(jiǎn)單而高效,基本Java系統(tǒng)(包含編譯器和解釋器)所占空間只有250KB左右。語(yǔ)言風(fēng)格類似于C++,保留了C++?語(yǔ)言的優(yōu)點(diǎn);擯棄了C++?中不安全且容易引發(fā)程序錯(cuò)誤的指針;消除了C++?中可能給軟件開(kāi)發(fā)、實(shí)現(xiàn)和維護(hù)帶來(lái)麻煩的地方,包括其冗余、二義性和存在安全隱患之處,如操作符重載、多重繼承和數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換等;簡(jiǎn)化了內(nèi)存管理和文件管理——Java提供了C++?中不具備的自動(dòng)內(nèi)存垃圾搜集機(jī)制,從而減輕了編程人員進(jìn)行內(nèi)存管理的負(fù)擔(dān),有助于減少軟件錯(cuò)誤。Java的簡(jiǎn)單性是以增加運(yùn)行時(shí)系統(tǒng)的復(fù)雜性為代價(jià)的。以內(nèi)存管理為例,自動(dòng)內(nèi)存垃圾處理減輕了面向?qū)ο缶幊痰呢?fù)擔(dān),但Java運(yùn)行時(shí)系統(tǒng)卻必須內(nèi)嵌一個(gè)內(nèi)存管理模塊。。
2.面向?qū)ο?/p>
Java語(yǔ)言是純面向?qū)ο蟮?,它的設(shè)計(jì)集中于對(duì)象及其接口,提供了簡(jiǎn)單的類機(jī)制以及動(dòng)態(tài)的接口模型。對(duì)象中封裝了它的屬性和行為,實(shí)現(xiàn)了模塊化和信息隱藏;而類則提供了一類對(duì)象的原型,并且通過(guò)繼承機(jī)制,子類可以使用父類所提供的方法,實(shí)現(xiàn)了代碼的復(fù)用。
3.可移植性(平臺(tái)無(wú)關(guān)性)
程序的可移植性指一次編寫,到處運(yùn)行的特性??梢浦残苑譃閮蓚€(gè)層次:源代碼級(jí)可移植性和二進(jìn)制代碼級(jí)可移植性。C和C++?只具有一定程度的源代碼級(jí)可移植性,其源程序要想在不同平臺(tái)上運(yùn)行,必須重新編譯。而Java不僅是源代碼級(jí)可移植的,甚至經(jīng)過(guò)編譯之后形成的二進(jìn)制代碼——字節(jié)碼,也同樣是可移植的。
Java采用了多種機(jī)制來(lái)保證可移植性,其中最主要的有兩條:
第一,Java既是編譯型的,又是解釋型的。第二,Java采用的是基于國(guó)際標(biāo)準(zhǔn)——IEEE標(biāo)準(zhǔn)的數(shù)據(jù)類型。Java的數(shù)據(jù)類型在任何機(jī)器上都是一致的,它不支持特定于具體的硬件環(huán)境的數(shù)據(jù)類型。它還規(guī)定同一種數(shù)據(jù)類型在所有實(shí)現(xiàn)中必須占據(jù)相同的空間大小(C++?的數(shù)據(jù)類型在不同的硬件環(huán)境或操作系統(tǒng)下占據(jù)的內(nèi)存空間是不同的)。通過(guò)在數(shù)據(jù)類型的空間大小方面采用統(tǒng)一標(biāo)準(zhǔn),Java成功地保證了其程序的平臺(tái)獨(dú)立性。此外,Java的可移植性還體現(xiàn)在Java的運(yùn)行環(huán)境上。Java編譯器是用Java語(yǔ)言本身編寫的,而其他編程語(yǔ)言運(yùn)行的環(huán)境則是用ANSIC(美國(guó)標(biāo)準(zhǔn)C語(yǔ)言)編寫的,Java的整個(gè)運(yùn)行環(huán)境體現(xiàn)了一個(gè)定義良好的可移植性接口。Java語(yǔ)言規(guī)范還遵循POSIX(可移植操作系統(tǒng)接口)標(biāo)準(zhǔn),這也是Java具有良好可移植性的重要原因。4.高性能
一般情況下,可移植性、穩(wěn)定性和安全性幾乎總是以犧牲性能為代價(jià)的,解釋型語(yǔ)言的執(zhí)行效率一般也要低于直接執(zhí)行源碼的速度。但Java所采用的措施卻很好地彌補(bǔ)了這些性能差距。這些措施包括:
(1)高效的字節(jié)碼。Java字節(jié)碼格式的設(shè)計(jì)充分考慮了性能因素,其字節(jié)碼的格式非常簡(jiǎn)單,這使得經(jīng)由Java解釋器解釋執(zhí)行后可產(chǎn)生高效的機(jī)器碼。Java編譯器生成的字節(jié)碼和機(jī)器碼的執(zhí)行效率相差無(wú)幾。據(jù)統(tǒng)計(jì),Java字節(jié)碼的執(zhí)行效率非常接近于由C和C++生成的機(jī)器碼的執(zhí)行效率。
(2)多線程。C和C++?采用的是單線程的體系結(jié)構(gòu),均未提供對(duì)多線程的語(yǔ)言級(jí)支持。Java卻提供了完全意義的多線程支持。
Java的多線程支持體現(xiàn)在兩個(gè)方面:首先,Java環(huán)境本身就是多線程的,它可以利用系統(tǒng)的空閑時(shí)間來(lái)執(zhí)行諸如必要的垃圾清除和一般性的系統(tǒng)維護(hù)等操作;其次,Java還提供了對(duì)多線程的語(yǔ)言級(jí)支持,利用Java的多線程編程接口,編程人員可以很方便地編寫出支持多線程的應(yīng)用程序,提高程序的執(zhí)行效率。必須注意的是,Java的多線程支持在一定程度上可能會(huì)受其運(yùn)行時(shí)支撐平臺(tái)的限制,并且依賴于其他一些與平臺(tái)相關(guān)的特性。比方說(shuō),如果操作系統(tǒng)本身不支持多線程,Java的多線程就可能只是“受限”的或不完全的多線程。(3)及時(shí)編譯和嵌入C代碼。Java的運(yùn)行環(huán)境還提供了另外兩種可選的性能提高措施:及時(shí)編譯和嵌入C代碼。及時(shí)編譯是指在運(yùn)行時(shí)把字節(jié)碼編譯成機(jī)器碼,這意味著代碼仍然是可移植的,但在開(kāi)始時(shí)會(huì)有一個(gè)編譯字節(jié)碼的延遲過(guò)程。嵌入C代碼在運(yùn)行速度方面效果當(dāng)然是最理想的,但會(huì)給編程人員帶來(lái)額外的負(fù)擔(dān),同時(shí)將降低代碼的可移植性。5.分布式
分布的概念包括數(shù)據(jù)分布和操作分布兩個(gè)方面。數(shù)據(jù)分布是指數(shù)據(jù)可以分散存放于網(wǎng)絡(luò)上不同的主機(jī)中,以解決海量數(shù)據(jù)的存儲(chǔ)問(wèn)題;操作分布則是指把計(jì)算分散到不同的主機(jī)上進(jìn)行處理,這就如同由許多人協(xié)作共同完成一項(xiàng)大而復(fù)雜的工作一樣。
Java是面向網(wǎng)絡(luò)的語(yǔ)言。它擁有廣泛的能輕易地處理TCP/IP協(xié)議的運(yùn)行庫(kù),例如HTTP與FTP類庫(kù)等等。這使得在Java中比在C或C++?中更容易建立網(wǎng)絡(luò)連接。對(duì)于數(shù)據(jù)分布,Java應(yīng)用程序可以利用URL通過(guò)網(wǎng)絡(luò)開(kāi)啟和存取對(duì)象,就如同存取一個(gè)本地文件系統(tǒng)一樣簡(jiǎn)單。
對(duì)于操作分布,Java的客戶機(jī)/服務(wù)器模式可以把計(jì)算從服務(wù)器分散到客戶端,從而提高整個(gè)系統(tǒng)的執(zhí)行效率,避免瓶頸制約,增加動(dòng)態(tài)可擴(kuò)充性。6.動(dòng)態(tài)特性
多數(shù)面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言在系統(tǒng)設(shè)計(jì)和編程階段都能充分體現(xiàn)OO思想,但卻很難將其延伸到系統(tǒng)運(yùn)行和維護(hù)階段。這主要是因?yàn)槎鄶?shù)語(yǔ)言都采用靜態(tài)鏈接機(jī)制。一個(gè)系統(tǒng)是由多個(gè)模塊組成的,若采用靜態(tài)鏈接機(jī)制,則在編譯時(shí)就會(huì)將系統(tǒng)的各模塊和類鏈接組合成一個(gè)整體,即一個(gè)目標(biāo)文件。如果某個(gè)類進(jìn)行了修改,則整個(gè)系統(tǒng)就必須重新編譯,這對(duì)大型分布式系統(tǒng)(例如,交通信息處理系統(tǒng)、金融機(jī)構(gòu)信息處理系統(tǒng)等)的修改、維護(hù)或升級(jí)是不利的。如何在系統(tǒng)運(yùn)行階段動(dòng)態(tài)地進(jìn)行系統(tǒng)的修改或升級(jí)便成為迫切需要解決的問(wèn)題。
Java采用“滯后聯(lián)編”機(jī)制,即動(dòng)態(tài)鏈接機(jī)制,解決了上述問(wèn)題。Java的“滯后聯(lián)編”技術(shù)將OO特點(diǎn)延伸到系統(tǒng)的運(yùn)行階段。Java程序的基本組成單位是類,若一個(gè)系統(tǒng)是由多個(gè)類模塊組成的,則編譯時(shí)每個(gè)類被分別編譯成相應(yīng)的類文件,即字節(jié)碼文件。一個(gè)字節(jié)碼系統(tǒng)由若干個(gè)字節(jié)碼文件組成,使得系統(tǒng)的類模塊性得以保留。在系統(tǒng)運(yùn)行時(shí),字節(jié)碼文件按程序運(yùn)行的需要而動(dòng)態(tài)裝載(也可以通過(guò)網(wǎng)絡(luò)來(lái)載入)。因此,如果在一個(gè)系統(tǒng)中修改了某一個(gè)類,只需要對(duì)此類重新編譯,而系統(tǒng)中的其他類不必重新編譯。這就保證了系統(tǒng)在運(yùn)行階段可以動(dòng)態(tài)地進(jìn)行類或類庫(kù)的修改或升級(jí)?!皽舐?lián)編”機(jī)制使得Java程序能夠適應(yīng)不斷變化的運(yùn)行環(huán)境,使用戶能夠真正擁有“即插即用”(plug-and-play)的軟件模塊功能。
7.健壯性和安全性
Java設(shè)計(jì)的目的是用于網(wǎng)絡(luò)/分布式計(jì)算環(huán)境。為此,Java提供了一系列安全檢查機(jī)制,使得Java更具健壯性和安全性。Java的安全檢查機(jī)制分為多級(jí),主要包括Java語(yǔ)言本身的安全性設(shè)計(jì)、嚴(yán)格的編譯檢查、運(yùn)行檢查和網(wǎng)絡(luò)接口級(jí)的安全檢查等。
(1)?Java語(yǔ)言本身的安全性設(shè)計(jì)
a.不支持窄化類型轉(zhuǎn)換
C++?支持窄化類型轉(zhuǎn)換,面臨信息丟失的危險(xiǎn)。
例如,floath=23.89;inti=h
Java不支持窄化類型轉(zhuǎn)換,如需要必須顯式地進(jìn)行類型轉(zhuǎn)換。
例如,floath=23.89;inti=(int)h
b.不支持指針數(shù)據(jù)類型
C++?語(yǔ)言支持指針數(shù)據(jù)類型。病毒利用指針可以進(jìn)入操作系統(tǒng)的內(nèi)存空間。
Java語(yǔ)言不支持指針數(shù)據(jù)類型,一切對(duì)內(nèi)存的訪問(wèn)都必須通過(guò)對(duì)象的實(shí)例變量來(lái)實(shí)現(xiàn),從而杜絕了內(nèi)存的非法訪問(wèn)。
c.數(shù)組下標(biāo)越界檢查機(jī)制
C和C++?語(yǔ)言不提供的數(shù)組下標(biāo)越界檢查機(jī)制。
Java提供數(shù)組下標(biāo)越界檢查機(jī)制,使得網(wǎng)絡(luò)“黑客”們無(wú)法構(gòu)造指針訪問(wèn)。
Java通過(guò)類型檢查、Null指針檢測(cè)、數(shù)組邊界檢測(cè)等方法,可以在開(kāi)發(fā)的早期發(fā)現(xiàn)程序中的錯(cuò)誤。
d.完善的異常處理機(jī)制
Java語(yǔ)言中通過(guò)提供異常處理機(jī)制來(lái)解決異常的處理問(wèn)題,簡(jiǎn)化了異常處理任務(wù),增強(qiáng)了程序的可讀性和系統(tǒng)容錯(cuò)能力。
e.自動(dòng)內(nèi)存垃圾收集機(jī)制
C++?程序缺乏自動(dòng)的內(nèi)存管理機(jī)制,在C++?中,必須手工分配、釋放所有的動(dòng)態(tài)內(nèi)存。如果忘記釋放原來(lái)分配的內(nèi)存,或是釋放了其他程序正在使用的內(nèi)存,就會(huì)出錯(cuò)。
Java提供垃圾收集器,可自動(dòng)收集閑置對(duì)象占用的內(nèi)存。(2)編譯檢查
Java編譯器對(duì)所有的表達(dá)式和參數(shù)都要進(jìn)行類型相容性的檢查,以確保類型是兼容的。Java在編譯時(shí)還可捕獲類型聲明中的許多常見(jiàn)錯(cuò)誤,防止動(dòng)態(tài)運(yùn)行時(shí)不匹配問(wèn)題的出現(xiàn)。在編譯期間,Java編譯器并不分配內(nèi)存,而是推遲到運(yùn)行時(shí)由解釋器決定,這樣編程人員就無(wú)法通過(guò)指針來(lái)非法訪問(wèn)內(nèi)存。(3)運(yùn)行檢查
運(yùn)行期間,Java的運(yùn)行環(huán)境提供了字節(jié)碼校驗(yàn)器、運(yùn)行時(shí)內(nèi)存布局、類裝載器和文件訪問(wèn)限制四級(jí)安全保障機(jī)制。
a.字節(jié)碼校驗(yàn)器。Java字節(jié)碼進(jìn)入解釋器時(shí),即使Java編譯器生成的是完全正確的字節(jié)碼,為了防止正確的字節(jié)碼在解釋執(zhí)行前可能被改動(dòng),解釋器也必須再次對(duì)其進(jìn)行檢查。
b.運(yùn)行時(shí)內(nèi)存布局和類裝載器。Java解釋器將決定程序中類的內(nèi)存布局,“黑客”們將無(wú)法預(yù)先得知一個(gè)類的內(nèi)存布局結(jié)構(gòu),從而也就無(wú)法利用該信息來(lái)破壞系統(tǒng)。類裝載器負(fù)責(zé)把來(lái)自網(wǎng)絡(luò)的類裝載到其單獨(dú)的內(nèi)存區(qū)域,避免應(yīng)用程序之間的相互干擾或破壞。
c.文件訪問(wèn)限制??蛻魴C(jī)端可以限制網(wǎng)絡(luò)上裝載的類只能訪問(wèn)某些允許的文件系統(tǒng)。
(4)網(wǎng)絡(luò)接口級(jí)的安全檢查
在網(wǎng)絡(luò)接口級(jí),用戶可按自己的需要來(lái)設(shè)置網(wǎng)絡(luò)訪問(wèn)權(quán)限。
1.3Java的開(kāi)發(fā)運(yùn)行環(huán)境
目前有許多為快速開(kāi)發(fā)Java程序提供的集成開(kāi)發(fā)環(huán)境(IDE),它們將編輯、編譯、構(gòu)造、調(diào)試和在線幫助集成在一個(gè)用戶圖形界面中,有效地提高了編程速度。IDE排行榜本課選用Eclipse作為開(kāi)發(fā)工具。在此環(huán)境下開(kāi)發(fā)Java應(yīng)用程序,需要下載兩個(gè)軟件:
1.JDKjdk-18_windows-x64_bin
在oracle網(wǎng)站/downloads/
下載:
點(diǎn)擊Java點(diǎn)擊點(diǎn)擊
點(diǎn)擊點(diǎn)擊2.下載eclipse/downloads/進(jìn)入一個(gè)捐款頁(yè)面,不用理它,等5秒鐘左右會(huì)彈出下載的界面,下載到你的文件夾下。點(diǎn)擊
該版本是eclipse最基礎(chǔ)的版本,適合JavaSE個(gè)人開(kāi)發(fā)者、或希望根據(jù)自己需求配置插件的開(kāi)發(fā)者使用1.3.1安裝
1.安裝JDKjdk-18_windows-x64_bin
該版本安裝完成之后環(huán)境變量已經(jīng)自動(dòng)配置
2.在鍵盤上按+r組合鍵啟動(dòng)“運(yùn)行”程序。
3.在“打開(kāi)”文本框中輸入“cmd”之后進(jìn)入dos命令
4.在窗口輸入“java-version”之后就會(huì)看到下圖內(nèi)容:
說(shuō)明此時(shí)java已經(jīng)完成環(huán)境變量配置,不需要再進(jìn)行配置了。
5.安裝Eclipse。安裝只需要下載壓縮包,解壓完畢后即可使用,進(jìn)入文件夾,紅線是eclipse的啟動(dòng)程序
1.3.2運(yùn)行Eclipse
雙擊啟動(dòng)程序出現(xiàn),第一次打開(kāi)需要設(shè)置工作環(huán)境,可以指定工作目錄,或者使用默認(rèn)的C盤工作目錄,點(diǎn)擊Launch按鈕。
關(guān)閉左上角“Welcome”按鈕出現(xiàn)此界面,表明Eclipse集成開(kāi)發(fā)環(huán)境啟動(dòng)成功。學(xué)習(xí)創(chuàng)建建立JAVA項(xiàng)目,運(yùn)行第一個(gè)Java程序。即“ch1”文件夾中的例子。
1.4Java程序的運(yùn)行步驟
1.4.1Java應(yīng)用程序的建立及運(yùn)行
Java應(yīng)用程序的建立及運(yùn)行可分為下述三個(gè)步驟:
(1)在EclipseIDE中創(chuàng)建一個(gè)工程
(2)建立Java源程序文件
(3)編譯運(yùn)行Java源程序
【示例程序C1_1.java】編寫一個(gè)輸出字符串“MyfirstJavaApplication!”的Application程序。
packagech1;
publicclassC1_1
{publicstaticvoidmain(Stringargs[?])
{System.out.println(“MyfirstJavaApplication!”);}
}
1.創(chuàng)建一個(gè)IDE項(xiàng)目
啟動(dòng)EclipseIDE后,
①單擊圖1.8所示菜單欄中的“file”(文件)選項(xiàng);
②彈出“New”依次選擇“JavaProject”文件夾;
③彈出如圖1.9所示,創(chuàng)建ch1工程;
④如圖1.10,在ch1工程上單擊右鍵,創(chuàng)建C1_1類,如圖1.11,1.12;
⑤圖1.13是創(chuàng)建好的C1_1類
圖1.8建立一個(gè)項(xiàng)目的操作界面圖1.9“NewJavaProject”工程圖1.10建好ch1工程圖1.11創(chuàng)建類圖1.12創(chuàng)建C1_1類圖1.13創(chuàng)建好C1_1類
2.建立JavaApplication源程序
本例建立的C1_1.java源程序如圖1.15所示。
圖1.15C1_1.java源程序3.編譯運(yùn)行JavaApplication源程序
圖1.16第一種運(yùn)行方式第一種運(yùn)行方式圖1.17在寫程序框中單擊右鍵選擇“JavaApplication”第二種運(yùn)行方式圖1.18程序C1_1的運(yùn)行結(jié)果運(yùn)行結(jié)果
4.程序分析
(1)?packagech1這一行定義了一個(gè)名為ch1的包。注意:這個(gè)包名就是我們建立的項(xiàng)目名,同時(shí)它也是一個(gè)文件夾名。在這個(gè)包中,系統(tǒng)會(huì)自動(dòng)創(chuàng)建幾個(gè)文件夾,并將我們建立的源程序文件C1_1.java存放在ch1文件夾下。
(2)?publicclassC1_1這一行聲明此程序要?jiǎng)?chuàng)建一個(gè)名為C1_1的類。public指出這個(gè)類是公共類,而這個(gè)類定義的內(nèi)容就在后面緊跟的花括號(hào)內(nèi)。
任何Java程序都必須以類的形式出現(xiàn),一個(gè)程序中可以定義若干個(gè)類,但只能定義一個(gè)public類。定義類必須用關(guān)鍵字class作為標(biāo)志。如果在一個(gè)程序中只定義了一個(gè)public類,那么這個(gè)類名也一定是文件名,否則編譯會(huì)出錯(cuò)。
(3)?publicstaticvoidmain(String[?]args)表明這是C1_1類的main主方法。在Java編程中,每一個(gè)應(yīng)用程序都必須包含一個(gè)main主方法,當(dāng)程序執(zhí)行時(shí),解釋器會(huì)找主方法,它是程序的入口點(diǎn),若無(wú)此方法,解釋器會(huì)顯示錯(cuò)誤信息。在定義main方法時(shí)publicstaticvoid不可缺少,String[?]args是傳遞給main方法的參數(shù)(見(jiàn)第7章),其中String是參數(shù)的類型,args是參數(shù)名(可自定義)。main后面緊跟的花括號(hào)是main方法的實(shí)現(xiàn)內(nèi)容。本例中只含一條語(yǔ)句:
System.out.println("MyfirstJavaApplication!");此語(yǔ)句的功能是使用JAVAAPI的System.out.println(?)方法把消息“MyfirstJavaApplication!”發(fā)送到標(biāo)準(zhǔn)輸出設(shè)備(這里是顯示器)上。
JAVA?API(JavaApplicationInterface,即Java的應(yīng)用編程接口)是Sun公司開(kāi)發(fā)的類庫(kù),用于應(yīng)用程序的開(kāi)發(fā)。System是Java類庫(kù)lang包中的一個(gè)類,System.out是Java類庫(kù)io包中PrintStream類的一個(gè)對(duì)象,該對(duì)象提供了println(?)方法,此方法的作用是向標(biāo)準(zhǔn)輸出設(shè)備輸出參數(shù)指定的字符串的內(nèi)容,輸出完成后光標(biāo)定位在下一行。5.調(diào)編程框中字的大小單擊Preferences(參數(shù)設(shè)置)單擊Basic(基本)雙擊TextFont字體修改字的大小為14修改完成結(jié)果Java虛擬機(jī)(JavaVirtualMachine簡(jiǎn)稱JVM)是運(yùn)行所有Java程序的抽象計(jì)算機(jī),是Java語(yǔ)言的運(yùn)行環(huán)境。Java語(yǔ)言程序的編譯、解釋和執(zhí)行過(guò)程解釋器1.4.2JVM的體系結(jié)構(gòu)及工作原理Java虛擬機(jī)有處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng)。Java虛擬機(jī)屏蔽了與具體操作系統(tǒng)平臺(tái)相關(guān)的信息,使得Java程序只需生成在Java虛擬機(jī)上運(yùn)行的字節(jié)碼,就可以在多種平臺(tái)上運(yùn)行。JVM的內(nèi)部體系結(jié)構(gòu)(1)類裝載器子系統(tǒng):負(fù)責(zé)裝載所有由用戶自己編寫生成的?.class文件以及這些?.class文件引用的JDKAPI(編程接口)。
(2)執(zhí)行引擎:負(fù)責(zé)將字節(jié)碼翻譯成適用于本地機(jī)系統(tǒng)的機(jī)器碼,然后再送硬件執(zhí)行。
(3)運(yùn)行時(shí)數(shù)據(jù)區(qū):主要包括方法區(qū)、Java堆、Java棧、PC寄存器、本地方法棧等。
a.每個(gè)JVM實(shí)例都有一個(gè)方法區(qū)和堆
方法區(qū)主要存放類裝載器加載的?.class文件、類的靜態(tài)變量。堆主要存放所有程序在運(yùn)行時(shí)創(chuàng)建的對(duì)象或數(shù)組。方法區(qū)和堆由所有線程共享。b.每個(gè)線程都有自己的PC寄存器和Java棧。PC寄存器的值指示下一條將被執(zhí)行的指令。Java棧記錄存儲(chǔ)該線程中Java方法調(diào)用的狀態(tài)。每當(dāng)啟動(dòng)一個(gè)新線程,JVM都會(huì)創(chuàng)建一個(gè)新的Java棧,用于保存線程的運(yùn)行狀態(tài),包括局部變量、參數(shù)、返回值、運(yùn)算的中間結(jié)果。
c.本地方法棧:存儲(chǔ)本地方法調(diào)用的狀態(tài)。
當(dāng)啟動(dòng)一個(gè)Java程序時(shí),就會(huì)產(chǎn)生一個(gè)JVM實(shí)例。該程序關(guān)閉退出后這個(gè)JVM實(shí)例也就隨之消亡。每個(gè)Java程序都運(yùn)行在自己的Java虛擬機(jī)實(shí)例中。Java虛擬機(jī)實(shí)例通過(guò)調(diào)用某個(gè)初始類的main()方法來(lái)運(yùn)行一個(gè)Java程序。main(?)方法是該程序初始線程的起點(diǎn),任何其他的線程都是由這個(gè)初始線程啟動(dòng)的。第2章Java語(yǔ)言基礎(chǔ)
2.1Java符號(hào)集2.2數(shù)據(jù)類型、常量與變量2.3表達(dá)式和語(yǔ)句
2.1Java符號(hào)集
符號(hào)是構(gòu)成語(yǔ)言和程序的基本單位。Java語(yǔ)言采用國(guó)際化的Unicode字符集。
Java符號(hào)按詞法可分為如下五類:
(1)標(biāo)識(shí)符(Identifiers)
(2)關(guān)鍵字(Keyword)
(3)運(yùn)算符(Operands)
(4)分隔符(Separator)
(5)常量(Literals)這里主要是指標(biāo)識(shí)符常量2.1.1標(biāo)識(shí)符及其命名
在計(jì)算機(jī)中運(yùn)行或存在的任何一個(gè)成分(變量、常量、方法和類等),都需要有一個(gè)名字以標(biāo)識(shí)它的存在和唯一性,這個(gè)名字就是標(biāo)識(shí)符。在Java語(yǔ)言中對(duì)標(biāo)識(shí)符的定義如下:
(1)標(biāo)識(shí)符的長(zhǎng)度不限,但在實(shí)際命名時(shí)其長(zhǎng)度不宜過(guò)長(zhǎng),過(guò)長(zhǎng)會(huì)增加錄入的工作量。
(2)標(biāo)識(shí)符可以由字母、數(shù)字、下劃線“_”和美元符號(hào)“$”組成,且必須以字母、下劃線或美元符號(hào)開(kāi)頭。
例如:a1_1;b$;TestPoint;GetArea1a;
(3)標(biāo)識(shí)符中同一個(gè)字母的大寫或小寫被認(rèn)為是不同的標(biāo)識(shí)符,即標(biāo)識(shí)符區(qū)分字母的大小寫。例如:C1_1和c1_1代表不同的標(biāo)識(shí)符。2.1.2關(guān)鍵字
關(guān)鍵字通常也稱為保留字,是程序設(shè)計(jì)語(yǔ)言本身已經(jīng)使用且被賦予特定意義的一些標(biāo)識(shí)符。編程人員不能用關(guān)鍵字作為自己定義程序成分的標(biāo)識(shí)符。2.1.3運(yùn)算符
運(yùn)算符與運(yùn)算數(shù)一起組成運(yùn)算式,以完成計(jì)算任務(wù)。
2.1.4分隔符
分隔符將程序代碼組織成編譯器所理解的形式,它構(gòu)造了語(yǔ)句的結(jié)構(gòu)和程序的結(jié)構(gòu)。2.1.5注釋
注釋是程序中的說(shuō)明性文字,是程序的非執(zhí)行部分。在程序中加注釋的目的是使程序更加易讀、易理解,有助于修改程序以及他人閱讀。Java語(yǔ)言中使用如下三種方式給程序加注釋:
(1)?//注釋內(nèi)容。表示從“//”開(kāi)始直到此行末尾均作為注釋。例如:
//commentline
(2)?/*注釋內(nèi)容*/。表示從“/*”開(kāi)始直到“*/”結(jié)束均作為注釋,可占多行。例如:
/*commentonone
ormoreline*/
(3)?/**注釋內(nèi)容*/。表示從“/**”開(kāi)始直到“*/”結(jié)束均作為注釋,可占多行。例如:
/**documentingcomment
havingmanyline*/
第三種方式主要用于創(chuàng)建Web頁(yè)面的HTML文件,Java的文檔生成器能從這類注釋中提取信息,并將其規(guī)范化后用于建立Web頁(yè)。
2.2數(shù)據(jù)類型、常量與變量
2.2.1數(shù)據(jù)類型2.2.2常量
常量是指在程序的整個(gè)運(yùn)行過(guò)程中其值始終保持不變的量。在Java系統(tǒng)中,常量有兩種形式:
(1)以字面形式直接給出值的常量;
(2)以關(guān)鍵字final定義的標(biāo)識(shí)符常量。
Java中常用的常量,按其數(shù)據(jù)類型來(lái)分:
整數(shù)型常量、浮點(diǎn)型常量
布爾型常量、字符型常量
字符串常量。
1.整數(shù)型常量
整數(shù)型常量有3種表示形式:
(1)十進(jìn)制整數(shù)。由數(shù)字0~9構(gòu)成,如56、-24、0。
(2)八進(jìn)制整數(shù)。以零開(kāi)頭后繼由數(shù)字0~7構(gòu)成,如017、0、0123。
(3)十六進(jìn)制整數(shù)。以0x開(kāi)頭后繼由數(shù)字0~9、字母a~f或A~F構(gòu)成,如0x17、0x0、0xf、0xD。
整數(shù)型常量在計(jì)算機(jī)內(nèi)使用4個(gè)字節(jié)存儲(chǔ),適合表示的數(shù)值范圍是?-2?147?483?648~2?147?483?647。若要使用更大的數(shù)值,則應(yīng)在數(shù)據(jù)末尾加上大寫的L或小寫的l(即長(zhǎng)整型數(shù)據(jù)),這樣可使整數(shù)型常量在計(jì)算機(jī)內(nèi)使用8個(gè)字節(jié)存儲(chǔ)。
2.浮點(diǎn)型常量
浮點(diǎn)型常量又稱實(shí)型常量,用于表示有小數(shù)部分的十進(jìn)制數(shù),它有兩種表示形式:
(1)小數(shù)點(diǎn)形式。它由數(shù)字和小數(shù)點(diǎn)組成,如3.9、-0.23、-23.、.23、0.23。
(2)指數(shù)形式。如2.3e3、2.3E3,都表示2.3
×
103;.2e
-?4表示0.2
×
10-4。
浮點(diǎn)型常量在計(jì)算機(jī)內(nèi)的存儲(chǔ)方式又為分兩種:
①雙精度,在計(jì)算機(jī)內(nèi)用8個(gè)字節(jié)存放雙精度浮點(diǎn)型常量。
例如:2.3e3、2.3e3d、2.3e3D、2.4、2.4d、2.4D。
②單精度,在計(jì)算機(jī)內(nèi)用4個(gè)字節(jié)存放單精度浮點(diǎn)型常量。
例如:2.3e3F、2.4f、2.4F。
3.布爾型常量
布爾型常量只有兩個(gè):true和false。它代表一個(gè)邏輯量的兩種不同的狀態(tài)值,用true表示真,而用false表示假。
4.字符型常量
字符型常量有4種形式:
(1)用單引號(hào)括起的單個(gè)字符。這個(gè)字符可以是Unicode字符集中的任何字符。例如:'b'、'F'、'4'、'*'。
注意:在程序中用到引號(hào)的地方(不論單引號(hào)或雙引號(hào)),應(yīng)使用英文半角的引號(hào),不要寫成中文全角的引號(hào)。初學(xué)者往往容易忽視這一問(wèn)題,造成編譯時(shí)的語(yǔ)法錯(cuò)誤。
(2)用單引號(hào)括起的轉(zhuǎn)義字符。ASCII字符集中的前32個(gè)字符是控制字符,具有特殊的含義,如回車、換行等,這些字符很難用一般方式表示。為了清楚地表示這些特殊字符,Java中引入了一些特別的定義:用反斜線“?\?”開(kāi)頭,后面跟一個(gè)字母來(lái)表示某個(gè)特定的控制符。這便是轉(zhuǎn)義字符。
(3)用單引號(hào)括起的八進(jìn)制轉(zhuǎn)義序列,形式為?'\ddd'。此處,ddd表示八進(jìn)制數(shù)中的數(shù)字符號(hào)0~7,如?'\101'。
八進(jìn)制表示法只能表示?'\000'~'\377'?范圍內(nèi)的字符,即表示ASCII字符集部分,不能表示全部的Unicode字符。
(4)用單引號(hào)括起的Unicode轉(zhuǎn)義字符,形式為?'\uxxxx'。此處,xxxx表示十六進(jìn)制數(shù),如?'\u3a4f?'。
5.字符串常量
字符串常量是用雙引號(hào)括起的0個(gè)或多個(gè)字符串序列。字符串中可以包括轉(zhuǎn)義字符,如?"Hello"、"two\n"、"\22\u3f07\nAB1234\n"、""。
在Java中要求一個(gè)字符串在一行內(nèi)寫完。若需要一個(gè)大于一行的字符串,則可以使用連接操作符“+”把兩個(gè)或更多的字符串常量串接在一起,組成一個(gè)長(zhǎng)串。
例如,"Howdo"+"youdo??\n"?的結(jié)果是?"Howdoyoudo??"。2.2.3變量
變量是在程序的運(yùn)行過(guò)程中其值可以被改變的量。變量除了區(qū)分為不同的數(shù)據(jù)類型外,更重要的是每個(gè)變量都具有變量名和變量值兩重含義。變量名是用戶自己定義的標(biāo)識(shí)符,這個(gè)標(biāo)識(shí)符代表計(jì)算機(jī)存儲(chǔ)器中存儲(chǔ)一個(gè)數(shù)據(jù)的位置的名字,它代表著計(jì)算機(jī)中的一個(gè)或一系列存儲(chǔ)單元。變量名一旦定義便不會(huì)改變。變量的值則是這個(gè)變量在某一時(shí)刻的取值,它是變量名所表示的存儲(chǔ)單元中存放的數(shù)據(jù),它是隨著程序的運(yùn)行而不斷變化的。
Java中的變量遵從先聲明后使用的原則。聲明變量包括給出變量的名稱和指明變量的數(shù)據(jù)類型,必要時(shí)還可以指定變量的初始值。變量的聲明是通過(guò)聲明語(yǔ)句來(lái)實(shí)現(xiàn)的。
變量的聲明格式如下:
類型名變量名1[,變量名2][,…];
或
類型名變量名1[=初值1][,變量名2[=初值2],…];
其中,方括號(hào)括起來(lái)的部分是可選的。
charch1,ch2;//?char是類型名,ch1、ch2是變量名(標(biāo)識(shí)符)
inti,j,k=9;//?int為類型名,i、j、k為變量名,并且k的初值為9
floatx1=0,x2,y1=0,y2;//float是類型名,x1、x2、y1、y2是變量名
1.整數(shù)型變量
整數(shù)型變量用來(lái)表示整數(shù)。Java中的整數(shù)類型,按其取值范圍之不同,可區(qū)分為四種。例如:inti,j,k=9;//聲明標(biāo)識(shí)符分別為i、j、k的變量為整數(shù)型變量,并且k的初值為9
表2.7整數(shù)類型的最小值和最大值的符號(hào)常量表示
ch2工程中示例程序的創(chuàng)建位置
【程序示例C2_1.java】常用數(shù)制的輸入與輸出。該程序的運(yùn)行結(jié)果如下:
2.浮點(diǎn)型變量
浮點(diǎn)型變量用來(lái)表示小數(shù)??蓞^(qū)分為兩種。
例如:
doubleb;
floata1=3.4f,a2=3.4f,a3;//常量值后的f不可省略表2.8浮點(diǎn)型
變
量類型存儲(chǔ)需求取值范圍float4字節(jié)-3.40282347E+38F~3.40282347E+38F(7位有效數(shù)據(jù))double8字節(jié)-1.7976931348623157E+308~1.7976931348623157E+308(15位有效數(shù)據(jù))表2.9浮點(diǎn)類型的特定值的符號(hào)常量表示
【程序示例C2_2.java】float型數(shù)據(jù)的輸入與輸出。
publicclassC2_2
{
publicstaticvoidmain(Stringargs[?])
{
floatx,y,z;
x=94.3f;y=32.9f;z=x/y;
System.out.println(x+“/”+y+“=”+z);
}
}
程序的運(yùn)行結(jié)果如下:
94.3/32.9=2.8662612
3.字符型變量
例如:charc1,c2='A';
【程序示例C2_3.java】字符型數(shù)據(jù)的輸入與輸出。
publicclassC2_3
{
publicstaticvoidmain(Stringargs[?])
{charc1,c2,c3;//聲明變量c1、c2、c3為字符型變量
c1=‘H’; //在以c1標(biāo)識(shí)的存儲(chǔ)單元中存入字符H
c2=‘\\’; //在以c2標(biāo)識(shí)的存儲(chǔ)單元中存入字符\
c3=‘\115’; //在c3中存入八進(jìn)制數(shù)115代表的ASCII字符M
System.out.print(c1); //輸出字符型變量c1的值
System.out.print(c2); //輸出字符型變量c2的值
System.out.print(c3); //輸出字符型變量c3的值
}
}
運(yùn)行結(jié)果如下:H\M
4.布爾型變量
例如:booleanf1=true,f2=false;
這種數(shù)據(jù)類型表示1位信息,但它所占存儲(chǔ)空間的大小沒(méi)有明確指定,僅定義為能夠存儲(chǔ)字面值true或false。
【示例程序C2_4.java】布爾型數(shù)據(jù)的運(yùn)算。
publicclassC2_4
{publicstaticvoidmain(Stringargs[?])
{booleanx,y,z;//聲明變量x、y、z為布爾型變量
inta=89,b=20;
x=(a>b);//對(duì)布爾型變量賦值
y=(a!=b);//對(duì)布爾型變量賦值
z=(a+b==43);//對(duì)布爾型變量賦值
System.out.println(“x=”+x);//輸出布爾型變量的值
System.out.println(“y=”+y);//輸出布爾型變量的值
System.out.println(“z=”+z);//輸出布爾型變量的值
}}
運(yùn)行結(jié)果如下:x=true
y=true
z=false
2.2.4引用類型
Java語(yǔ)言中除基本數(shù)據(jù)類型以外的數(shù)據(jù)類型稱為引用類型。引用類型的特點(diǎn)是:
(1)引用類型數(shù)據(jù)以對(duì)象的形式存在;
(2)引用類型變量的值是某個(gè)對(duì)象的句柄,而不是對(duì)象本身;
(3)聲明引用類型變量時(shí),系統(tǒng)只為該變量分配引用空間,并未創(chuàng)建一個(gè)具體的對(duì)象。
詳細(xì)內(nèi)容在本書第3章以后介紹。
2.3表達(dá)式和語(yǔ)句
表達(dá)式是用運(yùn)算符把操作數(shù)(變量、常量及方法等)連接起來(lái)表達(dá)某種運(yùn)算或含義的式子。表達(dá)式分為:算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式、賦值表達(dá)式、條件表達(dá)式等。
2.3.1算術(shù)表達(dá)式
算術(shù)表達(dá)式是由算術(shù)運(yùn)算符和位運(yùn)算符與操作數(shù)連接組成的表達(dá)式。表達(dá)式的類型由運(yùn)算符和操作數(shù)確定。
1.算術(shù)運(yùn)算符
算術(shù)運(yùn)算符根據(jù)所需要操作數(shù)的個(gè)數(shù),可分為雙目運(yùn)算符和單目運(yùn)算符,表2.12算?術(shù)?運(yùn)?算?符注意:
(1)兩個(gè)整數(shù)類型的數(shù)據(jù)做除法時(shí),結(jié)果只保留整數(shù)部分。如2/3的結(jié)果為0。
(2)只有整數(shù)類型才能進(jìn)行取余運(yùn)算,其結(jié)果是兩數(shù)整除后的余數(shù)。例如:9%2的結(jié)果為1。
(3)自增與自減運(yùn)算符只適用于變量,且變量可以位于運(yùn)算符的任意一側(cè),但各有不同的效果。
例如,下面的三條語(yǔ)句:
inta1=2,a2=2;
intb=(++a1)*2;//等價(jià)于a1?=?a1?+?1;b?=?a1?*?2;值是6
intc=(a2++)*2;//等價(jià)于c?=?a2?*?2;a2?=?a2?+?1;值是4
2.算術(shù)運(yùn)算符的優(yōu)先級(jí)
運(yùn)算符的優(yōu)先級(jí),是指當(dāng)一個(gè)表達(dá)式中出現(xiàn)不同的算術(shù)運(yùn)算符時(shí),執(zhí)行運(yùn)算的優(yōu)先次序。算術(shù)運(yùn)算符的優(yōu)先次序示例a*(b+(c/d)/e)*(f+g%h)1234567書寫表達(dá)式時(shí)應(yīng)該注意以下幾點(diǎn):
(1)寫表達(dá)式時(shí),若運(yùn)算符的優(yōu)先級(jí)記不清,可使用括號(hào)改變優(yōu)先級(jí)的次序。
(2)過(guò)長(zhǎng)的表達(dá)式可分為幾個(gè)表達(dá)式來(lái)寫。
(3)在一個(gè)表達(dá)式中最好不要連續(xù)使用兩個(gè)運(yùn)算符,例如a+++b。這種寫法往往使讀者弄不清到底是a+(++b),還是(a++)+b。如果一定要表達(dá)這種含義,則最好用括號(hào)進(jìn)行分組或者用空隔符分隔,例如a+++b。
【示例程序C2_5.java】++?和?--?運(yùn)算符的使用。
publicclassC2_5
{
publicstaticvoidmain(Stringargs[?])
{intx,y,z,a,b;
a=9;
b=2;
x=a%b;
y=2+++a;//等價(jià)于a=a+1;y=2+a;
z=7+
--b;
System.out.print(“\tx=”+x);
System.out.print(“\ty=”+y);
System.out.println(“\tz=”+z);
}
}
運(yùn)行結(jié)果如下:x=1y=12 z=8
3.強(qiáng)制類型轉(zhuǎn)換
強(qiáng)制類型轉(zhuǎn)換是指當(dāng)一個(gè)表達(dá)式中出現(xiàn)的各種變量或常量的數(shù)據(jù)類型不同時(shí),所進(jìn)行的數(shù)據(jù)類型轉(zhuǎn)換(castingconversion)。Java程序中的類型轉(zhuǎn)換(不含布爾型)可分為隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換兩種形式。
(1)隱式類型轉(zhuǎn)換。雙目運(yùn)算中的算術(shù)運(yùn)算符組成的表達(dá)式,如果兩邊類型不一致,系統(tǒng)會(huì)自動(dòng)轉(zhuǎn)換為較高(即取值范圍較大)的類型,這便是隱式數(shù)據(jù)類型轉(zhuǎn)換。
例如:inti;
shortj=3;
floata=5.0f;
則i+j+a的值為float型。
●(byte或short型)與int型運(yùn)算,轉(zhuǎn)換為int型;
●(byte或short或int型)與long型運(yùn)算,轉(zhuǎn)換為long型;
●(byte或short或int或long型)與float型運(yùn)算,轉(zhuǎn)換為float型;
●(byte或short或int或long或float型)與double型運(yùn)算,轉(zhuǎn)換為double型;
●char型與int型運(yùn)算,轉(zhuǎn)換為int型。
C++?的隱式類型轉(zhuǎn)換允許“窄化轉(zhuǎn)換”
例如:doubleh=23.8;inta;a=h;
Java的隱式類型轉(zhuǎn)換不允許窄化轉(zhuǎn)換操作,如果要做,必須進(jìn)行顯式類型轉(zhuǎn)換,是一種比較安全的操作。
(2)顯式類型轉(zhuǎn)換。?顯式類型轉(zhuǎn)換需要人為地在表達(dá)式前面指明所需要轉(zhuǎn)換的類型,系統(tǒng)將按這一要求把某種類型強(qiáng)制性地轉(zhuǎn)換為指定的類型,其一般形式如下:
(<類型名>)<表達(dá)式>
例如:
inti;
floath=9.6F;
i=(int)h;
則i的值為9。
注意:顯式轉(zhuǎn)換會(huì)導(dǎo)致精度下降或數(shù)據(jù)溢出,謹(jǐn)慎使用。注意:顯式類型轉(zhuǎn)換是暫時(shí)的。
例如:
inti=98,m;
floath;
h=3.4F+(float)i;
m=2+i;
在h=3.4F+(float)i表達(dá)式中,通過(guò)顯式類型轉(zhuǎn)換將整型變量i的類型轉(zhuǎn)換為float型,而在其后的表達(dá)式m=2+i中,i仍為int型。
【示例程序C2_6.java】強(qiáng)制類型轉(zhuǎn)換的使用。
publicclassC2_6
{
publicstaticvoidmain(Stringargs[?])
{
intx,y;
x=(int)82.5;
y=(int)‘A’+(int)‘b’;//等價(jià)于65+98
System.out.print(“\tx=”+x);
System.out.println(“\ty=”+y);
}
}
運(yùn)行結(jié)果如下:
x=82y=163
2.3.2賦值表達(dá)式
由賦值運(yùn)算符組成的表達(dá)式稱為賦值表達(dá)式。
1.賦值運(yùn)算符
賦值運(yùn)算符是“=”。賦值運(yùn)算符的作用是將賦值運(yùn)算符右邊的數(shù)據(jù)或表達(dá)式的值賦給賦值運(yùn)算符左邊的變量。
注意:賦值號(hào)左邊必須是變量。
例如:doubles=6.5+45;//將表達(dá)式6.5+45的值賦給變量s
2.賦值中的類型轉(zhuǎn)換
在賦值表達(dá)式中,如果運(yùn)算符兩側(cè)的數(shù)據(jù)類型不一致,賦值符左邊變量的數(shù)據(jù)類型較高,則系統(tǒng)會(huì)自動(dòng)進(jìn)行隱式類型轉(zhuǎn)換,也可以人為地進(jìn)行顯式類型轉(zhuǎn)換;如果賦值符左邊變量的數(shù)據(jù)類型低于右邊表達(dá)式值的類型,則必須進(jìn)行顯式類型轉(zhuǎn)換,否則編譯時(shí)會(huì)報(bào)錯(cuò)。
例如:
inta=65602;floatb;charc1,c2=‘A’;
b=a;//隱式類型轉(zhuǎn)換,運(yùn)算時(shí)先將a的值轉(zhuǎn)換為b的類型,再賦給b
b=c2; //隱式類型轉(zhuǎn)換
c1=a; //不正確的隱式類型轉(zhuǎn)換,編譯器會(huì)報(bào)錯(cuò)
c2=(char)a;//正確的顯式類型轉(zhuǎn)換,//運(yùn)算時(shí)a的值按char類型的寬度削窄(拋棄高位的兩個(gè)字節(jié))再賦給c2,使c2的值為字符'B'
3.復(fù)合賦值運(yùn)算符
賦值運(yùn)算符“=”之前加上其他運(yùn)算符,則構(gòu)成復(fù)合賦值運(yùn)算符。
【示例程序C2_7.java】復(fù)合賦值運(yùn)算符的使用。
publicclassC2_7
{
publicstaticvoidmain(Stringargs[?])
{intx,y,z;
x=1;
y=2;z=3;
x+=y; //等價(jià)于x=x+y;1+2
y%=x; //等價(jià)于y=y%x;2%3
z/=x; //等價(jià)于z=z/x;3/3
System.out.print(“\tx=”+(x+=y));
System.out.print(“\ty=”+y);
System.out.println(“\tz=”+z);
}
}
運(yùn)行結(jié)果如下:x=5 y=2z=12.3.3表達(dá)式語(yǔ)句
在Java程序中,只要在一個(gè)表達(dá)式的末尾加上一個(gè)分號(hào)“?;?”,就構(gòu)成了表達(dá)式語(yǔ)句。最典型的例子是在一個(gè)賦值表達(dá)式的末尾加上一個(gè)分號(hào),就可以構(gòu)成賦值語(yǔ)句。例如:
x=8
是一個(gè)賦值表達(dá)式,而
x=8;
是一個(gè)賦值語(yǔ)句。2.3.4關(guān)系表達(dá)式
利用關(guān)系運(yùn)算符連接的式子稱為關(guān)系表達(dá)式。
注意:①關(guān)系表達(dá)式的運(yùn)算結(jié)果是一個(gè)邏輯值“真”或“假”,在Java中用true表示“真”,用false表示“假”;
②注意區(qū)分等于運(yùn)算符“==”和賦值運(yùn)算符“=”。
【示例程序C2_8.java】關(guān)系表達(dá)式的使用。
publicclassC2_8
{
publicstaticvoidmain(Stringargs[?])
{booleanx,y;
doublea,b;
a=12.897;
b=345.6;
x=(a!=b);
y=(a==b);
System.out.println("(a>b)="+(a>b));
System.out.println(“x=”+x);
System.out.println(“y=”+y);
}
}
運(yùn)行結(jié)果如下:(a>b)=false
x=true
y=false
2.3.5邏輯表達(dá)式
利用邏輯運(yùn)算符將操作數(shù)連接起來(lái)的式子稱為邏輯表達(dá)式,邏輯表達(dá)式的運(yùn)算結(jié)果是布爾型值。
注意:
①執(zhí)行“&”和“|”運(yùn)算時(shí),運(yùn)算符左右兩邊的表達(dá)式首先被運(yùn)算執(zhí)行,然后再對(duì)兩表達(dá)式的結(jié)果進(jìn)行與、或運(yùn)算。
②“&&”和“||”執(zhí)行操作時(shí),如果從左邊的表達(dá)式中得到的操作數(shù)能確定運(yùn)算結(jié)果,就不再對(duì)右邊的表達(dá)式進(jìn)行運(yùn)算。采用“&&”和“||”的目的是加快運(yùn)算速度。
【示例程序C2_9.java】邏輯表達(dá)式的使用。
publicclassC2_9
{
publicstaticvoidmain(Stringargs[?])
{
booleanx,y,z,a,b;
a=‘b’>‘N’;
b=‘A’!=‘A’;
x=(!a);
y=(a&&b);
z=(a&b);
System.out.print("\ta="+a);
System.out.print(“\tb=”+b);
System.out.print(“\tx=”+x);
System.out.print(“\ty=”+y);
System.out.println(“\tz=”+z);
}
}
運(yùn)行結(jié)果如下:a=trueb=falsex=falsey=falsez=false
2.3.6位運(yùn)算
位運(yùn)算是對(duì)整數(shù)的二進(jìn)制表示的每一位進(jìn)行操作。位運(yùn)算的操作數(shù)和結(jié)果都是整型量。
【示例程序C2_10.java】位運(yùn)算的使用。
public
classC2_10{
public
static
voidmain(Stringargs[])
{byte
a=0b0110;
byte
b=0b0101;
byte
n=0b01;
System.out.print(“\t~a=”+Integer.toBinaryString(~a));
System.out.print(“\ta&b=”+Integer.toBinaryString(a&b));
System.out.println(“\ta|b=”+Integer.toBinaryString(a|b));
System.out.print(“\ta^b=”+Integer.toBinaryString(a^b));
System.out.print(“\tb<<n=”+Integer.toBinaryString(b<<n));
System.out.print(“\ta>>n=”+Integer.toBinaryString(a>>n));
System.out.print("\ta>>>n="+Integer.toBinaryString(a>>>n));
}
}
運(yùn)行結(jié)果如下:2.3.7運(yùn)算符的優(yōu)先級(jí)
2.12若x=4,y=2,計(jì)算z值:
(1)?z=x&y(2)?z=x|y(3)?z=x^y(4)?z=x>>y
(5)?z=~x?(6)?z=x<<y(7)?z=x>>>y
2.13陳述下面Java語(yǔ)句中操作符的計(jì)算順序,并給出運(yùn)行該語(yǔ)句后x的值。
(1)x=5+3*5/3-2;
(2)x=4%4+4*4-4/4;
(3)x=(2*4*(2+(4*2/(2))-3));
2.14假設(shè)x為10、y為20、z為30,求下列布爾表達(dá)式的值。
(1)?x<10?||?x>10
(2)?x>y&&y>x
(3)?(x<y+z)&&(x+10<=20)
(4)?z–y==x&&(y–z)==x
(5)?x<10&&x>10
(6)?x>y||y>x
(7)?!(x<y+z)||!(x+10<=20)
(8)?(!(x==y))&&(x!=y)&&(x<y||y<x)
作業(yè):2.12、2.13、2.14題編程第3章程序流程控制
3.1選擇結(jié)構(gòu)程序設(shè)計(jì)3.2循環(huán)結(jié)構(gòu)程序設(shè)計(jì)3.3break和continue語(yǔ)句
3.1選擇結(jié)構(gòu)程序設(shè)計(jì)
Java語(yǔ)言提供了兩條基本的分支選擇語(yǔ)句:
if語(yǔ)句和switch語(yǔ)句。
3.1.1if語(yǔ)句
if語(yǔ)句可構(gòu)造雙分支選擇結(jié)構(gòu)程序、單分支選擇結(jié)構(gòu)程序及多分支選擇結(jié)構(gòu)程序。
1.雙分支選擇結(jié)構(gòu)
if(布爾表達(dá)式)
???語(yǔ)句區(qū)塊1
else
???語(yǔ)句區(qū)塊2falsetrue布爾表達(dá)式語(yǔ)句區(qū)塊1語(yǔ)句區(qū)塊2離開(kāi)判斷式,執(zhí)行分支結(jié)構(gòu)后面的語(yǔ)句進(jìn)入判斷式說(shuō)明:
(1)“布爾表達(dá)式”為關(guān)系表達(dá)式或邏輯表達(dá)式
(2)“語(yǔ)句區(qū)塊”是指一條語(yǔ)句或多條語(yǔ)句。當(dāng)為多條語(yǔ)句時(shí),一定要用一對(duì)花括號(hào)(“{”和“}”)將其括起,使之成為一條復(fù)合語(yǔ)句。否則,編譯時(shí)會(huì)指出語(yǔ)法錯(cuò)誤;當(dāng)為一條語(yǔ)句時(shí)可以省去花括號(hào)。第三章程序位置
【示例程序C3_1.java】判斷給出的一個(gè)成績(jī),輸出“通過(guò)”或“不及格”。
publicclassC3_1
{??publicstaticvoidmain(String[?]args)
{intgrade;
grade=86;//讀者在調(diào)試時(shí)也可賦一個(gè)小于60的成績(jī)?cè)囋嚳?/p>
if(grade>=60)
{
System.out.print(“通過(guò),成績(jī)是:”);
System.out.println(grade);
}
else
System.out.println(“不及格”);
}//main
}
運(yùn)行結(jié)果:通過(guò),成績(jī)是:86請(qǐng)注意該程序的縮進(jìn)格式。這種縮進(jìn)格式雖然不是必須的,但由于它突出了程序的結(jié)構(gòu),大大提高了程序的清晰度和可讀性,故國(guó)際上提倡和推薦這種程序書寫風(fēng)格。
【示例程序C3_2.java】比較兩個(gè)數(shù)的大小。
public
classC3_2
{
public
static
voidmain(String[]args)
{
double
d1=43.4;
double
d2=85.3;
if(d1>=d2)System.out.println(d1+">="+d2);
elseSystem.out.println(d1+"<"+d2);
}
}
運(yùn)行結(jié)果:43.4<85.3
2.省略了else子句的if語(yǔ)句(單分支結(jié)構(gòu))
在if語(yǔ)句中,可以省略else子句以形成單分支結(jié)構(gòu)。
if(布爾表達(dá)式)
???語(yǔ)句區(qū)塊1
【示例程序C3_3.java】判斷給出的一個(gè)成績(jī),當(dāng)成績(jī)小于60時(shí),輸出“未通過(guò)”及具體成績(jī),其他情況時(shí)什么也不輸出。
publicclassC3_3
{?publicstaticvoidmain(String[?]args)
{
intgrade;
grade=56;//成績(jī)
if(grade<60)
{System.out.print(“未通過(guò),成績(jī)是:”);
System.out.println(grade);
}//if
}mian
}
運(yùn)行結(jié)果:未通過(guò),成績(jī)是:56
3.?if語(yǔ)句的嵌套(多分支結(jié)構(gòu))
其形式如下:
if(布爾表達(dá)式1)語(yǔ)句區(qū)塊1
elseif(布爾表達(dá)式2)語(yǔ)句區(qū)塊2
elseif(布爾表達(dá)式3)語(yǔ)句區(qū)塊3
else語(yǔ)句區(qū)塊n+1falsefalsefalsefalsetruetruetruetrue布爾表達(dá)式1布爾表達(dá)式2布爾表達(dá)式3布爾表達(dá)式n語(yǔ)句區(qū)塊1語(yǔ)句區(qū)塊2語(yǔ)句區(qū)塊3語(yǔ)句區(qū)塊n語(yǔ)句區(qū)塊n+1進(jìn)入判斷式離開(kāi)判斷式,執(zhí)行分支語(yǔ)句后面的語(yǔ)句if嵌套結(jié)構(gòu)的一種形式
【示例程序C3_4.java】使用if嵌套將百分制轉(zhuǎn)換為5分制。
publicclassC3_4
{
publicstaticvoidmain(String[?]args)
{
intgrade=76;
if(grade>=90)System.out.println(“成績(jī):優(yōu)”);
elseif(grade>=80)System.out.println(“成績(jī):良”);
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《國(guó)際市場(chǎng)營(yíng)銷》課件-第9章 國(guó)際市場(chǎng)促銷策略
- 《電子商務(wù)基礎(chǔ)》課件-話題3 電子商務(wù)運(yùn)用
- 橄欖球俱樂(lè)部簡(jiǎn)裝合同樣本
- 保險(xiǎn)業(yè)務(wù)代理居間協(xié)議
- 電子商務(wù)平臺(tái)訂單管理表
- 高質(zhì)量產(chǎn)業(yè)人才培育與發(fā)展計(jì)劃實(shí)施方案研究報(bào)告
- 如何寫可行性分析報(bào)告
- 肉類加工產(chǎn)業(yè)發(fā)展報(bào)告
- 昆明項(xiàng)目可行性研究報(bào)告
- 農(nóng)村產(chǎn)業(yè)發(fā)展報(bào)告
- 醫(yī)療器械使用安全和風(fēng)險(xiǎn)管理培訓(xùn)課件
- 2025年新疆生產(chǎn)建設(shè)兵團(tuán)興新職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)帶答案
- 外周靜脈解剖知識(shí)
- 5萬(wàn)噸年鋰電池物理法循環(huán)再生項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)備案
- 2025年江蘇省高職單招《職測(cè)》高頻必練考試題庫(kù)400題(含答案)
- 康復(fù)科患者隨訪管理措施與效果評(píng)估
- 2024-2025學(xué)年人教版數(shù)學(xué)八年級(jí)下冊(cè)期中檢測(cè)卷(含答案)
- 2024年08月浙江/北京華夏金融租賃秋季社會(huì)招考筆試歷年參考題庫(kù)附帶答案詳解
- 2025年《可愛(ài)的中國(guó)》新疆地方教材(小學(xué)版)教案范文
- 2025年第一個(gè)節(jié)氣立春春天到來(lái)新的希望和開(kāi)始課件
- 寧德時(shí)代SHL測(cè)評(píng)答案
評(píng)論
0/150
提交評(píng)論