鴻蒙應(yīng)用程序開發(fā) 課件全套 第1-9章 HarmonyOS簡(jiǎn)介-Data Ability_第1頁(yè)
鴻蒙應(yīng)用程序開發(fā) 課件全套 第1-9章 HarmonyOS簡(jiǎn)介-Data Ability_第2頁(yè)
鴻蒙應(yīng)用程序開發(fā) 課件全套 第1-9章 HarmonyOS簡(jiǎn)介-Data Ability_第3頁(yè)
鴻蒙應(yīng)用程序開發(fā) 課件全套 第1-9章 HarmonyOS簡(jiǎn)介-Data Ability_第4頁(yè)
鴻蒙應(yīng)用程序開發(fā) 課件全套 第1-9章 HarmonyOS簡(jiǎn)介-Data Ability_第5頁(yè)
已閱讀5頁(yè),還剩570頁(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章HarmonyOS

簡(jiǎn)介1引言本章學(xué)習(xí)目標(biāo)認(rèn)識(shí)

HarmonyOS了解HarmonyOS

發(fā)展歷程掌握HarmonyOS

的技術(shù)特性及體系構(gòu)架2第1章HarmonyOS簡(jiǎn)介1.1初識(shí)HarmonyOS1.2HarmonyOS技術(shù)特性1.3HarmonyOS體系構(gòu)架31.1.1什么是HarmonyOS

HarmonyOS:

定義:HarmonyOS是由中國(guó)華為公司開發(fā)的一款全新的面向全場(chǎng)景的分布式計(jì)算機(jī)操作系統(tǒng),于2019年8月9日華為開發(fā)者大會(huì)上首次亮相。HarmonyOS

的中文譯名為鴻蒙操作系統(tǒng),“鴻蒙”在漢語(yǔ)中指遠(yuǎn)古時(shí)代開天辟地之前的混沌之氣,華為以此命名象征了華為從零開始開天辟地的決心和勇氣,寓意在國(guó)產(chǎn)操作系統(tǒng)領(lǐng)域開創(chuàng)一個(gè)新時(shí)代。圖1-1所示HarmonyOS圖標(biāo)。對(duì)普通用戶而言,HarmonyOS

能夠?qū)⑸顖?chǎng)景中的各類終端設(shè)備整合在一起,實(shí)現(xiàn)不同終端設(shè)備之問的快速連接、協(xié)作、資源共享,使用戶獲得流暢的全場(chǎng)景體驗(yàn)。對(duì)設(shè)備開發(fā)者而言,HarmonyOS采用組件化設(shè)計(jì)方案,可以根據(jù)設(shè)備的資源能力和業(yè)務(wù)特征進(jìn)行靈活裁剪,滿足不同形態(tài)的終端設(shè)備對(duì)于操作系統(tǒng)的要求,使

HarmonyOS可以適配各種硬件。對(duì)應(yīng)用開發(fā)者而言,HarmonyOS

采用多種分布式技術(shù),整合各種終端硬件能力,形成一個(gè)虛擬的“超級(jí)終端”。開發(fā)者可以基于“超級(jí)終端”進(jìn)行應(yīng)用開發(fā),使得應(yīng)用程序的開發(fā)實(shí)現(xiàn)與不同終端設(shè)備的形態(tài)差異無(wú)關(guān)。這能夠讓開發(fā)者聚焦上層業(yè)務(wù)邏輯,無(wú)須關(guān)注硬件差異,更加便捷、高效地開發(fā)應(yīng)用。41.1.2為什么需要HarmonyOS萬(wàn)物互聯(lián)時(shí)代應(yīng)用開發(fā)的機(jī)遇、挑戰(zhàn)和趨勢(shì)經(jīng)過(guò)十多年的發(fā)展,萬(wàn)物互聯(lián)時(shí)代正在開啟。GSMA預(yù)測(cè)到2025年,全球物聯(lián)網(wǎng)終端連接數(shù)量將達(dá)246億個(gè),其中消費(fèi)物聯(lián)網(wǎng)終端連接數(shù)量將達(dá)110億個(gè)(注:數(shù)據(jù)來(lái)自于全球移動(dòng)通信系統(tǒng)協(xié)會(huì)發(fā)布的《2020年移動(dòng)經(jīng)濟(jì)》報(bào)告)。全新的全場(chǎng)景設(shè)備體驗(yàn),正深入改變消費(fèi)者的使用習(xí)慣。同時(shí)應(yīng)用開發(fā)者也面臨設(shè)備底座從手機(jī)單設(shè)備到全場(chǎng)景多設(shè)備的轉(zhuǎn)變,通過(guò)全場(chǎng)景多設(shè)備作為全新的底座,為消費(fèi)者帶來(lái)萬(wàn)物互聯(lián)時(shí)代更為高效、便捷的體驗(yàn)。新的場(chǎng)景同時(shí)也帶來(lái)了新的挑戰(zhàn)。開發(fā)者不僅需要支持更加多樣化的設(shè)備,還需要支持跨設(shè)備的協(xié)作。不同設(shè)備類型意味著不同的傳感器能力、硬件能力、屏幕尺寸、操作系統(tǒng)和開發(fā)語(yǔ)言,還意味著差異化的交互方式。打破壟斷、自立自強(qiáng)、基于自身發(fā)展的戰(zhàn)略需要早在1999年,時(shí)任中國(guó)科技部部長(zhǎng)徐冠華曾說(shuō),“中國(guó)信息產(chǎn)業(yè)缺芯少魂”。其中的“芯”是指芯片,而“魂”則是指操作系統(tǒng)。指出了我國(guó)在很長(zhǎng)的一段時(shí)間內(nèi)缺少國(guó)產(chǎn)自研的操作系統(tǒng),受制于人。2019年5月16日凌晨,美國(guó)商務(wù)部以“科技網(wǎng)絡(luò)安全”為由,宣布將華為公司及其70家附屬子公司列入出口管制“實(shí)體名單”。2020年5月15日宣布禁止華為使用美國(guó)芯片設(shè)計(jì)軟件。51.1.2為什么需要HarmonyOS重拳出擊、橫空問世2020年8月17日宣布禁止含有美國(guó)技術(shù)的代工企業(yè)生產(chǎn)芯片給華為,再到2020年9月15日宣布禁止擁有美國(guó)技術(shù)成分的芯片出口給華為。在這個(gè)至暗時(shí)刻,華為絕地反擊。2019年5月17日凌晨2點(diǎn),華為海思總裁何庭波發(fā)表致員工的一封信,信中稱公司多年前做出了極限生存的假設(shè),預(yù)計(jì)有一天,所有美國(guó)的先進(jìn)芯片和技術(shù)將不可獲得。2019年8月9日,華為于東莞舉行華為開發(fā)者大會(huì),并正式發(fā)布華為的自主操作系統(tǒng)HarmonyOS。正如其中文“鴻蒙”的意譯,意味著HarmonyOS將會(huì)開啟國(guó)產(chǎn)操作系統(tǒng)一個(gè)開天辟地的時(shí)代。當(dāng)今世界正處于百年未有之大變局,科技創(chuàng)新成為國(guó)際戰(zhàn)略博弈的主戰(zhàn)場(chǎng)。西方對(duì)華為的打壓不但未能得逞,反倒更讓我們意識(shí)到只有掌握科技自主權(quán)才能夠在國(guó)際舞臺(tái)立穩(wěn)腳跟。華為自研的操作系統(tǒng)不僅僅證明我們已經(jīng)擁有足夠?qū)嵙Υ蚱茋?guó)際弄斷,更表明了捍衛(wèi)國(guó)家戰(zhàn)略安全的決心。61.1.3HarmonyOS發(fā)展歷程HarmonyOS迭代至今,已經(jīng)發(fā)布了多個(gè)版本,其發(fā)展歷程如下圖所示。7第1章HarmonyOS簡(jiǎn)介1.1初識(shí)HarmonyOS1.2HarmonyOS技術(shù)特性1.3HarmonyOS體系構(gòu)架81.2.1

