鴻蒙應用程序開發(fā) 課件全套 第1-9章 HarmonyOS簡介-Data Ability_第1頁
鴻蒙應用程序開發(fā) 課件全套 第1-9章 HarmonyOS簡介-Data Ability_第2頁
鴻蒙應用程序開發(fā) 課件全套 第1-9章 HarmonyOS簡介-Data Ability_第3頁
鴻蒙應用程序開發(fā) 課件全套 第1-9章 HarmonyOS簡介-Data Ability_第4頁
鴻蒙應用程序開發(fā) 課件全套 第1-9章 HarmonyOS簡介-Data Ability_第5頁
已閱讀5頁,還剩570頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第1章HarmonyOS

簡介1引言本章學習目標認識

HarmonyOS了解HarmonyOS

發(fā)展歷程掌握HarmonyOS

的技術特性及體系構架2第1章HarmonyOS簡介1.1初識HarmonyOS1.2HarmonyOS技術特性1.3HarmonyOS體系構架31.1.1什么是HarmonyOS

HarmonyOS:

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

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

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

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

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

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

硬件互助,資源共享圖2

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

硬件互助,資源共享圖3

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

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

分布式任務調度示意圖121.2.1

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

分布式連接能力示意圖

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

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

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

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

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

硬件服務子系統(tǒng)集為HarmonyOS提供硬件服務,由位置服務、生物特征識別、穿戴專有硬件服務、IoT專有硬件服務等子系統(tǒng)組成。19第2章Java基礎<code/:>PHPHTML5引言本章學習目標了解Java發(fā)展歷程和語言特性掌握Java的基礎數(shù)據(jù)類型,表達式,以及流程控制應用掌握Java中類與對象的概念和應用掌握Java的異常處理機制22第2章Java基礎2.1Java語言簡介2.2結構化程序設計2.3面向對象基本概念和應用232.1.1Java語言概述

Java是一門流行的、跨平臺的編程語言,由詹姆斯·高斯林(JamesGosling)等人于1995年創(chuàng)造。它最初由SunMicrosystems開發(fā),后被Oracle繼承。Java以其可靠性、可移植性和豐富的庫而著稱,適用于從移動應用到企業(yè)級系統(tǒng)的各種應用。該語言具有清晰簡潔的語法,支持面向對象編程,且具備自動內存管理的特點。Java的一大優(yōu)勢是其“一次編寫,到處運行”的能力,允許在不同操作系統(tǒng)上無縫運行。無論您是初學者還是有經驗的開發(fā)者,Java為您提供了廣闊的創(chuàng)作空間。Java的圖標是一個咖啡杯,通常稱為“Java咖啡杯”或“Java杯子”。創(chuàng)始人詹姆斯·高斯林在開發(fā)Java時,他們的辦公室旁邊放著一臺咖啡機,咖啡成為了他們日常工作的一部分。詹姆斯·高斯林(JamesGosling):1955年5月19日出生,Java編程語言的創(chuàng)始人,加拿大計算機科學家。242.1.1Java語言概述Java發(fā)展簡史Java語言發(fā)展到今天經歷了一系列的過程:1991年,SUN公司的Green項目,Oak1995年,推出Java測試版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語言特性Java語言特性跨平臺性:“一次編寫,到處運行”的能力使得Java在不同操作系統(tǒng)上都能無縫運行,無論是Windows、Linux還是Mac等。(Java的跨平臺性為開發(fā)者提供了一個高效、靈活且可維護的開發(fā)環(huán)境,減少了跨不同操作系統(tǒng)進行開發(fā)的挑戰(zhàn)和復雜性。這是Java最重要的特性)面向對象:

Java是一種面向對象的編程語言,強調代碼的組織和模塊化,有助于構建可維護且可擴展的程序。豐富的庫:

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