硬件互助,資源共享HarmonyOS是一個(gè)分布式操作系統(tǒng),多種設(shè)備之間能夠?qū)崿F(xiàn)硬件互助、資源共享是其顯著特性之一。這一特性依賴的關(guān)鍵技術(shù)包括分布式軟總線、分布式設(shè)備虛擬化、分布式數(shù)據(jù)管理、分布式任務(wù)調(diào)度等。分布式軟總線是分布式通信能力,為設(shè)備之間的無(wú)感發(fā)現(xiàn)和零等手機(jī)、平板、智能穿戴、智慧屏、車機(jī)等分布式設(shè)備的通信基座,為設(shè)備之間的互聯(lián)互通提供了統(tǒng)一的待傳輸創(chuàng)造了條件。開發(fā)者只需聚焦于業(yè)務(wù)邏輯的實(shí)現(xiàn),無(wú)需關(guān)注組網(wǎng)方式與底層協(xié)議。分布式軟總線示意圖見圖1。典型應(yīng)用場(chǎng)景舉例:智能家居場(chǎng)景:在烹飪時(shí),手機(jī)可以通過(guò)碰一碰和烤箱連接,并將自動(dòng)按照菜譜設(shè)置烹調(diào)參數(shù),控制烤箱來(lái)制作菜肴。與此類似,料理機(jī)、油煙機(jī)、空氣凈化器、空調(diào)、燈、窗簾等都可以在手機(jī)端顯示并通過(guò)手機(jī)控制。設(shè)備之間即連即用,無(wú)需繁瑣的配置。多屏聯(lián)動(dòng)課堂:老師通過(guò)智慧屏授課,與學(xué)生開展互動(dòng),營(yíng)造課堂氛圍;學(xué)生通過(guò)平板完成課程學(xué)習(xí)和隨堂問答。統(tǒng)一、全連接的邏輯網(wǎng)絡(luò)確保了傳輸通道的高帶寬、低時(shí)延、高可靠。9分布式設(shè)備虛擬化平臺(tái)可以實(shí)現(xiàn)不同設(shè)備的資源融合、設(shè)備管理、數(shù)據(jù)處理,多種設(shè)備共同形成一個(gè)超級(jí)虛擬終端。針對(duì)不同類型的任務(wù),為用戶匹配并選擇能力合適的執(zhí)行硬件,讓業(yè)務(wù)連續(xù)地在不同設(shè)備間流轉(zhuǎn),充分發(fā)揮不同設(shè)備的能力優(yōu)勢(shì),如顯示能力、攝像能力、音頻能力、交互能力以及傳感器能力等。分布式設(shè)備虛擬化示意圖見圖2。典型應(yīng)用場(chǎng)景舉例:視頻通話場(chǎng)景:在做家務(wù)時(shí)接聽視頻電話,可以將手機(jī)與智慧屏連接,并將智慧屏的屏幕、攝像頭與音箱虛擬化為本地資源,替代手機(jī)自身的屏幕、攝像頭、聽筒與揚(yáng)聲器,實(shí)現(xiàn)一邊做家務(wù)、一邊通過(guò)智慧屏和音箱來(lái)視頻通話。游戲場(chǎng)景:在智慧屏上玩游戲時(shí),可以將手機(jī)虛擬化為遙控器,借助手機(jī)的重力傳感器、加速度傳感器、觸控能力,為玩家提供更便捷、更流暢的游戲體驗(yàn)。1.2.1

硬件互助,資源共享圖2

分布式設(shè)備虛擬化示意圖10分布式數(shù)據(jù)管理基于分布式軟總線的能力,實(shí)現(xiàn)應(yīng)用程序數(shù)據(jù)和用戶數(shù)據(jù)的分布式管理。用戶數(shù)據(jù)不再與單一物理設(shè)備綁定,業(yè)務(wù)邏輯與數(shù)據(jù)存儲(chǔ)分離,跨設(shè)備的數(shù)據(jù)處理如同本地?cái)?shù)據(jù)處理一樣方便快捷,讓開發(fā)者能夠輕松實(shí)現(xiàn)全場(chǎng)景、多設(shè)備下的數(shù)據(jù)存儲(chǔ)、共享和訪問,為打造一致、流暢的用戶體驗(yàn)創(chuàng)造了基礎(chǔ)條件。分布式數(shù)據(jù)管理示意圖見圖3。典型應(yīng)用場(chǎng)景舉例:協(xié)同辦公場(chǎng)景:將手機(jī)上的文檔投屏到智慧屏,在智慧屏上對(duì)文檔執(zhí)行翻頁(yè)、縮放、涂鴉等操作,文檔的最新狀態(tài)可以在手機(jī)上同步顯示。照片分享場(chǎng)景:出游時(shí),使用手機(jī)拍攝的照片,可以在登錄了同帳號(hào)的其他設(shè)備,比如平板上更方便地瀏覽、收藏、保存或編輯,也可以通過(guò)家中的智慧屏上同家人一起分享記錄下的快樂瞬間。1.2.1

硬件互助,資源共享圖3

分布式數(shù)據(jù)管理示意圖111.2.1

硬件互助,資源共享分布式任務(wù)調(diào)度基于分布式軟總線、分布式數(shù)據(jù)管理、分布式Profile等技術(shù)特性,構(gòu)建統(tǒng)一的分布式服務(wù)管理(發(fā)現(xiàn)、同步、注冊(cè)、調(diào)用)機(jī)制,支持對(duì)跨設(shè)備的應(yīng)用進(jìn)行遠(yuǎn)程啟動(dòng)、遠(yuǎn)程調(diào)用、遠(yuǎn)程連接以及遷移等操作,能夠根據(jù)不同設(shè)備的能力、位置、業(yè)務(wù)運(yùn)行狀態(tài)、資源使用情況,以及用戶的習(xí)慣和意圖,選擇合適的設(shè)備運(yùn)行分布式任務(wù)。圖4以應(yīng)用遷移為例,簡(jiǎn)要地展示了分布式任務(wù)調(diào)度能力。典型應(yīng)用場(chǎng)景舉例:導(dǎo)航場(chǎng)景:如果用戶駕車出行,上車前,在手機(jī)上規(guī)劃好導(dǎo)航路線;上車后,導(dǎo)航自動(dòng)遷移到車機(jī)和車載音箱;下車后,導(dǎo)航自動(dòng)遷移回手機(jī)。如果用戶騎車出行,在手機(jī)上規(guī)劃好導(dǎo)航路線,騎行時(shí)手表可以接續(xù)導(dǎo)航。外賣場(chǎng)景:在手機(jī)上點(diǎn)外賣后,可以將訂單信息遷移到手表上,隨時(shí)查看外賣的配送狀態(tài)。圖4

分布式任務(wù)調(diào)度示意圖121.2.1

硬件互助,資源共享分布式連接能力提供了智能終端底層和應(yīng)用層的連接能力,通過(guò)USB接口共享終端部分硬件資源和軟件能力。開發(fā)者基于分布式連接能力,可以開發(fā)相應(yīng)形態(tài)的生態(tài)產(chǎn)品為消費(fèi)者提供更豐富的連接體驗(yàn)。分布式連接能力示意圖見圖5。圖5

分布式連接能力示意圖

分布式連接能力包含底層能力(ConnectService)和應(yīng)用層能力(AILifeClientService)。底層能力(ConnectService)涉及如下模塊:終端USB:智能終端側(cè)USB模塊,可對(duì)USB生態(tài)產(chǎn)品供電,是連接智能終端和生態(tài)產(chǎn)品的物理接口。接入管理:智能終端統(tǒng)一對(duì)外提供的接口。通信框架:統(tǒng)一管理搜網(wǎng)、信號(hào)顯示,通過(guò)接入管理模塊對(duì)外提供接口。應(yīng)用層能力(AILifeClientService)涉及如下模塊:智慧生活:生態(tài)產(chǎn)品的公共開發(fā)平臺(tái),能夠接入U(xiǎn)SB生態(tài)設(shè)備并創(chuàng)建接入卡片。USB模塊:生態(tài)配件側(cè)USB模塊,用于和智能終端USB建立物理連接。功能模塊:生態(tài)合作伙伴根據(jù)需求開發(fā)設(shè)備系統(tǒng)和功能。配件插件:生態(tài)合作伙伴基于AILifeClientService能力開發(fā)生態(tài)配件功能。131.2.2一次開發(fā),多端部署HarmonyOS提供了用戶程序框架、Ability框架以及UI框架,支持應(yīng)用開發(fā)過(guò)程中多終端的業(yè)務(wù)邏輯和界面邏輯進(jìn)行復(fù)用,能夠?qū)崿F(xiàn)應(yīng)用的一次開發(fā)、多端部署,提升了跨設(shè)備應(yīng)用的開發(fā)效率。一次開發(fā)、多端部署示意圖見圖6。其中,UI框架支持使用ArkTS、JS、Java語(yǔ)言進(jìn)行開發(fā),并提供了豐富的多態(tài)控件,可以在手機(jī)、平板、智能穿戴、智慧屏、車機(jī)上顯示不同的UI效果。采用業(yè)界主流設(shè)計(jì)方式,提供多種響應(yīng)式布局方案,支持柵格化布局,滿足不同屏幕的界面適配能力。圖6

一次開發(fā)、多端部署示意圖141.2.3統(tǒng)一OS,彈性部署HarmonyOS通過(guò)組件化和小型化等設(shè)計(jì)方法,支持多種終端設(shè)備按需彈性部署,能夠適配不同類別的硬件資源和功能需求。支撐通過(guò)編譯鏈關(guān)系去自動(dòng)生成組件化的依賴關(guān)系,形成組件樹依賴圖,支撐產(chǎn)品系統(tǒng)的便捷開發(fā),降低硬件設(shè)備的開發(fā)門檻。支持各組件的選擇支持組件功能集的配置支持組件間依賴的關(guān)聯(lián)15支持各組件的選擇01支持各組件的選擇(組件可有可無(wú)):根據(jù)硬件的形態(tài)和需求,可以選擇所需的組件。支持組件功能集的配置02支持組件內(nèi)功能集的配置(組件可大可?。焊鶕?jù)硬件的資源情況和功能需求,可以選擇配置組件中的功能集。例如,選擇配置圖形框架組件中的部分控件。支持組件間依賴的關(guān)聯(lián)03支持組件間依賴的關(guān)聯(lián)(平臺(tái)可大可小):根據(jù)編譯鏈關(guān)系,可以自動(dòng)生成組件化的依賴關(guān)系。例如,選擇圖形框架組件,將會(huì)自動(dòng)選擇依賴的圖形引擎組件等。第1章HarmonyOS簡(jiǎn)介1.1初識(shí)HarmonyOS1.2HarmonyOS技術(shù)特性1.3HarmonyOS體系構(gòu)架161.3.1技術(shù)架構(gòu)HarmonyOS整體遵從分層設(shè)計(jì),從下向上依次為:內(nèi)核層、系統(tǒng)服務(wù)層、框架層和應(yīng)用層。系統(tǒng)功能按照“系統(tǒng)>子系統(tǒng)>功能/模塊”逐級(jí)展開,在多設(shè)備部署場(chǎng)景下,支持根據(jù)實(shí)際需求裁剪某些非必要的子系統(tǒng)或功能/模塊。HarmonyOS技術(shù)架構(gòu)如下所示。內(nèi)核層系統(tǒng)服務(wù)層框架層應(yīng)用層整體遵從分層設(shè)計(jì)系統(tǒng)功能逐級(jí)展開“”171.3.2內(nèi)核層框架層應(yīng)用層內(nèi)核子系統(tǒng):HarmonyOS采用多內(nèi)核設(shè)計(jì),支持針對(duì)不同資源受限設(shè)備選用適合的OS內(nèi)核。內(nèi)核抽象層(KAL,KernelAbstractLayer)通過(guò)屏蔽多內(nèi)核差異,對(duì)上層提供基礎(chǔ)的內(nèi)核能力,包括進(jìn)程/線程管理、內(nèi)存管理、文件系統(tǒng)、網(wǎng)絡(luò)管理和外設(shè)管理等。驅(qū)動(dòng)子系統(tǒng):硬件驅(qū)動(dòng)框架(HDF)是HarmonyOS硬件生態(tài)開放的基礎(chǔ),提供統(tǒng)一外設(shè)訪問能力和驅(qū)動(dòng)開發(fā)、管理框架。內(nèi)核層分為內(nèi)核子系統(tǒng)和驅(qū)動(dòng)子系統(tǒng)框架層

為HarmonyOS應(yīng)用開發(fā)提供了ArkTS/JS/C/C++/Java等多語(yǔ)言的用戶程序框架,兩種UI框架(包括適用于ArkTS/JS語(yǔ)言的方舟開發(fā)框架即ArkUI、適用于Java語(yǔ)言的JavaUI框架),以及各種軟硬件服務(wù)對(duì)外開放的多語(yǔ)言框架API。根據(jù)系統(tǒng)的組件化裁剪程度,HarmonyOS設(shè)備支持的API也會(huì)有所不同。應(yīng)用層包括系統(tǒng)應(yīng)用和第三方非系統(tǒng)應(yīng)用。HarmonyOS的應(yīng)用由一個(gè)或多個(gè)FA(FeatureAbility)或PA(ParticleAbility)組成。其中,F(xiàn)A有UI界面,提供與用戶交互的能力;而PA無(wú)UI界面,提供后臺(tái)運(yùn)行任務(wù)的能力以及統(tǒng)一的數(shù)據(jù)訪問抽象。FA在進(jìn)行用戶交互時(shí)所需的后臺(tái)數(shù)據(jù)訪問也需要由對(duì)應(yīng)的PA提供支撐。基于FA/PA開發(fā)的應(yīng)用,能夠?qū)崿F(xiàn)特定的業(yè)務(wù)功能,支持跨設(shè)備調(diào)度與分發(fā),為用戶提供一致、高效的應(yīng)用體驗(yàn)。181.3.3系統(tǒng)服務(wù)層系統(tǒng)服務(wù)層是HarmonyOS的核心能力集合,通過(guò)框架層對(duì)應(yīng)用程序提供服務(wù)。該層包含系統(tǒng)基本能力子系統(tǒng)集、基礎(chǔ)軟件服務(wù)子系統(tǒng)集、增強(qiáng)軟件服務(wù)子系統(tǒng)集和硬件服務(wù)子系統(tǒng)集四個(gè)部分。

系統(tǒng)基本能力子系統(tǒng)集為分布式應(yīng)用在HarmonyOS多設(shè)備上的運(yùn)行、遷移等操作提供了基礎(chǔ)能力,由分布式軟總線、分布式數(shù)據(jù)管理、分布式任務(wù)調(diào)度、方舟多語(yǔ)言運(yùn)行時(shí)、公共基礎(chǔ)庫(kù)、多模輸入、AI等子系統(tǒng)組成。基礎(chǔ)軟件服務(wù)子系統(tǒng)集為HarmonyOS提供公共的、通用的軟件服務(wù),由事件通知、電話、多媒體、DFX(DesignForX)、MSDP&DV等子系統(tǒng)組成。

增強(qiáng)軟件服務(wù)子系統(tǒng)集為HarmonyOS提供針對(duì)不同設(shè)備的、差異化的能力增強(qiáng)型軟件服務(wù),由智慧屏專有業(yè)務(wù)、穿戴專有業(yè)務(wù)、IoT專有業(yè)務(wù)等子系統(tǒng)組成。

硬件服務(wù)子系統(tǒng)集為HarmonyOS提供硬件服務(wù),由位置服務(wù)、生物特征識(shí)別、穿戴專有硬件服務(wù)、IoT專有硬件服務(wù)等子系統(tǒng)組成。19第2章Java基礎(chǔ)<code/:>PHPHTML5引言本章學(xué)習(xí)目標(biāo)了解Java發(fā)展歷程和語(yǔ)言特性掌握J(rèn)ava的基礎(chǔ)數(shù)據(jù)類型,表達(dá)式,以及流程控制應(yīng)用掌握J(rèn)ava中類與對(duì)象的概念和應(yīng)用掌握J(rèn)ava的異常處理機(jī)制22第2章Java基礎(chǔ)2.1Java語(yǔ)言簡(jiǎn)介2.2結(jié)構(gòu)化程序設(shè)計(jì)2.3面向?qū)ο蠡靖拍詈蛻?yīng)用232.1.1Java語(yǔ)言概述

Java是一門流行的、跨平臺(tái)的編程語(yǔ)言,由詹姆斯·高斯林(JamesGosling)等人于1995年創(chuàng)造。它最初由SunMicrosystems開發(fā),后被Oracle繼承。Java以其可靠性、可移植性和豐富的庫(kù)而著稱,適用于從移動(dòng)應(yīng)用到企業(yè)級(jí)系統(tǒng)的各種應(yīng)用。該語(yǔ)言具有清晰簡(jiǎn)潔的語(yǔ)法,支持面向?qū)ο缶幊蹋揖邆渥詣?dòng)內(nèi)存管理的特點(diǎn)。Java的一大優(yōu)勢(shì)是其“一次編寫,到處運(yùn)行”的能力,允許在不同操作系統(tǒng)上無(wú)縫運(yùn)行。無(wú)論您是初學(xué)者還是有經(jīng)驗(yàn)的開發(fā)者,Java為您提供了廣闊的創(chuàng)作空間。Java的圖標(biāo)是一個(gè)咖啡杯,通常稱為“Java咖啡杯”或“Java杯子”。創(chuàng)始人詹姆斯·高斯林在開發(fā)Java時(shí),他們的辦公室旁邊放著一臺(tái)咖啡機(jī),咖啡成為了他們?nèi)粘9ぷ鞯囊徊糠?。詹姆斯·高斯林(JamesGosling):1955年5月19日出生,Java編程語(yǔ)言的創(chuàng)始人,加拿大計(jì)算機(jī)科學(xué)家。242.1.1Java語(yǔ)言概述Java發(fā)展簡(jiǎn)史Java語(yǔ)言發(fā)展到今天經(jīng)歷了一系列的過(guò)程:1991年,SUN公司的Green項(xiàng)目,Oak1995年,推出Java測(cè)試版1996年,JDK1.01998年,JDK1.22004年,J2SE5.0(1.5.0)Tiger老虎2014年,JavaSE8.02017年,JAVA9.02020年3月,JAVA142020年9月,JAVA152021年3月,JAVA162021年9月,JAVA172022年3月,JAVA182022年9月,JAVA192023年3月,JAVA20252.1.1Java語(yǔ)言特性Java語(yǔ)言特性跨平臺(tái)性:“一次編寫,到處運(yùn)行”的能力使得Java在不同操作系統(tǒng)上都能無(wú)縫運(yùn)行,無(wú)論是Windows、Linux還是Mac等。(Java的跨平臺(tái)性為開發(fā)者提供了一個(gè)高效、靈活且可維護(hù)的開發(fā)環(huán)境,減少了跨不同操作系統(tǒng)進(jìn)行開發(fā)的挑戰(zhàn)和復(fù)雜性。這是Java最重要的特性)面向?qū)ο螅?/p>

Java是一種面向?qū)ο蟮木幊陶Z(yǔ)言,強(qiáng)調(diào)代碼的組織和模塊化,有助于構(gòu)建可維護(hù)且可擴(kuò)展的程序。豐富的庫(kù):

Java擁有大量的標(biāo)準(zhǔn)庫(kù)和第三方庫(kù),包含了各種工具和函數(shù),方便開發(fā)者快速構(gòu)建功能豐富的應(yīng)用。安全性:

Java注重安全,提供了許多安全機(jī)制來(lái)保護(hù)程序免受惡意代碼的攻擊。多線程支持:Java提供了強(qiáng)大的多線程支持,使得開發(fā)者能夠更好地利用多核處理器和并發(fā)性能。廣泛的應(yīng)用領(lǐng)域:從移動(dòng)應(yīng)用(Android開發(fā))到大型企業(yè)級(jí)系統(tǒng),Java幾乎無(wú)處不在,為各種應(yīng)用提供了強(qiáng)大的支持。26在接下來(lái)的課程中,我們將深入探討Java的核心概念、語(yǔ)法、面向?qū)ο缶幊淘瓌t以及如何使用Java構(gòu)建各種應(yīng)用。通過(guò)學(xué)習(xí)Java,你將能夠掌握一種廣泛應(yīng)用于實(shí)際開發(fā)的強(qiáng)大工具,無(wú)論你是初學(xué)者還是有經(jīng)驗(yàn)的開發(fā)者,都將在Java的世界中找到有趣和挑戰(zhàn)的機(jī)會(huì)。讓我們一起踏上這個(gè)充滿探索的編程之旅吧!第2章Java基礎(chǔ)2.1Java語(yǔ)言簡(jiǎn)介2.2結(jié)構(gòu)化程序設(shè)計(jì)2.3面向?qū)ο蠡靖拍詈蛻?yīng)用272.2.1

變量Java中,變量是用于存儲(chǔ)和表示數(shù)據(jù)的一種基本概念。變量可以被看作是一個(gè)命名的存儲(chǔ)位置,用于存放數(shù)據(jù)值,這些數(shù)據(jù)可以是數(shù)字、文字、對(duì)象引用等。通過(guò)給變量起一個(gè)名字,我們可以在代碼中引用和操作這些數(shù)據(jù)。在Java中,變量可以分為以下三種類型:局部變量(LocalVariables):定義在方法、構(gòu)造函數(shù)或代碼塊內(nèi)部的變量。局部變量只在其定義的作用域內(nèi)有效,一旦作用域結(jié)束,局部變量的值就會(huì)被銷毀。局部變量必須在使用之前進(jìn)行初始化。publicvoidexampleMethod(){intx=4;//局部變量xSystem.out.println(x);}成員變量(InstanceVariables):定義在類內(nèi)部,但在方法之外的變量。成員變量在整個(gè)對(duì)象的生命周期內(nèi)有效,每個(gè)對(duì)象都有獨(dú)立的副本。它們的值在對(duì)象的生命周期內(nèi)保持不變,除非顯式地修改。靜態(tài)變量(StaticVariables):也稱為類變量,它們?cè)陬惣虞d時(shí)分配內(nèi)存,并在整個(gè)類的生命周期內(nèi)有效。靜態(tài)變量只有一個(gè)副本,被所有該類的實(shí)例共享。publicvoidexampleMethod(){intx=4;//局部變量xSystem.out.println(x);}publicclassExample{inty;//成員變量y}282.2.1變量命名規(guī)則:

變量名由字母、數(shù)字、下劃線(_)和美元符號(hào)($)組成,但不能以數(shù)字開頭。變量名區(qū)分大小寫,例如age和Age是不同的變量。數(shù)據(jù)類型:每個(gè)變量都必須有一個(gè)數(shù)據(jù)類型,用于定義變量可以存儲(chǔ)的數(shù)據(jù)種類和范圍。例如,整數(shù)類型、浮點(diǎn)數(shù)類型、布爾類型等。聲明與初始化:在使用變量之前,必須先聲明變量,并且通常需要初始化賦予一個(gè)初始值。未經(jīng)初始化的變量會(huì)有默認(rèn)值(例如數(shù)值類型的默認(rèn)值為0,布爾類型的默認(rèn)值為false,引用類型的默認(rèn)值為null)。作用域:變量的作用域是指變量在代碼中有效的范圍。局部變量只在聲明它的代碼塊內(nèi)部有效,成員變量在整個(gè)類中有效,靜態(tài)變量在整個(gè)類的生命周期中都有效。生命周期:變量的生命周期是指變量存在的時(shí)間段。局部變量的生命周期在其所在代碼塊執(zhí)行期間,成員變量的生命周期與對(duì)象的生命周期相同,靜態(tài)變量的生命周期在類加載和卸載期間。//聲明并初始化整數(shù)類型變量intage=25;//聲明并初始化字符串類型變量Stringname="John";//聲明并初始化布爾類型變量booleanisActive=true;//聲明引用類型變量,但尚未初始化Personperson;//聲明并初始化浮點(diǎn)數(shù)類型變量doublesalary=50000.5;以下是一些變量的示例:29Java中的變量有以下特點(diǎn):2.2.2

數(shù)據(jù)類型在Java中,數(shù)據(jù)類型用于指定變量可以存儲(chǔ)的數(shù)據(jù)的種類和范圍。Java數(shù)據(jù)類型可以分為兩大類:基本數(shù)據(jù)類型(PrimitiveDataTypes)和引用數(shù)據(jù)類型(ReferenceDataTypes)302.2.2

數(shù)據(jù)類型基本數(shù)據(jù)類型(本章重點(diǎn)介紹)基本數(shù)據(jù)類型包括布爾型、字符型、整型和浮點(diǎn)型四種

布爾類型布爾類型(boolean)用于對(duì)兩個(gè)數(shù)值通過(guò)邏輯運(yùn)算,判斷結(jié)果是“真”還是“假”。Java中用保留字

true

false

來(lái)代表邏輯運(yùn)算中的“真”和“假”。因此,一個(gè)boolean類型的變量或表達(dá)式只能是取true和false這兩個(gè)值中的一個(gè)。字符類型Java語(yǔ)言中的字符類型(char)使用兩個(gè)字節(jié)的Unicode編碼表示,它支持所有語(yǔ)言,可以使用單引號(hào)字符或者整數(shù)對(duì)char型賦值。

整數(shù)類型整數(shù)類型在Java中分為四個(gè)級(jí)別:byte、short、int和long,用于表示整數(shù)數(shù)據(jù)。整數(shù)類型在計(jì)算機(jī)內(nèi)存管理、算法設(shè)計(jì)和硬件抽象層面具有重大影響。其應(yīng)用貫穿于計(jì)算機(jī)系統(tǒng)中的底層數(shù)據(jù)存儲(chǔ)與高級(jí)數(shù)據(jù)處理。

浮點(diǎn)類型在Java中主要有float(單精度浮點(diǎn)類型)和double(雙精度浮點(diǎn)類型)兩種精度。浮點(diǎn)類型的運(yùn)算、表示和舍入涉及到數(shù)值近似和計(jì)算精度問題。312.2.2

數(shù)據(jù)類型數(shù)據(jù)類型轉(zhuǎn)換在Java中,數(shù)據(jù)類型轉(zhuǎn)換(TypeConversion)是將一個(gè)數(shù)據(jù)類型的值轉(zhuǎn)換為另一個(gè)數(shù)據(jù)類型的過(guò)程。數(shù)據(jù)類型轉(zhuǎn)換主要分為兩種類型:隱式轉(zhuǎn)換(自動(dòng)轉(zhuǎn)換)和顯式轉(zhuǎn)換(強(qiáng)制轉(zhuǎn)換)。

隱式轉(zhuǎn)換(自動(dòng)轉(zhuǎn)換):隱式轉(zhuǎn)換是指在不需要顯式指定的情況下,編譯器自動(dòng)將一個(gè)較小數(shù)據(jù)類型的值提升為較大數(shù)據(jù)類型,以確保數(shù)據(jù)不丟失。這通常發(fā)生在表達(dá)式中,其中較小的數(shù)據(jù)類型會(huì)自動(dòng)提升為較大的數(shù)據(jù)類型。publicclassImplicitConversionExample{publicstaticvoidmain(String[]args){intintValue=42;//定義一個(gè)整數(shù)變量

doubledoubleValue=intValue;//隱式轉(zhuǎn)換,將int值自動(dòng)轉(zhuǎn)換為doubleSystem.out.println("intvalue:"+intValue);//輸出整數(shù)值

System.out.println("doublevalue:"+doubleValue);//輸出隱式轉(zhuǎn)換后的double值

}}提示:本章演示文稿中所有代碼實(shí)例均已測(cè)試,讀者可根據(jù)自己實(shí)際情況自行練習(xí)。322.2.2

數(shù)據(jù)類型顯式轉(zhuǎn)換(強(qiáng)制轉(zhuǎn)換):顯式轉(zhuǎn)換是通過(guò)強(qiáng)制指定轉(zhuǎn)換的方式,將一個(gè)數(shù)據(jù)類型轉(zhuǎn)換為另一個(gè)數(shù)據(jù)類型。這可能會(huì)導(dǎo)致數(shù)據(jù)精度損失或溢出,因此需要謹(jǐn)慎使用。顯式轉(zhuǎn)換使用括號(hào)和目標(biāo)數(shù)據(jù)類型來(lái)完成。publicclassExplicitConversionExample{publicstaticvoidmain(String[]args){doubledoubleValue=3.14;//定義一個(gè)double變量

intintValue=(int)doubleValue;//顯式轉(zhuǎn)換,將double值強(qiáng)制轉(zhuǎn)換為intSystem.out.println("doublevalue:"+doubleValue);//輸出原始double值

System.out.println("intvalue:"+intValue);//輸出顯式轉(zhuǎn)換后的int值

}}需要注意以下幾點(diǎn):從較大的數(shù)據(jù)類型向較小的數(shù)據(jù)類型轉(zhuǎn)換可能會(huì)導(dǎo)致數(shù)據(jù)精度損失或截?cái)?。一些?shù)據(jù)類型之間的轉(zhuǎn)換可能會(huì)導(dǎo)致溢出,例如從一個(gè)較大的整數(shù)類型向一個(gè)較小的整數(shù)類型轉(zhuǎn)換。字符類型可以被隱式地轉(zhuǎn)換為整數(shù)類型,其值表示為對(duì)應(yīng)字符的Unicode編碼。332.2.3