Java注重安全,提供了許多安全機制來保護程序免受惡意代碼的攻擊。多線程支持:Java提供了強大的多線程支持,使得開發(fā)者能夠更好地利用多核處理器和并發(fā)性能。廣泛的應用領域:從移動應用(Android開發(fā))到大型企業(yè)級系統(tǒng),Java幾乎無處不在,為各種應用提供了強大的支持。26在接下來的課程中,我們將深入探討Java的核心概念、語法、面向對象編程原則以及如何使用Java構建各種應用。通過學習Java,你將能夠掌握一種廣泛應用于實際開發(fā)的強大工具,無論你是初學者還是有經驗的開發(fā)者,都將在Java的世界中找到有趣和挑戰(zhàn)的機會。讓我們一起踏上這個充滿探索的編程之旅吧!第2章Java基礎2.1Java語言簡介2.2結構化程序設計2.3面向對象基本概念和應用272.2.1

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

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

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

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

布爾類型布爾類型(boolean)用于對兩個數(shù)值通過邏輯運算,判斷結果是“真”還是“假”。Java中用保留字

true

false

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

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

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

數(shù)據(jù)類型數(shù)據(jù)類型轉換在Java中,數(shù)據(jù)類型轉換(TypeConversion)是將一個數(shù)據(jù)類型的值轉換為另一個數(shù)據(jù)類型的過程。數(shù)據(jù)類型轉換主要分為兩種類型:隱式轉換(自動轉換)和顯式轉換(強制轉換)。

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

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

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

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

數(shù)據(jù)類型顯式轉換(強制轉換):顯式轉換是通過強制指定轉換的方式,將一個數(shù)據(jù)類型轉換為另一個數(shù)據(jù)類型。這可能會導致數(shù)據(jù)精度損失或溢出,因此需要謹慎使用。顯式轉換使用括號和目標數(shù)據(jù)類型來完成。publicclassExplicitConversionExample{publicstaticvoidmain(String[]args){doubledoubleValue=3.14;//定義一個double變量

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

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

}}需要注意以下幾點:從較大的數(shù)據(jù)類型向較小的數(shù)據(jù)類型轉換可能會導致數(shù)據(jù)精度損失或截斷。一些數(shù)據(jù)類型之間的轉換可能會導致溢出,例如從一個較大的整數(shù)類型向一個較小的整數(shù)類型轉換。字符類型可以被隱式地轉換為整數(shù)類型,其值表示為對應字符的Unicode編碼。332.2.3

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

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

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

大于i>1<

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

表達式邏輯運算符:邏輯運算符的作用是把各個運算的關系表達式連接起來組成一個復雜的邏輯表達式,來判斷程序中的表達式是否成立,判斷的結果是true或false。

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

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

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

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

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

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

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

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

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

編寫一個Java程序,使用循環(huán)計算并輸出前10個斐波那契數(shù)列的值。斐波那契數(shù)列的前兩個數(shù)為1,從第三項開始,每一項都是前兩項之和。49第2章Java基礎2.1Java語言簡介2.2結構化程序設計2.3面向對象基本概念和應用502.3.1

類與對象面向對象編程(ObjectOrientedPrograming)面向對象編程(Object-OrientedProgramming,簡稱OOP)是一種編程范式,它將現(xiàn)實世界的事物抽象為對象,并通過對象之間的交互來實現(xiàn)程序邏輯。Java是一種支持面向對象編程的編程語言,它強烈地倡導和支持面向對象的思想。Java的面向對象編程特性包括以下幾個方面:類與對象:類是對象的模板,定義屬性和方法。封裝:隱藏實現(xiàn)細節(jié),確保安全性和模塊性。繼承:重用代碼,擴展現(xiàn)有類的功能。多態(tài):同一方法名可在不同類中具有不同實現(xiàn)。抽象類和接口:定義方法簽名、繼承、多接口實現(xiàn)。構造方法:初始化對象,在創(chuàng)建時自動調用。包:組織類,避免命名沖突。關鍵字:

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

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

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

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

Stringname;//姓名

intage;//年齡

//構造方法:初始化姓名和年齡

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

//方法:打印個人信息

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

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

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

//調用對象的方法來顯示個人信息

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

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

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

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

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

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

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

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

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

//私有屬性,存儲賬戶號碼和余額

privateStringaccountNumber;

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

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

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

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)建實例publicstaticvoidmain(String[]args){//創(chuàng)建銀行賬戶實例

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

//進行存款和取款操作

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

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

voidprintInfo(){System.out.print

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論