表達(dá)式在Java編程中,表達(dá)式是由運(yùn)算符、操作數(shù)和變量組合而成的代碼片段,用于執(zhí)行計(jì)算并生成一個(gè)值。表達(dá)式可以包括數(shù)學(xué)運(yùn)算、邏輯運(yùn)算、條件判斷等各種操作。以下是Java中常見的表達(dá)式類型:342.2.3

表達(dá)式算術(shù)運(yùn)算符用在算術(shù)表達(dá)式中,作用和數(shù)學(xué)中的運(yùn)算符相同。下表所示為Java支持的算術(shù)運(yùn)算符。35運(yùn)算符說(shuō)明示例+加1+2-減5-3*乘20*5/求商6/4%求余數(shù)32%9++自增a++、++a--自減a--、--a2.2.3

表達(dá)式關(guān)系運(yùn)算符:也可以稱為“比較運(yùn)算符”,用于用來(lái)比較判斷兩個(gè)變量或常量的大小。關(guān)系運(yùn)算符是二元運(yùn)算符,運(yùn)算結(jié)果是boolean型。當(dāng)運(yùn)算符對(duì)應(yīng)的關(guān)系成立時(shí),運(yùn)算結(jié)果是true,否則是false。注:關(guān)系運(yùn)算符的優(yōu)先級(jí)為:>、<、>=、<=具有相同的優(yōu)先級(jí),并且高于具有相同優(yōu)先級(jí)的!=和==。關(guān)系運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符但低于算術(shù)運(yùn)算符,結(jié)合方向是自左向右。下圖所示為關(guān)系運(yùn)算符。36運(yùn)算符說(shuō)明示例==等于i==1!=不等于i!=1>

大于i>1<

小于i<1>=大于等于i>=1<=小于等于i<=12.2.3

表達(dá)式邏輯運(yùn)算符:邏輯運(yùn)算符的作用是把各個(gè)運(yùn)算的關(guān)系表達(dá)式連接起來(lái)組成一個(gè)復(fù)雜的邏輯表達(dá)式,來(lái)判斷程序中的表達(dá)式是否成立,判斷的結(jié)果是true或false。

邏輯運(yùn)算符的優(yōu)先級(jí)為:!運(yùn)算級(jí)別最高,&&運(yùn)算級(jí)別高于||。!運(yùn)算符的優(yōu)先級(jí)高于算術(shù)運(yùn)算符,而&&和||運(yùn)算則低于關(guān)系運(yùn)算符。結(jié)合方向是:邏輯非(單目運(yùn)算符)具有右結(jié)合性,邏輯與和邏輯或(雙目運(yùn)算符)具有左結(jié)合性。下圖所示為邏輯運(yùn)算符。37運(yùn)算符說(shuō)明示例!邏輯非!a&&邏輯與a&&b||邏輯或a||b2.2.4控制語(yǔ)句在Java中,控制語(yǔ)句用于控制程序的流程和執(zhí)行順序??刂普Z(yǔ)句根據(jù)不同的條件執(zhí)行不同的代碼塊。當(dāng)談到Java中的控制語(yǔ)句時(shí),可以將它們分為三個(gè)主要類別:條件語(yǔ)句、循環(huán)語(yǔ)句和跳轉(zhuǎn)語(yǔ)句。以下是對(duì)這些類別的詳細(xì)分類和描述:控制語(yǔ)句可以看成“程序員門票”條件語(yǔ)句:條件語(yǔ)句用于根據(jù)條件的真假執(zhí)行不同的代碼塊。條件語(yǔ)句可以分為if結(jié)構(gòu)和switch結(jié)構(gòu)。而if結(jié)構(gòu)又可以分為if單分支結(jié)構(gòu)、if-else雙分支結(jié)構(gòu)、if-elseif-else多分支結(jié)構(gòu)。if單分支結(jié)構(gòu)if(條件表達(dá)式){

//語(yǔ)句塊}publicclassTestIf{publicstaticvoidmain(String[]args){//聲明一個(gè)整數(shù)變量并賦值為10intnumber=10;//使用if語(yǔ)句判斷變量值是否為正數(shù)if(number>0){System.out.println("這個(gè)數(shù)是正數(shù)。");}}}382.2.4控制語(yǔ)句if-else雙分支結(jié)構(gòu)if(條件表達(dá)式){//語(yǔ)句塊1}else{

//語(yǔ)句塊2}//導(dǎo)入需要使用的Java工具包中的Scanner類importjava.util.Scanner;publicclassTestIf02{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);//提示用戶輸入考試成績(jī)System.out.print("請(qǐng)輸入您的考試成績(jī):");intscore=scanner.nextInt();//使用if-else語(yǔ)句判斷是否及格 if(score>=60){System.out.println("恭喜,您已經(jīng)及格!");}else{System.out.println("很抱歉,您未及格。請(qǐng)努力復(fù)習(xí)再次參加考試。");}scanner.close();}}392.2.4控制語(yǔ)句switch語(yǔ)句switch結(jié)構(gòu)是一種用于根據(jù)表達(dá)式的值從多個(gè)選項(xiàng)中進(jìn)行選擇的控制流結(jié)構(gòu)。它可以在特定的情況下執(zhí)行不同的代碼塊,從而提供了一種更優(yōu)雅和緊湊的方式來(lái)處理多重條件。尤其是當(dāng)需要根據(jù)多個(gè)情況執(zhí)行不同的操作時(shí)switch語(yǔ)句可以用來(lái)替代一系列嵌套的if-else語(yǔ)句,從而使代碼更清晰和易于維護(hù)。switch(表達(dá)式){casevalue1://執(zhí)行語(yǔ)句1

break;casevalue2://執(zhí)行語(yǔ)句2

break;//更多的case...default://執(zhí)行語(yǔ)句N}402.2.4控制語(yǔ)句switch語(yǔ)句尤其是當(dāng)需要根據(jù)多個(gè)情況執(zhí)行不同的操作時(shí)switch語(yǔ)句可以用來(lái)替代一系列嵌套的if-else語(yǔ)句,從而使代碼更清晰和易于維護(hù)。下面通過(guò)一個(gè)判斷奇數(shù)偶數(shù)的例子來(lái)展示switch和if-else嵌套語(yǔ)句的替代。publicclassSwitchExample{publicstaticvoidmain(String[]args){intnumber=5;if(number%2==0){System.out.println("這是一個(gè)偶數(shù)。");}elseif(number%2==1){System.out.println("這是一個(gè)奇數(shù)。");}else{System.out.println("無(wú)效的數(shù)字。");}}}412.2.4控制語(yǔ)句switch語(yǔ)句下面用switch語(yǔ)句來(lái)實(shí)現(xiàn)奇數(shù)偶數(shù)判斷的要求publicstaticvoidmain(String[]args){intnumber=5;switch(number%2){case0:System.out.println("這是一個(gè)偶數(shù)。");break;case1:System.out.println("這是一個(gè)奇數(shù)。");break;default:System.out.println("無(wú)效的數(shù)字。");}}}422.2.4控制語(yǔ)句switch語(yǔ)句在這個(gè)特定的奇偶數(shù)判斷案例中,使用switch語(yǔ)句能夠更清晰地表示兩種情況(偶數(shù)和奇數(shù)),并減少了代碼的復(fù)雜性。相比之下,使用if-else語(yǔ)句可能會(huì)需要更多的嵌套,可能導(dǎo)致代碼難以閱讀和維護(hù)??勺x性:使用switch語(yǔ)句時(shí),我們可以明確地看到在每種情況下執(zhí)行的操作。這使得代碼更易讀,特別是在有多個(gè)情況需要處理的情況下。邏輯清晰:switch語(yǔ)句可以將邏輯分支整齊地列出,消除了多個(gè)嵌套的if-else語(yǔ)句可能引起的混亂。可維護(hù)性:使用switch語(yǔ)句可以將相關(guān)的操作集中在一起,從而提高了代碼的可維護(hù)性。潛在的性能優(yōu)化:在某些情況下,編譯器可以對(duì)switch語(yǔ)句進(jìn)行優(yōu)化,使其比一系列嵌套的if-else語(yǔ)句更高效。代碼冗余:switch語(yǔ)句通常比嵌套的if-else語(yǔ)句更緊湊,可以減少代碼的冗余。43使用switch相對(duì)于if-else的優(yōu)點(diǎn):2.2.4控制語(yǔ)句循環(huán)語(yǔ)句:Java中采用的循環(huán)語(yǔ)句與C語(yǔ)言中的循環(huán)語(yǔ)句相似,主要有while、do-while和for語(yǔ)句。它們的共同點(diǎn)是根據(jù)給定條件來(lái)判斷是否繼續(xù)執(zhí)行指定的程序段(循環(huán)體)。如果滿足執(zhí)行條件,就繼續(xù)執(zhí)行循環(huán)體,否則就不再執(zhí)行循環(huán)體,結(jié)束循環(huán)語(yǔ)句。While語(yǔ)句while語(yǔ)句是Java最基本的循環(huán)語(yǔ)句,是一種先判斷的循環(huán)結(jié)構(gòu),可以在一定條件下重復(fù)執(zhí)行一段代碼。該語(yǔ)句需要判斷一個(gè)測(cè)試條件,如果該條件為真,則執(zhí)行循環(huán)語(yǔ)句(循環(huán)語(yǔ)句可以是一條或多條),否則跳出循環(huán)。while(條件表達(dá)式){//循環(huán)體}publicclassWhileLoopExample{publicstaticvoidmain(String[]args){intcount=1;while(count<=10){System.out.println(count);count++;}}}442.2.4控制語(yǔ)句do-while語(yǔ)句do-while循環(huán)語(yǔ)句也是Java中廣泛應(yīng)用的循環(huán)語(yǔ)句,它由循環(huán)條件和循環(huán)體組成,但它與while語(yǔ)句略有不同。do-while循環(huán)語(yǔ)句的特點(diǎn)是先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。do{//循環(huán)體}while(條件表達(dá)式);452.2.4控制語(yǔ)句do-while語(yǔ)句以下是一個(gè)do-while循環(huán)的簡(jiǎn)單例子:在這個(gè)例子中,程序會(huì)要求用戶輸入一個(gè)數(shù)字,然后會(huì)輸出用戶輸入的數(shù)字。循環(huán)會(huì)一直運(yùn)行,直到用戶輸入了數(shù)字0,此時(shí)循環(huán)會(huì)終止,程序會(huì)輸出"程序已退出!"并結(jié)束運(yùn)行。importjava.util.Scanner;publicclassDoWhileExample{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);intnumber;do{System.out.print("請(qǐng)輸入一個(gè)數(shù)字(輸入0退出):");number=scanner.nextInt();System.out.println("您輸入的數(shù)字是:"+number);}while(number!=0);System.out.println("程序已退出!");}}462.2.4控制語(yǔ)句for語(yǔ)句for語(yǔ)句是一種在程序執(zhí)行前就要先判斷條件表達(dá)式是否為真的循環(huán)語(yǔ)句。假如條件表達(dá)式的結(jié)果為假,那么它的循環(huán)語(yǔ)句根本不會(huì)執(zhí)行。for語(yǔ)句通常使用在知道循環(huán)次數(shù)的循環(huán)中。for(初始化;條件;迭代因子){//循環(huán)體}472.2.4控制語(yǔ)句do-while語(yǔ)句以下是一個(gè)使用for循環(huán)的簡(jiǎn)單示例,用于從1加到10。在這個(gè)示例中,循環(huán)從1開始,每次遞增1,直到i的值大于10。在每次循環(huán)迭代中,將i的值加到sum變量中。最終,程序?qū)⒂?jì)算并輸出從1加到10的和。publicclassForLoopExample{publicstaticvoidmain(String[]args){intsum=0;

for(inti=1;i<=10;i++){sum+=i;//將i加到sum中

}

System.out.println("從1加到10的和為:"+sum);}}482.2節(jié)作業(yè)隨堂練習(xí)(教師用于課堂測(cè)試或課后作業(yè))練習(xí)題1:

編寫一個(gè)Java程序,要求用戶輸入一個(gè)整數(shù),然后判斷該整數(shù)是否為偶數(shù),如果是偶數(shù),則輸出"偶數(shù)",否則輸出"奇數(shù)"。練習(xí)題2:

編寫一個(gè)Java程序,打印出從1到100之間所有的素?cái)?shù)。素?cái)?shù)是只能被1和自身整除的正整數(shù)。練習(xí)題3:

編寫一個(gè)Java程序,使用循環(huán)結(jié)構(gòu)計(jì)算并輸出1到10之間所有整數(shù)的階乘。例如,5的階乘為5!=5x4x3x2x1=120。練習(xí)題4:

編寫一個(gè)Java程序,模擬一個(gè)猜數(shù)字游戲。隨機(jī)生成一個(gè)1到100之間的整數(shù),然后讓用戶猜測(cè),根據(jù)用戶的猜測(cè)給予提示,直到用戶猜對(duì)為止。提示可以是"猜的數(shù)字太小了"或"猜的數(shù)字太大了"。練習(xí)題5:

編寫一個(gè)Java程序,使用循環(huán)計(jì)算并輸出前10個(gè)斐波那契數(shù)列的值。斐波那契數(shù)列的前兩個(gè)數(shù)為1,從第三項(xiàng)開始,每一項(xiàng)都是前兩項(xiàng)之和。49第2章Java基礎(chǔ)2.1Java語(yǔ)言簡(jiǎn)介2.2結(jié)構(gòu)化程序設(shè)計(jì)2.3面向?qū)ο蠡靖拍詈蛻?yīng)用502.3.1

類與對(duì)象面向?qū)ο缶幊?ObjectOrientedPrograming)面向?qū)ο缶幊蹋∣bject-OrientedProgramming,簡(jiǎn)稱OOP)是一種編程范式,它將現(xiàn)實(shí)世界的事物抽象為對(duì)象,并通過(guò)對(duì)象之間的交互來(lái)實(shí)現(xiàn)程序邏輯。Java是一種支持面向?qū)ο缶幊痰木幊陶Z(yǔ)言,它強(qiáng)烈地倡導(dǎo)和支持面向?qū)ο蟮乃枷搿ava的面向?qū)ο缶幊烫匦园ㄒ韵聨讉€(gè)方面:類與對(duì)象:類是對(duì)象的模板,定義屬性和方法。封裝:隱藏實(shí)現(xiàn)細(xì)節(jié),確保安全性和模塊性。繼承:重用代碼,擴(kuò)展現(xiàn)有類的功能。多態(tài):同一方法名可在不同類中具有不同實(shí)現(xiàn)。抽象類和接口:定義方法簽名、繼承、多接口實(shí)現(xiàn)。構(gòu)造方法:初始化對(duì)象,在創(chuàng)建時(shí)自動(dòng)調(diào)用。包:組織類,避免命名沖突。關(guān)鍵字:

class、extends、implements、new等。OOP(ObjectOrientedProgramming)512.3.1

類與對(duì)象類與對(duì)象類和對(duì)象是面向?qū)ο缶幊痰膬蓚€(gè)核心概念,它們?cè)诶斫夂蜆?gòu)建程序時(shí)起著重要作用。類(Class):類是一種抽象的模板或藍(lán)圖,用于定義對(duì)象的屬性(成員變量)和行為(方法)。它是一種用戶自定義的數(shù)據(jù)類型,用于描述具有相似特征的對(duì)象的共同屬性和方法。類定義了對(duì)象的結(jié)構(gòu),但并不實(shí)際占用內(nèi)存。在類的定義中,你可以指定類名、成員變量、方法和構(gòu)造方法等。類也可以派生自其他類,從而繼承其屬性和方法。類的定義并不創(chuàng)建實(shí)際的對(duì)象,只有在創(chuàng)建對(duì)象時(shí),內(nèi)存中才會(huì)分配空間。對(duì)象(Object):對(duì)象是類的實(shí)例,它是類的具體實(shí)體,具有類定義的屬性和方法。通過(guò)創(chuàng)建對(duì)象,你可以在程序中操作和使用類中定義的屬性和方法。對(duì)象是真正占用內(nèi)存空間的實(shí)體。對(duì)象具有狀態(tài)(屬性)和行為(方法),每個(gè)對(duì)象的狀態(tài)可以不同。例如,如果有一個(gè)類叫做"Person",那么"Alice"和"Bob"可以是"Person"類的兩個(gè)對(duì)象,它們具有不同的名字和年齡。522.3.1

類與對(duì)象類與對(duì)象對(duì)于一個(gè)類來(lái)說(shuō),有三種成員:屬性field、方法method、構(gòu)造器constructor。屬性(field)屬性用于定義該類或該類對(duì)象包含的數(shù)據(jù)或者說(shuō)靜態(tài)特征。屬性作用范圍是整個(gè)類體。在定義成員變量時(shí)可以對(duì)其初始化,如果不對(duì)其初始化,Java使用默認(rèn)的值對(duì)其初始化。屬性定義格式:[修飾符]屬性類型屬性名=[默認(rèn)值];方法(method)方法用于定義該類或該類實(shí)例的行為特征和功能實(shí)現(xiàn)。方法是類和對(duì)象行為特征的抽象。面向?qū)ο笾?,整個(gè)程序的基本單位是類,方法是從屬于類和對(duì)象的。方法定義格式:[訪問修飾符][修飾符]返回類型方法名([參數(shù)列表]){//方法體return返回值;//如果有返回值的話}532.3.1

類與對(duì)象類與對(duì)象請(qǐng)看下面這個(gè)示例,演示了如何定義一個(gè)名為"Person"的類,并創(chuàng)建對(duì)象來(lái)表示個(gè)人信息。借助圖片信息理解類與對(duì)象的區(qū)別與關(guān)聯(lián)//定義一個(gè)表示個(gè)人信息的類classPerson{//成員變量

Stringname;//姓名

intage;//年齡

//構(gòu)造方法:初始化姓名和年齡

publicPerson(Stringname,intage){=name;this.age=age;}

//方法:打印個(gè)人信息

publicvoiddisplayInfo(){System.out.println("Name:"+name);System.out.println("Age:"+age);}}542.3.1

類與對(duì)象類與對(duì)象publicclassMain{publicstaticvoidmain(String[]args){//創(chuàng)建兩個(gè)Person對(duì)象

Personperson1=newPerson("Alice",25);Personperson2=newPerson("Bob",30);

//調(diào)用對(duì)象的方法來(lái)顯示個(gè)人信息

System.out.println("Person1:");person1.displayInfo();

System.out.println("\nPerson2:");person2.displayInfo();}}程序功能:這個(gè)示例程序用于創(chuàng)建并展示個(gè)人信息。先定義了一個(gè)名為Person的類,其中包括姓名和年齡等成員變量。構(gòu)造方法用于初始化個(gè)人對(duì)象的屬性。這個(gè)示例展示了如何使用類和對(duì)象來(lái)展示個(gè)人信息,以及如何通過(guò)方法來(lái)訪問對(duì)象的屬性。552.3.1節(jié)作業(yè)56練習(xí)題1:創(chuàng)建一個(gè)簡(jiǎn)單的類:要求創(chuàng)建一個(gè)名為Student的類,表示學(xué)生對(duì)象。在類中定義一些基本屬性(如姓名、年齡、學(xué)號(hào))和方法(如獲取學(xué)生信息、計(jì)算年齡等)。在main方法中創(chuàng)建幾個(gè)學(xué)生對(duì)象,調(diào)用類的方法演示其功能。練習(xí)題2:銀行賬戶類:要求創(chuàng)建一個(gè)名為BankAccount的類,表示銀行賬戶。定義屬性(賬戶號(hào)、余額)和方法(存款、取款、查詢余額)。編寫main方法,創(chuàng)建賬戶對(duì)象,演示存款、取款和查詢余額操作。練習(xí)題3:圖書館管理系統(tǒng):要求設(shè)計(jì)一個(gè)簡(jiǎn)單的圖書館管理系統(tǒng)。創(chuàng)建Book類,定義圖書的屬性(書名、作者、ISBN等)。創(chuàng)建Library類,模擬圖書館,包括添加圖書、借閱圖書、歸還圖書等方法。在main方法中模擬圖書館操作,展示圖書管理功能。2.3.2繼承與封裝繼承繼承是面向?qū)ο缶幊讨械囊环N機(jī)制,允許一個(gè)類(稱為子類或派生類)從另一個(gè)類(稱為父類、基類或超類)繼承屬性和方法。在Java中,繼承通過(guò)使用關(guān)鍵字extends來(lái)實(shí)現(xiàn)。繼承語(yǔ)法格式:以下是Java中繼承的基本概念和用法:父類和子類關(guān)系:一個(gè)類可以被其他類繼承,被繼承的類稱為父類或基類,繼承它的類稱為子類或派生類。繼承關(guān)系的聲明:在子類的類聲明中,使用extends

關(guān)鍵字后面跟著父類的名稱來(lái)聲明繼承關(guān)系。子類繼承了父類的非私有屬性和方法。classChildClassextendsParentClass{//子類的定義}繼承的主要優(yōu)勢(shì)在于代碼重用和擴(kuò)展。通過(guò)將通用的屬性和方法放在父類中,可以減少代碼重復(fù),并且在子類中添加特定的屬性和方法。繼承還支持多態(tài)性,允許不同子類對(duì)象以統(tǒng)一的方式進(jìn)行操作。572.3.2繼承與封裝讓我們通過(guò)一個(gè)簡(jiǎn)單的生物類別的例子:包括動(dòng)物(Animal)、鳥(Bird)和哺乳動(dòng)物(Mammal)這個(gè)例子將演示如何使用繼承來(lái)表示各種生物之間的關(guān)系。//基類Animal,表示動(dòng)物classAnimal{

//eat()方法表示動(dòng)物吃東西voideat(){System.out.println("Animaliseating");}

//sleep()方法表示動(dòng)物睡覺voidsleep(){System.out.println("Animalissleeping");}}創(chuàng)建Animal類:這是基類,它包含了所有動(dòng)物共有的屬性和方法。其中eat()和sleep()方法表示了動(dòng)物吃東西和睡覺的行為。582.3.2繼承與封裝Bird類:這是Animal類的派生類,通過(guò)繼承,它自動(dòng)獲得了eat()和sleep()方法。此外,它添加了一個(gè)自己的方法fly(),表示鳥的飛行行為。Mammal類:這也是Animal類的派生類,同樣繼承了eat()和sleep()方法。除此之外,它還定義了一個(gè)自己的方法run(),表示哺乳動(dòng)物奔跑的行為。//派生類Bird,繼承自AnimalclassBirdextendsAnimal{

//fly()方法表示鳥飛行

voidfly(){System.out.println("Birdisflying");}}//派生類Mammal,繼承自AnimalclassMammalextendsAnimal{

//run()方法表示哺乳動(dòng)物奔跑

voidrun(){System.out.println("Mammalisrunning");}}592.3.2繼承與封裝Main類:這是一個(gè)主類,用于測(cè)試?yán)^承關(guān)系。在main方法中,創(chuàng)建了一個(gè)Bird對(duì)象和一個(gè)Mammal對(duì)象,然后調(diào)用它們的方法來(lái)展示繼承、多態(tài)性和方法重寫的效果。//主類Main,用于測(cè)試?yán)^承關(guān)系publicclassMain{publicstaticvoidmain(String[]args){Birdbird=newBird();bird.eat();//繼承自Animal類的方法

bird.sleep();//繼承自Animal類的方法

bird.fly();//Bird類自己的方法

Mammalmammal=newMammal();mammal.eat();//繼承自Animal類的方法

mammal.sleep();//繼承自Animal類的方法

mammal.run();//Mammal類自己的方法

}}602.3.2繼承與封裝運(yùn)行結(jié)果:AnimaliseatingAnimalissleepingBirdisflyingAnimaliseatingAnimalissleepingMammalisrunning程序說(shuō)明:輸出結(jié)果驗(yàn)證了繼承、多態(tài)性和方法重寫的概念:Bird類繼承了Animal類的eat()和sleep()方法,并在自己的類中添加了fly()方法。當(dāng)創(chuàng)建Bird對(duì)象并調(diào)用方法時(shí),輸出表明鳥正在飛行。Mammal類同樣繼承了Animal類的eat()和sleep()方法,并添加了run()方法。當(dāng)創(chuàng)建Mammal對(duì)象并調(diào)用方法時(shí),輸出表明哺乳動(dòng)物正在奔跑。這個(gè)輸出結(jié)果展示了基類和派生類之間的繼承關(guān)系,以及在子類中添加特定方法的能力。同時(shí),這個(gè)例子也演示了多態(tài)性的概念,即不同類型的對(duì)象可以通過(guò)相同的方法名來(lái)實(shí)現(xiàn)不同的行為。612.3.2繼承與封裝封裝問題導(dǎo)入我們使用電腦時(shí),只需要按一下開關(guān)和鍵盤就可以了。有必要了解電腦內(nèi)部的結(jié)構(gòu)嗎?有必要學(xué)習(xí)內(nèi)部芯片是怎么設(shè)計(jì)的嗎?制造廠家為了方便我們使用電腦,會(huì)把復(fù)雜的內(nèi)部細(xì)節(jié)全部封裝起來(lái),只給我們暴露簡(jiǎn)單的接口。我們程序設(shè)計(jì)要追求“高內(nèi)聚,低耦合”。高內(nèi)聚就是類的內(nèi)部數(shù)據(jù)操作細(xì)節(jié)自己完成,不允許外部干涉;低耦合是僅暴露少量的方法給外部使用,盡量方便外部調(diào)用。學(xué)習(xí)完本節(jié)課程,你會(huì)對(duì)Java程序設(shè)計(jì)追求的“高內(nèi)聚,低耦合”有一個(gè)全新的認(rèn)識(shí)。622.3.2繼承與封裝封裝封裝(Encapsulation)是面向?qū)ο缶幊讨械囊粋€(gè)重要概念,它指的是將數(shù)據(jù)(屬性)和操作數(shù)據(jù)的方法組合成一個(gè)單元,并對(duì)外部隱藏其具體實(shí)現(xiàn)細(xì)節(jié)。封裝通過(guò)限制外部訪問和修改對(duì)象的內(nèi)部狀態(tài),從而提高了代碼的安全性、可維護(hù)性和靈活性。封裝的實(shí)現(xiàn)在Java中,封裝通過(guò)以下方式實(shí)現(xiàn):訪問修飾符:使用不同的訪問修飾符來(lái)控制類的成員的訪問級(jí)別。在Java中,有四種訪問修飾符:public、protected、默認(rèn)(沒有修飾符)和private。public:可以被任何類訪問,具有最高的訪問級(jí)別,對(duì)外公開類的接口。protected:可以在同一包內(nèi)的其他類訪問。子類(即繼承該類的類)也可以訪問,不論子類是否在同一包內(nèi)。默認(rèn)(無(wú)修飾符):也稱為“包訪問權(quán)限”,只能在同一包內(nèi)的其他類訪問,對(duì)于沒有指定訪問修飾符的成員,默認(rèn)即使用這種訪問級(jí)別。private:只能在同一類內(nèi)部訪問對(duì)外部類和子類都不可見。632.3.2繼承與封裝在Java中,封裝通過(guò)以下方式實(shí)現(xiàn)(接上一頁(yè))Getter和setter方法:提供公有的訪問方法(也稱為get)和設(shè)置方法(set)來(lái)訪問和修改類的私有屬性。通過(guò)這些方法,可以在外部代碼中通過(guò)方法來(lái)操作屬性,從而隱藏屬性的實(shí)際實(shí)現(xiàn)。將類的屬性聲明為私有(private)時(shí),意味著這些屬性不能直接被外部代碼訪問。但是有時(shí)候需要外部代碼能夠讀取和修改這些屬性。但要經(jīng)過(guò)一定的控制和驗(yàn)證。為了在私有屬性的基礎(chǔ)上實(shí)現(xiàn)可控制的訪問和修改,我們通常會(huì)提供公有的訪問方法(getter)和設(shè)置方法(setter)。這兩種方法都是公開的,可以被外部代碼調(diào)用。下面是對(duì)這兩種方法的解釋:Getter方法:這個(gè)方法用于獲取屬性的值。它通常以"get"開頭,后面跟著屬性的名稱,返回屬性的值。由于私有屬性無(wú)法直接訪問,所以通過(guò)getter方法將屬性的值傳遞給外部代碼。Setter方法:這個(gè)方法用于設(shè)置屬性的值。它通常以"set"開頭,后面跟著屬性的名稱,接受一個(gè)參數(shù),即要設(shè)置的屬性的新值。Setter方法允許外部代碼修改屬性的值,但在方法內(nèi)部可以進(jìn)行一些驗(yàn)證和處理,以確保屬性值的有效性。通過(guò)提供getter和setter方法,在屬性的訪問和修改過(guò)程中引入了一層控制。這樣,即使屬性是私有的,外部代碼仍然可以通過(guò)公有的方法來(lái)與屬性交互,而不會(huì)直接操作屬性的值。642.3.2繼承與封裝當(dāng)討論封裝時(shí),我們可以使用一個(gè)實(shí)際的例子來(lái)幫助理解。假設(shè)我們有一個(gè)BankAccount類,代表銀行賬戶。我們將演示如何使用封裝來(lái)確保屬性的安全性和一致性。publicclassBankAccount{

//私有屬性,存儲(chǔ)賬戶號(hào)碼和余額

privateStringaccountNumber;

privatedoublebalance;定義一個(gè)名為BankAccount的類,并在類中聲明了兩個(gè)私有屬性:accountNumber和balance在BankAccount類中構(gòu)造方法,初始化銀行賬戶對(duì)象的屬性。publicBankAccount(StringaccountNumber,doubleinitialBalance){this.accountNumber=accountNumber;if(initialBalance>=0){this.balance=initialBalance;}else{System.out.println("Initialbalancecannotbenegative.");}}652.3.2繼承與封裝//獲取賬戶號(hào)碼

publicStringgetAccountNumber(){returnaccountNumber;}//獲取賬戶余額

publicdoublegetBalance(){returnbalance;}獲取賬戶號(hào)碼和余額信息存款操作//存款操作

publicvoiddeposit(doubleamount){if(amount>0){balance+=amount;System.out.println(amount+"deposited.Newbalance:"+balance);}else{System.out.println("Invaliddepositamount.");}}662.3.2繼承與封裝取款操作//取款操作

publicvoidwithdraw(doubleamount){if(amount>0&&amount<=balance){balance-=amount;System.out.println(amount+"withdrawn.Newbalance:"+balance);}else{System.out.println("Invalidwithdrawalamount.");}}創(chuàng)建實(shí)例publicstaticvoidmain(String[]args){//創(chuàng)建銀行賬戶實(shí)例

BankAccountaccount=newBankAccount("12345",1000);System.out.println("AccountNumber:"+account.getAccountNumber());System.out.println("InitialBalance:"+account.getBalance());

//進(jìn)行存款和取款操作

account.deposit(500);account.withdraw(200);System.out.println("FinalBalance:"+account.getBalance());}}672.3.2繼承與封裝運(yùn)行結(jié)果:AccountNumber:12345InitialBalance:1000.0500.0deposited.Newbalance:1500.0200.0withdrawn.Newbalance:1300.0FinalBalance:1300.0程序說(shuō)明:當(dāng)運(yùn)行銀行賬戶案例的代碼時(shí),通過(guò)一系列操作展示了面向?qū)ο缶幊讨蟹庋b的優(yōu)勢(shì)。代碼創(chuàng)建了一個(gè)BankAccount類的實(shí)例,通過(guò)調(diào)用公有的方法進(jìn)行存款和取款操作,同時(shí)保護(hù)了賬戶的屬性安全。運(yùn)行結(jié)果顯示了賬戶號(hào)碼、初始余額、存款和取款操作后的余額變化,突顯了封裝的屬性保護(hù)和操作控制的作用。這個(gè)案例為理解封裝的概念提供了一個(gè)簡(jiǎn)單而有實(shí)際意義的示例。682.3.2節(jié)作業(yè)69作業(yè)任務(wù):繼承與封裝練習(xí)題1:?jiǎn)T工管理系統(tǒng)創(chuàng)建一個(gè)Employee基類,定義員工的屬性(姓名、工號(hào)、工資等)和方法(顯示基本信息、計(jì)算年終獎(jiǎng)等)。創(chuàng)建兩個(gè)子類,如Manager和Developer,擴(kuò)展基類,添加子類特有的屬性和方法。使用封裝,確保屬性的訪問和修改通過(guò)方法進(jìn)行。在main方法中創(chuàng)建不同類型的員工對(duì)象,演示不同職位的特性。練習(xí)題2:圖形繼承層次創(chuàng)建一個(gè)Shape基類,定義圖形的屬性和計(jì)算面積的方法。創(chuàng)建子類,如Circle、Rectangle和Triangle,重寫計(jì)算面積的方法。使用繼承和封裝,確保屬性和方法的合適訪問級(jí)別。在main方法中創(chuàng)建不同類型的圖形對(duì)象,計(jì)算并輸出各自的面積。2.3.3抽象類和接口抽象方法抽象方法(AbstractMethod):抽象方法是一種方法,它只有方法的聲明,沒有具體的實(shí)現(xiàn)代碼。在Java中,抽象方法用abstract關(guān)鍵字來(lái)修飾,它必須存在于抽象類或接口中。70定義抽象方法的格式:abstract返回類型methodName(參數(shù)列表);抽象類抽象類是一個(gè)類,可以包含抽象方法和非抽象方法。抽象類本身無(wú)法實(shí)例化,只能被用作其他類的基類。抽象類用abstract關(guān)鍵字來(lái)修飾。抽象類可以有構(gòu)造方法、成員變量和非抽象方法,同時(shí)也可以包含抽象方法的聲明。定義抽象類的格式:abstractclassClassName{//抽象方法

abstract返回類型methodName(參數(shù)列表);}2.3.3抽象類和接口抽象方法和抽象類的關(guān)系71抽象方法是抽象類的核心,它定義了子類需要提供的行為。抽象類則提供了一個(gè)通用的模板,定義了具體的屬性、方法和抽象方法的簽名,以及一些共享的實(shí)現(xiàn)。通過(guò)繼承抽象類,子類可以繼承它的屬性和非抽象方法,并且必須提供抽象方法的實(shí)現(xiàn)。抽象類的優(yōu)點(diǎn)和用途代碼復(fù)用和統(tǒng)一性:抽象類可以包含一些通用的屬性和方法,供多個(gè)子類繼承。這樣可以減少重復(fù)的代碼編寫,并確保子類之間具有一致的接口和行為。約束和規(guī)范:抽象類可以定義一些必須被子類實(shí)現(xiàn)的抽象方法,從而約束子類必須提供特定的行為。這有助于代碼的一致性和可預(yù)測(cè)性。擴(kuò)展性:通過(guò)在抽象類中添加新的抽象方法,可以方便地?cái)U(kuò)展現(xiàn)有的類層次結(jié)構(gòu),而無(wú)需修改現(xiàn)有的子類。2.3.3抽象類和接口抽象類和抽象方法舉例72通過(guò)一個(gè)簡(jiǎn)單的幾何圖形應(yīng)用程序的案例來(lái)更好地解釋抽象方法和抽象類兩個(gè)概念:通過(guò)使用抽象類和抽象方法來(lái)實(shí)現(xiàn)多個(gè)幾何圖形的面積計(jì)算首先,定義一個(gè)抽象類Shape,它包含一個(gè)抽象方法calculateArea()和一個(gè)非抽象方法printInfo():abstractclassShape{abstractdoublecalculateArea();//抽象方法,用于計(jì)算圖形的面積

voidprintInfo(){System.out.print

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論