Java程序設計與應用-全套電子課件完整版ppt整本書電子講義最全教學教程整套課件_第1頁
Java程序設計與應用-全套電子課件完整版ppt整本書電子講義最全教學教程整套課件_第2頁
Java程序設計與應用-全套電子課件完整版ppt整本書電子講義最全教學教程整套課件_第3頁
Java程序設計與應用-全套電子課件完整版ppt整本書電子講義最全教學教程整套課件_第4頁
Java程序設計與應用-全套電子課件完整版ppt整本書電子講義最全教學教程整套課件_第5頁
已閱讀5頁,還剩492頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第1章

Java語言概述

06二月20232學習目的:了解程序設計語言的發展歷史了解Java語言的特色和應用背景了解Java虛擬機、Java的運行環境和Java編程語言開發環境初步掌握簡單Java程序的創建、編譯和運行學習重點面向對象的程序設計語言

Java虛擬機Java的運行環境Java程序的創建、編譯和運行06二月20233第1章

Java語言概述

本章提要:

1.程序設計語言概述2.Java語言簡介3.

Java語言概述

4.簡單Java程序的創建、編譯及運行步驟06二月202341.1程序設計語言概述

1.1.1計算機程序設計方法和語言隨著計算機硬件與通訊技術的發展,計算機應用領域越來越廣泛,應用規模也越來越大,程序設計不再是一、兩個程序員可完成的任務,在這種情況下編寫程序不再片面追求高效率,而是綜合考慮程序的可靠性、可擴展性、可重用性和可理解性等因素。

程序設計方法是獨立于具體程序設計語言的一門技術。由于程序設計通常離不開程序設計語言作為工具,所以容易混淆程序設計方法與程序設計語言的概念。程序設計語言的設計目的主要是為了支持某種程序設計方法。06二月20235早期的程序設計早期的高級程序設計語言有FORTROM、COBOL、BASIC等。這一時期由于追求程序的高效率,程序員過份依賴技巧與天份,不太注重程序的結構,。一個典型問題是程序中的控制隨意跳轉,即不加限制地使用goto語句,這樣的程序對閱讀者來說是難以理解的,程序員也難以修改程序。結構化的程序設計隨著程序規模與復雜性的不斷增長,20世紀60年代誕生了結構化程序設計方法。結構化程序設計方法的主要技術是自頂向下、逐步求精,采用單入口/單輸出的控制結構。這一程序設計方法的代表語言是Pascal、C、Ado等。06二月20236

自頂向下是一種分解問題的技術,與控制結構有關。逐步求精指對結構化程序進行分解,最終使其成為三種基本控制結構的組合。結構化程序設計的結果是一個程序最終由若干過程組成,每一個過程完成一個明確的功能。面向對象程序設計

雖然結構化程序設計提高了軟件生產率和軟件質量,但隨著程序規模與復雜性的增長,程序中的數據結構變得與這些數據上的操作同樣重要。在大型結構化程序中,一個數據結構可能由許多個過程來處理,修改數據結構將影響到所有相關的過程。在由幾百個過程組成的成千上萬行的結構化程序中,這種情況變得相當麻煩并且容易產生錯誤。

06二月20237

20世紀80年代興起的面向對象程序設計方法在結構化程序設計的基礎上提出了一種新的設計思路,最重要的改變是程序圍繞被操作的數據來設計,而不是圍繞操作本身。面向對象程序設計以類作為構造程序的基本單位,具有封裝、數據抽象、繼承、多態化等特點。較有影響的面向對象程序設計語言有Simula、C++、Java等。Java語言是在C++語言基礎上發展起來的一種適合分布式計算的新型面向對象程序設計語言,也是目前推廣最快的程序設計語言。Java語言將面向對象、平臺無關性、穩定性與安全性、多線程等特征集于一身,為用戶提供了一個良好的程序設計環境,特別適合因特網的應用開發。與當前迅速發展的因特網應用緊密結合是Java語言成功的關鍵所在。

06二月202381.1.2

計算機程序設計方法和語言面向對象與面向過程的區別

早期的編程語言如Fortran語言和C語言基本上都是面向過程的語言,主要是采用數學語言方式編程的語言,其編程的主要思路專注于算法的實現。

傳統的面向過程的編程在描述問題時,由兩部分組成:數據:描述實體狀態的數據結構;過程:操作這些狀態數據的程序和步驟。

面向過程編程的一個顯著特點是數據與程序的分開。數據是靜止的東西,不會自行變化,必須通過過程操作來改變數據,因此,函數調用在面向過程編程中被大量使用。06二月20239

針對程序結構不清晰而無法維護改進的局面。面向對象編程提出了一種全新的思路,讓計算機語言結構像人類思維方式一樣簡單和清晰。面向對象的軟件開發中將世界上的事物均看成對象,任一對象有兩個特征:行為與狀態。每個對象可以通過自身的行為來改變自己的狀態。在面向對象的世界中,通過對象間的協作與交互來運作。由于將對象的操作封閉在對象內,外部要與對象進行交互只能通過給對象發送“消息”,這個消息實際上就是調用對象的某個行為方法,消息中還包括方法的參數。06二月202310面向對象程序設計的特性封裝性

面向對象的第一個原則是把數據和該數據的操作都封裝在一個類中,比如說筆記本電腦就是一個類。筆記本電腦這個類有許多屬性,有些是靜態的(數據),比如:顯示屏的亮度,本身的重量;有些是動態的(對數據的操作),比如:可以按下組合鍵“ctrl+F4”或“ctrl+F5”來調整顯示器的亮度,可以卸掉它的外掛光驅來減輕它的重量。

對象是類的一個實例化結果,對象具有類所描述的所有的屬性以及方法。比如不同品牌、不同樣式的筆記本電腦之間的共同屬性就是它們所屬的類——筆記本電腦類的屬性。只不過類是抽象的東西,而對象是具體的,對象具有它隸屬類的所有屬性,包括靜態的和動態的。06二月202311

每個對象都有自己的存儲空間,可容納其他對象,或者說通過封裝現有的對象,可以產生新型對象。因此,盡管對象的概念非常簡單,但是經過封裝以后卻可以在程序中達到任意高的復雜程度。

每個對象都屬于某個類。根據語法,每個對象都是某個“類”的實例。一個類的最重要的特征就是“能將什么消息發給它?”,也就是類本身有哪些操作。面向對象程序設計就是設計好相關的類,類中有靜態的域,和動態的方法。繼承性繼承是在類、子類、以及對象之間自動地共享屬性和方法的機制。類的上層可以有父類、下層可以有子類,形成一種層次結構。一個類將直接繼承其父類的屬性和行為06二月202312,而且繼承還具有傳遞性,因此,它還將間接繼承所有祖先類的屬性和行為。

繼承最主要的優點是重復使用性,通過繼承可以無限繁衍出更多的類,這樣的結果可讓軟件的開發加速,同時可達到程序共享的好處。通過繼承可以直接繼承系統提供的或他人寫作的類,并加以改寫,進而得到功能的不斷擴充。

繼承的另一個優點是在于接口的一致性。當超類繁衍出許多子類時,它的行為接口通過繼承可以傳給其所有子類。因此可以通過統一的行為接口去訪問不同的子類對象的方法,但不同子類中行為的具體實現可能時不一樣的。06二月202313多態性多態是指在表示特定功能時,有多種不同的形態或實現方法。常見的多態形式有兩種:方法的重載:即在同一個類中某個方法有多種形態,其方法名相同,但參數不同,所以也稱參數多態。方法的覆蓋:在子類中重新定義一個與父類有相同形態的方法,這樣,在子類中將覆蓋從父類繼承來的那個方法。多態為描述客觀事物提供了極大的能動性。參數多態提供了方法的多種使用形態,方便使用者的調用;而覆蓋多態則使得用戶可以用同樣的方式對待不同的對象,不同的對象可以用它們自己的方式響應同一消息。用戶可以通過父類去引用子類的對象,執行方法時則表現出每個子類對象各自的行為。

06二月202314抽象性這里的抽象有兩個層次的含義,一是體現在類的層次設計中,高層類是底層類的抽象表述。類層次設計體現著不斷抽象的過程。第二體現在類與對象之間的關系上,類是一個抽象的概念,而對象是具體的。面向對象編程的核心是設計類,但實際運行操作的是對象。類是對象的模板,對象的創建是以類為基礎。同一類創建的對象具有共同的屬性,但屬性值不同。06二月2023151.2程序設計語言概述Java語言有下面一些特點:簡單性Java語言是一種面向對象的語言,它通過提供最基本的方法來完成指定的任務,只需理解一些基本的概念,就可以用它編寫出適合于各種情況的應用程序。Java略去了運算符重載、多重繼承等模糊的概念,并且通過實現自動垃圾收集大大簡化了程序設計者的內存管理工作。另外,Java也適合于在小型機上運行。

1.2.1Java語言的特色06二月202316面向對象Java語言的設計集中于對象及其接口,它提供了簡單的類機制以及動態的接口型。對象中封裝了它的狀態變量以及相應的方法,實現了模塊化和信息隱藏;而類則提供了一類對象的原型,并且通過繼承機制,子類可以使用父類所提供的方法,實現了代碼的復用。分布性

Java是面向網絡的語言。通過它提供的類庫可以處理TCP/IP協議,用戶可以通過URL地址在網絡上很方便地訪問其它對象。

06二月202317魯棒性Java在編譯和運行程序時,都要對可能出現的問題進行檢查,以消除錯誤的產生。它提供自動垃圾收集來進行內存管理,防止程序員在管理內存時容易產生的錯誤。通過集成的面向對象的例外處理機制,在編譯時,Java提示出可能出現但未被處理的例外,幫助程序員正確地進行選擇以防止系統的崩潰。另外,Java在編譯時還可捕獲類型聲明中的許多常見錯誤,防止動態運行時不匹配問題的出現。06二月202318安全性

用于網絡、分布環境下的Java必須要防止病毒的入侵。Java不支持指針,一切對內存的訪問都必須通過對象的實例變量來實現,這樣就防止程序員使用“特洛伊”木馬等欺騙手段訪問對象的私有成員,同時也避免了指針操作中容易產生的錯誤。體系結構中立

Java解釋器生成與體系結構無關的字節碼指令,只要安裝了Java運行時系統,Java程序就可在任意的處理器上運行。這些字節碼指令對應于Java虛擬機中的表示,Java解釋器得到字節碼后,對它進行轉換,使之能夠在不同的平臺運行。

06二月202319可移植性

與平臺無關的特性使Java程序可以方便地被移植到網絡上的不同機器。同時,Java的類庫中也實現了與不同平臺的接口,使這些類庫可以移植。另外,Java編譯器是由Java語言實現的,Java運行時系統由標準C實現,這使得Java系統本身也具有可移植性。解釋執行Java解釋器直接對Java字節碼進行解釋執行。字節碼本身攜帶了許多編譯時信息,使得連接過程更加簡單。高性能和其它解釋執行的語言如BASIC、TCL不同,Java字節碼的設計使之能很容易地直接轉換成對應于特定CPU的機器碼,從而得到較高的性能。06二月202320多線程

多線程機制使應用程序能夠并行執行,而且同步機制保證了對共享數據的正確操作。通過使用多線程,程序設計者可以分別用不同的線程完成特定的行為,而不需要采用全局的事件循環機制,這樣就很容易地實現網絡上的實時交互行為。動態性

Java的設計使它適合于一個不斷發展的環境。在類庫中可以自由地加入新的方法和實例變量而不會影響用戶程序的執行。并且Java通過接口來支持多重繼承,使之比嚴格的類繼承具有更靈活的方式和擴展性。06二月2023211.2.2Java的應用背景Java語言對軟件開發技術的影響Java語言將對未來軟件的開發產生影響,可從如下幾個方面考慮:軟件的需求分析:可將用戶的需求進行動態的、可視化描述,以提供設計者更加直觀的要求。而用戶的需求是各色各樣的,不受地區、行業、部門、愛好的影響,都可以用Java語言描述清楚。軟件的開發方法:由于Java語言的面向目標的特性,所以完全可以用面向對象的技術與方法來開發,這是符合最新的軟件開發規范要求的。

06二月202322Java語言的動畫效果遠比GUI技術更加逼真,尤其是利用Internet提供的巨大動畫資源空間,可以共享全世界的動態畫面的資源。軟件最終產品:用Java語言開發的軟件可以具有可視化、可聽化、可操作化的交互、動畫與動作,要它停就停,要它繼續就繼續,而這是在電影與電視播放過程中難以做到的。其它:使用Java語言對開發效益、開發價值都有比較明顯的影響。

06二月202323Java語言的應用前景

Java語言有著廣泛的應用前景,大體上可以從以下幾個方面來考慮其應用:所有面向對象的應用開發,包括面向對象的事件描述、處理、綜合等。計算過程的可視化、可操作化的軟件的開發。動態畫面的設計,包括圖形圖像的調用。交互操作的設計(選擇交互、定向交互、控制流程等)。Internet的系統管理功能模塊的設計,包括Web頁面的動態設計、管理和交互操作設計等。Intranet(企業內部網)上的軟件開發(直接面向企業內部用戶的軟件)。與各類數據庫連接查詢的SQL語句實現。其它應用類型的程序。06二月2023241.3程序設計語言簡介

用Java可寫兩種類型的程序:小程序(又叫JavaApplet)和應用程序(Javaapplicatian)。

小程序是嵌入在HTML文檔種的Java程序;而Java應用程序是從命令行運行的程序。對Java而言,Java小程序的大小和復雜性都沒有限制。由于WWW使小程序的發布十分便利,因此小程序更適合作為Internet上的應用程序。

應用程序(JavaApplication)是可以獨立運行的Java程序,有Java解釋器控制執行。Applet則不能獨立運行,而是被嵌入到Web頁中,有Java兼容瀏覽器控制執行。

06二月202325

Java程序在編譯后生成的不是某種CPU的指令碼,而是Java語言特有的字節代碼。Java字節代碼運行在Java虛擬機上。

每一個操作系統的Java解釋器是不同的,但實現Java虛擬機時相同的,這就是Java語言與平臺無關的關鍵所在。Java虛擬機由五部分組成:一組指令集、一組寄存器、一個堆棧、一個無用內存單元收集器、一個方法區域,這五個部分是Java虛擬機的邏輯抽象成分,不倚賴于任何實現技術或組織,但是它們的功能必須在真實機器上以某種來實現。Java虛擬機內存區域不倚賴實現內存的位置,也不要求連續,但要求邏輯的長度固定。

1.3.1Java的虛擬機06二月202326

Java虛擬機支持240多個字節代碼,每個字節代碼執行一種基本的CPU運算。Java語言指令集相當于Java語言程序的“匯編語言”,Java語言指令集的一條指令有一個操作碼、領個或多個操作數。操作數指定實施的操作,操作數是操作碼所需要的參數。Java語言的操作碼均為一個字節長,操作數沒有限制。

Java虛擬機的寄存器用于保存機器的運行狀態。Java虛擬機寄存器有四種:Java語言程序計數器;指向操作數棧頂端的指針;指向當前執行方法的執行環境的指針;指向當前執行方法局部變量的區第一個變量的指針。Java虛擬機是用堆棧來處理數據傳遞的,它不定義或使用寄存器來傳遞或接受參數。目的是為了保證指令集的簡潔性和實現時的高效性。06二月202327

Java虛擬機的堆棧有三個區域:局部變量區、執行環境區和操作數區。Java虛擬機的堆棧是運行時刻動態分配的對象存儲區域。Java語言可以進行自動的無須內存單元的收集,程序無須顯示釋放占有的內存空間,無須內存單元自動回收的算法倚賴于虛擬機最終實現的硬件環境。

Java虛擬機的方法區是編譯后的代碼區域,包含方法代碼、符號表等。

06二月2023281.3.2Java的運行環境的配置Java不僅提供了一個豐富的語言和運行環境,而且還提供了一個免費的Java開發工具集(JavaDevelopersKits,簡稱JDK,也稱SDK)。編程人員和最終用戶可以利用這些工具來開發Java程序或調用Java內容。

SUN的Java不僅提了一個豐富的語言和運行環境,而且還提了一個免費的Java開發工具集(SDK)。開發人員和最終用戶可以利用這個工具來開發Java程序。SDK簡單易學,可以通過任何文本編輯器編寫Java源文件,然后在DOS狀況下利通過javac命令將Java源程序編譯成字節碼,通過Java命令來執行編譯后的Java文件。

06二月202329SDK的另一個顯著特點是隨著Java(J2EE、J2SE以及J2ME)版本的升級而升級。但它的缺點也是非常明顯的就是從事大規模企業級Java應用開發非常困難,不能進行復雜的Java軟件開發,也不利于團體協同開發。建立Java開發環境JDK開發環境中常用工具介紹在Java環境中的Java工具主要有:*appletviewer小應用程序瀏覽器*java解釋器*javac編譯器*javah頭文件生成器*javadocAPI文檔生成器*javap類文件反匯編器*sdbJava語言調試器06二月2023301.3.1Java的虛擬機目前可供開發人員選擇得Java語言開發工具有很多,例如:Sun公司的SDK(命令行方式的)Java語言編輯器,用Java語言開發的圖形化界面的JavaWorkShop,Symmatec公司的VisualCafé,微軟公司的VisualJ++,Borland公司的JBuilder等等。開發人員選擇開發工具可以根據以下原則:開發界面是否友好,編譯效率是否高,是否有可視化的調試器,能否在瀏覽器中調試Java語言小程序,能否為使用者完成一些重復的勞動等。06二月2023311.4簡單Java程序的創建、編譯及運行步驟Java是解釋型的高級編程語言,所以Java程序的開發通常需要編寫源程序、編譯生成字節碼和運行幾個過程。編寫源程序編寫源程序是程序開發的第一步,我們只需要簡單的文字編輯器,如Edit或記事本或集成開發環境中的編輯窗口,利用這些文字編輯器將源程序錄入到計算機中,形成一個文件保存起來。注意必須要保證Java程序是無格式的純文本文件。

06二月202332編譯和運行HelloWorld應用程序我們利用Java的編譯器系統軟件,一般采用Sun公司提供的javac.exe。

如果編譯成功,則生成以類命名、以class為后綴的字節碼文件;否則報告錯誤。要運行一個編譯好的Java字節碼程序,還需要調用Java的解釋器軟件java.exe。

06二月2023331.5本章小結本章介紹了Java語言的產生和特點。給出了兩種Java程序,Java應用程序和JavaApplet程序的調試步驟。JavaApplication在命令方式下進行調試,而JavaApplet在瀏覽器的環境下運行。Java語言是一門純面向對象的編程語言。

面向對象編程的思路認為程序都是對象的組合,因此要克服面向過程編程的思路,直接按照對象和類的思想去組織程序,面向對象所具有的封裝性、繼承性、多態性等特點使其具有強大的生命力。

06二月202334Sun公司為全世界Java開發人員提供了一套免費的軟件開發包Java2SDK,也稱為JDK,它不僅是Java的開發平臺,還是Java的運行平臺。Java源程序存放在.java文件中,可以通過任意一個文本編輯器編輯產生,源程序經過“javac”命令編譯過后,就生成了相應的.class文件。第2章

Java語言基礎

06二月202336學習目的:了解Java程序的構成

了解Java的基本數據類型

了解Java的運算符與表達式

了解數組的創建、定義和使用掌握Java流程控制語句

初步掌握java簡單程序的編寫學習重點:

Java的基本數據類型、運算符與表達式

一維數組和多維數組的創建、定義和使用While、do-while和for語句的使用06二月202337第2章

Java語言基礎

本章提要:

1.Java程序的構成2.Java的基本數據類型3.Java的運算符與表達式

4.數組5.Java流程控制語句

06二月2023382.1Java程序的構成Java源程序是由類定義組成的,每個程序中可以定義若干個類,但是只有一個類是主類。在JavaApplication中,這個主類是指包含main方法的類;在JavaApplet中,這個主類是一個系統類Applet的子類,是Java程序執行的入口點。在同一個Java源程序中定義的若干類之間沒有嚴格的邏輯關系要求,但它們通常是在一起協同工作的,每一個類都可能需要使用其他類中定義的靜態屬性或方法

Java程序中定義類使用關鍵字class,每個類的定義有類頭定義和類體定義兩部分組成。類體部分用來定義靜態屬性和方法這兩種類的成員,其中方法類似于其他高級語2.1.1一個Java源程序06二月202339言的函數,而靜態屬性則類似于變量。類頭部分除了聲明類名之外,還可以說明類的繼承特性,當一個類被定義為是另一個已經存在的類(稱為這個類的父類)的子類時,它就可以從其父類中繼承一些以定義好的類成員而不必自己重復編碼。Java程序的每一條Java語句都由分號結束,其構成應該符合Java的語法規則。類和方法中的所有語句應該使用一對大括號括起。Java程序的每一個類中,除了靜態屬性聲明語句之外,其他的執行具體操作的語句只能存在于類方法的大括號之中,而不能跳出方法孤立地直接書寫在類中。

06二月202340

注解是指程序中用來說明程序的文字。它是為了方便程序員理解,維護該程序,并不參與程序的編譯執行。Java的注解有3種:單行注解符號“//”后面的單行內容不參與編譯;多行注解用“/*…*/”包含起來的一段文本,中間可以換行;用“/**…*/”包含起來的,它可以用javadoc工具來生成HTML形式的開發文檔。也可以在寫程序的時候將某些代碼注釋掉以便調試程序。2.1.1Java的程序注解06二月2023412.1.3Java的的標識符與關鍵字

關鍵字是Java語言保留的字符串,表示特殊的指令,而不能用來做為程序中的標識符。標識符是用來代表程序中一個元素的名字,比如變量、函數、類等。在Java中標識符由字母、下劃線、“$”和數字組成,只能以字母、“$”或者“_”開頭,中間不能有空格,并且不能使用關鍵字。但可以包含關鍵字作為它的名字的一部分。在Java中中文字符也是字符,所以也可以作標識符。Java的標識符區分大小寫,而且沒有長度的限制,可以為標識符取任意長度的名字。標識符的名字要有一定的意義,讓人一看標識符就知道這個變量、函數的大概作用,即常說的編碼規范。

06二月202342在Java語言中,有三種基本類型,即簡單類型(整型、浮點型、字符型、布爾型等)、數組類型(整型、浮點型、字符型、布爾型等)和復合類型(類、接口)。可以看出Java的數據類型與C語言相近,其不同之處在于:首先,Java的各種數據類型占用固定的內存長度,與具體的軟硬件平臺環境無關;其次,Java的每種數據類型都對應一個缺省的數值,使得這種數據類型的變量的取值總是確定的。這兩點分別體現了Java的跨平臺特性和安全穩定性。

2.2基本數據類型06二月202343在Java語言中有四種整數類型,每種類型可以使用關鍵字byte,short,int和long中的任意一個進行聲明。所有Java編程語言中的整數類型都是帶符號的數字,不存在無符號整數。整數類型的文字可使用十進制、八進制和十六進制表示。首位為“0”表示八進制的數值,首位為“0x”表示十六進制的數值。整數類型默認為int類型,如在其后有一個字母“L”表示一個long值(也可以用小寫“l”)。

2.2.1整型

06二月202344

使用char類型可表示單個字符,字符是用單引號括起來的一個字符,如‘a’,‘B’等。Java中的字符型數據是16位無符號型數據,它表示Unicode集,而不僅僅是ASCII集。

與C語言類似,Java也提供轉義字符,以反斜杠“\”開頭,將其后的字符轉變為另外的含義。值得注意的一點是,用雙引號引用的文字,就是我們平時所說的字符串類型不是原始類型,而是一個類string,它被用來表示字符序列。字符本身符合Unicode標準且上述char類型的轉義字符適用于string。2.2.2字符型

06二月2023452.2.3浮點型

在Java語言中有兩種浮點數類型;float和double。如果一個數包括小數點或指數部分,或者在數字后帶有字母F或f(float)、D或d(double),則該數為浮點數。如果不明確指明浮點數的類型,浮點數默認為double。

在兩種類型的浮點數中,float為32位(單精度),double為64位(雙精度)。也就是說double類型的浮點數具有更高的精度。

2.2.4邏輯型邏輯類boolean的數據類型有兩種文字值:true和false。在Java語言中boolean類型只允許使用boolean值,在整數類型和boolean類型之間無轉換計算。06二月2023462.2.5變量與常量在Java中,不同類型的數據既可以以常量的形式出現,也可以以變量的形式出現。常量就是指在程序執行期間其值不能發生變化的數據,常量是固定的。

變量的值是可以變化的,它的定義包括變量名、變量類型和作用域幾個部分。注意以下幾點:(1)變量名必須是一個合法的標識符。變量名應具有一定的含義,以增加程序的可讀性。(2)變量類型可以為前面所說的任意一種數據類型。(3)聲明一個變量的同時也就指明了變量的作用域。變量的作用域指明可訪問該變量的一段代碼。(4)變量的聲明中多個變量間用逗號隔開。(5)在Java程序中聲明變量后,需要給該變量賦值。可以用賦值語句來初始化變量——任何變量都不能沒有初始值,否則無法通過編譯。06二月202347

Java語言是支持兩個不同數值類型之間的強制類型轉換的,一個變量從一個類型強制轉換到另一個類型,轉化后的變量要受到新類型的制約。

類型轉換語法格式:(type)variableName

類型變量名

2.2.6數據類型的轉換06二月202348自動類型轉換整型、浮點型、字符型數據可以混合運算。在運算中不同類型的數據先轉化為同一種類型然后進行計算。自動類型轉換原則是從在機器中占位(bit)少的類型向占位多的類型方向進行轉換。強制類型轉換在Java語言中強制類型轉換是指從在機器中占位多的類型向占位少的類型方向進行轉換,例如int類型轉換成byte類型。強制類型轉換需要使用類型轉換語法格式,但是有些類型是不允許轉換成另一種類型的,例如boolean類型不能轉換成int等類型。06二月2023492.3運算符與表達式

Java語言的運算符(operator)指明對操作數所進行的運算,運算符按照操作數的數目來劃分為單目運算符(例如~、++)、雙目運算符(例如+、>)、三目運算符(例如?:)。基本運算符包括賦值運算符、算術運算符、關系運算符、邏輯運算符、位運算符、條件運算符等。Java語言的表達式是由標識符、數據和運算符等的組合而構成的,它基本上和C\C++語言的表達式一樣。06二月2023502.3.1賦值

賦值運算符“=”把一個數據賦給另一個變量。Java語言支持簡單算術運算符和賦值運算符的作用在賦值運算符兩側的類型不一致的情況下,如果左側變量的數據類型的級別高,則就把右側的數據轉換為與左側相同的高級數據類型,然后賦值給左側的變量。否則需要使用強制類型轉換運算符。

在賦值符“=”前加上其他運算符,即構成擴展賦值運算符。用擴展賦值運算符可表示為:varoperator=expression06二月2023512.3.2算術運算算術運算是針對數值類型操作數進行的運算。根據需要參與運算的操作數的數目要求,可將算術運算符分為雙目運算符和單目運算符兩種。雙目算術運算符雙目運算符有:+、-、*、/、%五種。要注意“/”運算符對于與整數和浮點數的運算結果是不同的。取模運算符“%”一般用于整數運算,它是用來得到余數部分。單目算術運算符變量的自增與自減和++與—出現在該變量的前后位置無關。無論是++x還是x++均表示x要增1,且表達式的值與運算符的位置有關。06二月2023522.3.3關系運算關系運算符也稱為比較運算符,是用于比較兩個數據之間的大小關系的運算符。關系運算結果是布爾值(true或false)。2.3.4邏輯運算邏輯運算是針對布爾型數據進行的邏輯判斷運算,運算的結果仍然是布爾型量。常用的邏輯運算符有:與(AND)、或(OR)、非(NOT)。06二月202353

2.3.5位運算位運算是對操作數以二進制比特位為單位進行的操作運算,位運算的操作數和結果都是整型量。移位運算符移位運算符是將某一變量所包含的各比特位按指定方向移動指定的位數,移位運算符通過對第一個運算對象向左移位或向右移位來對數據執行位操作,移動的位數由右邊的操作數決定,移位的方向取決于運算符本身。按位邏輯運算位運算符&、|、~、^分別提供了基于位的與、或、求反、異或操作。其中異或是指對應的兩位數值不同時,結果為1,否則為0。

06二月2023542.3.6其他運算幾點說明:條件運算符是唯一的一個三目運算符,其結構如下:條件?表達式1:表達式2其含義是如果條件的計算結果為真,則結果為表達式1的計算結果,否則為表達式2的計算結果。instanceof用來決定第一個運算對象是否為第二個運算對象的一個實例。06二月2023552.3.7運算符的優先級運算符的優先級決定了表達式中執行不同運算的先后順序,在運算符優先級相同時,運算的進行次序取決于運算符的結合性。運算符的結合性分為左結合和右結合,左結合就是按照從左向右的次序計算表達式,而右結合就是按照從右到左的次序計算表達式。

06二月2023562.4數組

Java語言中,數組是一種最簡單的復合數據類型。數組的主要特點如下:數組是相同數據類型的元素的集合;數組中的各元素是有先后順序的,連續存放在內存之中;每個數組中的元素用整個數組的名字和它在數組中的位置(稱為下標)表達。06二月2023572.4.1數組聲明、創建、初始化聲明數組聲明數組是定義一個數組的名稱、維數和數組元素的類型。有兩種定義格式:格式1:數組元素類型數組名[];格式2:數組元素類型[]數組名;其中數組元素的類型可以是基本類型,也可以是類或接口。創建數組數組聲明只是定義了數組名和類型,并未指定元素的個數。與變量一樣,數組的每個元素需要占用存儲空間,因此必須通過某種方式規定數組的大小,進而確定數組需要的空間。給已聲明的數組分配空間可采用如下格式:

數組名=new數組元素類型[數組元素個數]

06二月202358也可以在聲明數組的同時給數組規定空間,一旦數組創建以后,數組就有了固定長度的結構,數組中各元素通過下標來區分,下標從0開始,下標最大值為數組元素的個數減1。當數組的元素類型為基本類型時,在創建存儲空間時將按照默認規定給各元素賦初值。數組的初始化

給數組元素分配空間和賦初值可以采取以下方式:聲明數組時給數組一個初值表,格式如下:

類型數組名[]={初值表};所有的數組都有一個屬性length,它代表了數組元素的個數。使用數組時,要注意下標不要超出范圍。如果下標超出范圍,則運行時會產生“數組訪問越界異常”。06二月2023592.4.2數組使用在方法調用中,數組也可以作為方法參數來傳遞。但要注意數組是屬于引用類型的參數傳遞,也就是在方法中對虛參數組的操作會影響實參數組。在Java語言應用程序的main方法中有一個字符串數組參數,該數組中存放所有的命令行參數,命令行參數是給Java語言應用程序提供數據的手段之一,它跟在命令行運行的主類名之后,各參數之間用空格分隔。使用命令行參數有利于提高應用程序的通用性。如果命令行參數中有引號,則兩個引號之間的字符系列為一個參數,空格作為參數的分隔符。如果引號不匹配,則從最后一個引號到行尾的所有字符將作為一個參數。06二月2023602.4.2多維數組Java語言中,多維數組被看作數組的數組,多維數組的定義是通過對一維數組的嵌套來實現的。即用數組的數組來定義多維數組。多維數組中最常用的是二維數組,下面主要以二維數組為例介紹多維數組的使用。聲明數組

二維數組的聲明與一維數組類似,如下所示:格式1:數組元素類型數組名[][]格式2:數組元素類型[][]數組名;06二月202361二維數組的創建和初始化為二維數組創建存儲空間有兩種方式:直接為每個一維數組分配空間;從最高維開始,按照由高到低的順序為每一維數據分配空間Java語言中,由于把二維數組看作是數組的數組,不要求二維數組中每一維數組的大小相同。要獲取數組的行數,可以通過如下方式獲得:數組名.length要獲取數組的列數則要先確定行,再通過如下方式獲取列數:數組名[行標].length在二維數組創建空間時,如果元素是基本類型,系統將按照默認規則賦初值;如果元素類型為其他引用類型,則其所有元素為未賦初值狀態(null)。但可以在數組定義時同時進行初始化。06二月2023622.5流程控制語句流程控制語句是用來控制程序中各語句執行順序的語句,使程序設計中非常關鍵和基本的部分。流程控制語句可以把單個的語句組合成有意義的、能完成一定功能的小模塊。最主要的流程控制方式是結構化程序設計中規定的三種基本流程結構。2.5.1結構化程序設計的三種基本流程結構化程序設計原則是公認的面向過程編程應遵循的原則,它使得程序段的邏輯結構清晰、層次分明,有效地改善了局部程序段的可讀性和可靠性,保證了程序質量,提高了程序開發的效率。06二月202363結構化程序設計的最基本原則是:任何程序都是可以由三種基本流程結構構成,即順序結構、分支結構和循環結構。06二月202364三種流程結構的主要特點是:均為單入單出結構,每種結構僅有一個入口點,結構執行完畢后,僅有一個出口點。順序結構和選擇結構為開放式結構,執行完后立即退出;而循環結構為封閉式結構,只要滿足條件則反復執行結構內的語句。三種基本結構可以相互嵌套。06二月2023652.5.2順序結構順序結構是三種結構中最簡單的一種,即語句按照書寫的順序依次執行。從宏觀上來看,整個程序就是一個順序結構。2.5.3選擇結構Java中的分支結構可以由兩種選擇語句來實現,一個是實現雙選擇的if語句,另一個是實現多分支的switch開關語句。06二月202366if語句if語句的一般形式是:if(條件表達式)語句塊;//if分支

else

語句塊;//else分支塊其中條件表達式用來選擇判斷程序的流程走向。在程序的實際執行過程中,如果條件表達式的取值為真,則執行if分支的語句塊,否則執行else分支的語句塊。在編寫程序時,也可以不書寫else分支,此時若條件表達式的取值為假,則繞過if分支直接執行if語句后的其他語句。有時也會用到if-else復合結構。但要注意else字句不能單獨作為語句使用,它必須和if配對使用。

06二月202367switch語句switch語句是多分支的開關語句,它的一般格式如下:switch(表達式){case判斷值1:語句塊1;//分支1case判斷值2:語句塊2;//分支2……case判斷值n:語句塊n;//分支ndefault:語句塊n+1//分支n+1}

switch語句執行時,首先計算表達式的值,這個值必須是整型或字符型,同時應與各個case分支的判斷值的類型相一致。計算出表達式的值之后,將它先與第一個case分支的判斷值相比較。若相同,則程序轉入第一個case分06二月202368支的語句塊;否則,再將表達式的值與第二個分支相比較……依此類推。如果表達式的值與任何一個case分支都不相同,則轉而執行最后的default分支;在default分支不存在的情況下,則跳出整個switch語句。各個case和default出現的次序不影響執行的結果。

需要注意各個case后面的常量不能有相同的值。還有各個語句塊可以有多條語句,不必使用大括號。switch語句也允許嵌套。還要注意的是,switch語句的每一個case判斷,都只負責指明流程分支的入口點,而不負責指定分支的出口點,分支的出口點需要編程時用相應的跳轉語句來標明。06二月2023692.5.4循環結構循環結構是利用循環語句來實現的。循環語句是在一定條件下反復執行一段代碼,被反復執行的程序段稱為循環體。Java語言中提供的循環語句有三種:while語句、do-while語句、for語句。

06二月202370while語句while語句的一般形式是:

while(條件表達式)

循環體while語句的執行時,首先檢查表達式的值是否為真,若為真,則執行循環體,然后繼續判斷是否繼續循環,直到表達式的值為假,直到表達式的值為假,執行后續語句。循環體通常是一個組合語句,也可以是單個語句。

while循環的特點是“先判斷,后執行”。如果條件已開始就不滿足,則循環執行為0次。另外,在循環體中通常通過執行某個操作來改變循環條件,如果循環條件不改變,則循環會陷入死循環中。在程序設計中要避免死循環。06二月202371do-while語句如果需要在任何情況下都先執行一遍循環體,則可以采用do-while循環,它的格式如下:do{

循環體}while(條件表達式)do-while循環的特點是:“先執行,后判斷”,在執行時,先執行循環體的語句,在檢查表達式,若表達式的值為真,則繼續執行循環體,否則,結束循環,執行后續語句。與while循環相比,循環體至少要執行一次。06二月202372for語句

for語句一般用于事先能夠確定循環次數的場合,其格式為:

for(控制變量設定初值;循環條件;迭代部分)循環體for語句執行時,首先執行初始化操作,然后判斷終止條件是否滿足,如果滿足,則執行循環體中的語句,最后通過執行迭代部分給控制變量增值。完成一次循環后,重新判斷終止條件。使用for循環要注意一下幾點:初始化、終止條件以及迭代部分都可以為空(但分號不能少),三者均為空時,相當于一個無限循環。在初始化部分和迭代部分可以使用逗號表達式,來進行多個操作。06二月2023732.5.5跳轉語句循環嵌套三種循環語句可以自身嵌套,也可以相互嵌套。嵌套將循環分為內外兩層,外層循環每循環一次,內層循環要執行一圈。注意編寫嵌套循環時,不能出現內外循環的結構交叉現象。break語句在switch語句中,break語句已經得到應用。在各類循環語句中,break語句也提供了一種方便的跳出循環的方法。它有兩種使用形式:

06二月202374

break//不帶標號,從break直接所在處的循環體中跳轉出來

break標號名

//帶標號,跳出標號所指的代碼塊,執行塊后的下一條語句給代碼塊加標號的格式如下:BlockLabel:{codeBlock}continue語句continue語句用來結束本次循環,跳過循環體中下面尚未執行的語句,接著進行終止條件的判斷,以決定是否繼續循環。對于for語句,在進行終止條件的判斷前,還要先執行迭代語句。它有兩種形式:continue//不帶標號,終止當前一輪的循環,繼續下一輪循環continue標號

//帶標號,跳轉到標號所指示的外層循環中06二月2023752.6本章小結本章是Java語言程序設計的基礎,該章主要是對程序的組成元素和邏輯進行介紹。Java語言中的數據類型有簡單數據類型和復合數據類型兩種,其中簡單數據類型包括整數類型、浮點數類型、字符類型和布爾類型;復合數據類型包括類、接口和數組。表達式是由運算符和操作數組成的符號序列,對一個表達式進行運算時,要按照運算符的優先順序從高到低進行,同級的運算符則按照結合性決定運算次序。06二月202376

數組是具有相同類型元素的有序集合,數組的創建分為定義、分配內存以及初始化等階段。通過下標變量訪問數組中的元素。經常用循環語句來控制對數組元素的訪問,但要注意訪問不要越界。條件語句、循環語句和跳轉語句是Java語言中常用的控制語句。對這些語句的正確理解和運用非常重要。程序設計的關鍵是要將算法思路轉化為可實現的語句。第三章類和對象

06二月202378學習目的:了解面向對象基本概念

掌握類的創建和使用

掌握對象的創建與使用了解參數的傳遞

了解匿名對象

學習重點:掌握類的創建和使用

掌握對象的創建與使用06二月202379第三章類和對象

本章提要:面向對象基本概念類的創建和使用對象的創建與使用參數的傳遞匿名對象

06二月2023803.1面向對象的程序設計方法概述

3.1.1抽象

抽象是人們解決問題的主要手段,也是面向對象程序設計解決實際問題法寶之一。所謂抽象就是指從眾多的事物面向對象程序設計標志著程序設計思想發展到一個新的高度,它用一種更符合人們認識客觀世界的思維方式進行程序設計:相對于面向過程的程序設計以研究問題的解決過程為主體,面向對象編程是以對象為主體,使編程富于創造性,提高了程序的可重用性,簡化了編程過程,同時也使程序更易于維護。06二月202381中舍棄個別的、非本質的屬性,抽出共同的、本質的屬性的過程。是面向對象程序設計的核心概念。用面向對象編程解決現實世界的問題時,首先是利用抽象技術將現實世界中的各種實體,歸納總結出共性的東西形成一類實體的基本特征。這些特征包括屬性和行為,這些本質屬性和方法的有機組合,就是面向對象方法中的類。3.1.2封裝

封裝性是面向對象編程的基本特性之一,它通過封裝隱蔽了對象的內部實現細節。對象的封裝有兩個方面:06二月202382一方面表示對象的屬性和方法是不可分割的整體。對象的屬性和方法封裝為一體具有重要的意義,因為它反映了對象同時具有了客觀事物的靜態特征和動態行為相統一的客觀規律,使軟件對客觀事物的描述更接近人類表述;而過去的面向過程的編程語言都是將功能和數據相分離,使軟件對客觀事物的描述存在偏差,很難自然地用語言表達客觀事物的對應關系。另一方面,封裝還表示對象內部細節的隱蔽性。對內部細節的隱蔽性反映了事物客觀的相對獨立性,這樣既可以防止外界的干擾,又可以降低復雜性。在java語言中,對象、類和包逐層封裝,為管理大量的對象和類提供了方便,也增強了語言的安全性。隱藏了內部細節也使得java的使用者和設計者分離,使用者只需用接口去滿足軟件重用的策略,可以降低軟件開發成本,縮短開發周期,是軟件的開發和維護得到根本性的改善。06二月202383訪問對象,而不必知道對象的內部細節。從軟件工程的角度講,封裝也符合模塊化設計原則,滿足軟件重用的策略,可以降低軟件開發成本,縮短開發周期,是軟件的開發和維護得到根本性的改善。

3.1.3

繼承面向對象程序設計的另一重要特點是類的繼承性。繼承是讓一個類成為另一個類的子類,子類繼承父類的所有特性,并可以擴充自己的特性。這種關系為共享數據和操作提供了一種良好的機制。繼承提高了軟件的重用性、可用性和界面的一致性。根據繼承的特性,可以將繼承分為如下兩種主要形式:06二月202384(1)直接繼承和間接繼承。如果類c的定義直接繼承于類b,則稱c直接繼承于b,且b是c的直接父類;如果又有b類又直接繼承于a類,則可稱c類間接繼承于a類。間接繼承體現了繼承關系的可傳遞性。(2)單繼承和多繼承。如果一個類只有一個直接父類,則稱該關系為單繼承;如果一個類有多于一個以上的父類,則稱該繼承關系為多繼承。Java語言只支持單繼承,而不支持多繼承。

3.1.4

多態多態性也是面向對象編程的一個特性,它反映了現實世界中謀類事物中的每個實體,都具有一些不同于其它實體的某些方面,也是針對于類中有相似功能的06二月202385不同方法以同一方法名來定義。這樣,可以用相同的方式調用不同的同名方法。Java中通過方法的重寫和方法重載類實現多態。3.2類

類是組成java程序的基本要素,也是java程序設計的重要思想表現。作為程序的基本要素,類封裝了某個對象范疇的狀態和方法,可以看作定義對象的模板。3.2.1類聲明類聲明的最一般格式為:[類修飾符]class類名[extends父類名][implements[,接口名]06二月202386{…//類體}其中,[]中的元素表示可選項。大括號對“{}”及之間的內容為類體。類修飾符表示類的性質,主要是對于訪問權限的限定。類的修飾符主要有:

l

Public公共類修飾符。表示可以被相同包中的類繼承或訪問,而不同包中的類也可以通過import引用后再繼承或訪問。l

Final終結類修飾符。這將在第五章介紹。l

Abstract抽象類修飾符。它沒有方法的實現,也沒有構造方法。不能用new運算符實例化。不能被繼承。也將在第五章進行詳細介紹。06二月202387class表示類聲明的開始,class為關鍵字,用來定義類。“class類名”部分用來聲明類。類名必須符合java對標識符的命名標準,如果類名使用拉丁字母,習慣上首字母使用大寫;類名為容易識別的關系可用多個單詞復合而成,此時習慣每個單詞首字母大寫。關鍵字extends表示類繼承了某個父類,父類名必須是java標準類名或程序本身已定義過的類名。關鍵字implements表示繼承某個接口,若有多個接口則接口間用逗號隔開。3.2.2類體

類是創建對象的模板,因此它應該能夠描述一類事物共有的屬性和功能,這個描述過程由類體實現。類聲明之后的一對大括號“{”、“}”以及它們之間的內容稱06二月202388做類體,大括號之間的內容稱做類體的內容。類體的內容由兩部分構成:一部分是變量的定義,用來刻畫事物的屬性;另一部分是方法的定義,用來描述事物的功能。例子3.1:定義一個People類,類體內容的變量定義部分定義了1個double類型變量“身高”、1個布爾類型變量“性別”、兩個個字符串類型變量“姓名”和“職業”,和一個方法“人物簡介”。classPeople{double身高;//定義變量部分

booblean性別=true;//定義變量時可以同時進行賦值

String姓名,職業;

publicvoid人物間介()//方法定義

{

System.out.println(“個人基本資料:”+姓名+性別+身高+職業);}}06二月202389當然,上述類的定義還可以有別的屬性,如“婚否”等,也可以有別的方法,如“業余愛好”等。特別注意的是:在變量定義部分可以將變量定義部分可以和變量的賦值同時進行,但不可以如下這樣做:classPeople{double身高;//定義變量部分

booblean性別;//定義變量和賦值分開進行

性別=true;

…因為,加下畫線的語句屬于對變量操作語句,而不是定義語句。所有變量的操作語句只能放在方法種進行。06二月2023903.2.4類的變量上一節提到類體分為變量定義和方法兩部分。變量除了在類體變量定義部分進行定義外,還可以在方法內部定義;另外,成員變量又可以分為靜態變量和實例變量。1)成員變量的定義格式[修飾符]變量類型變量名=初值;其中,變量名應為合法的標識符,盡量做到見名知意;變量類型通常指變量的基本數據類型。其中變量類型和變量名兩項不可以省略。有時候某些類的實例也會作為類的成員變量,對象成員的定義格式如下:類名對象名=new類名([參數表]);大家可以類比一下普通變量和對象定義的關系。06二月202391

1)變量的修飾符變量的修飾符有進行訪問控制的修飾符和非訪問控制的修飾符兩種,主要的訪問控制修飾符有public、protected等,這些修飾符主要在繼承等訪問時進行訪問權限的控制,將在第五章進行詳細介紹;非訪問控制符主要有static、final等,將在后面單獨介紹。2)成員變量和局部變量變量按照定義的位置,可以分為成員變量和局部變量。變量定義部分定義的變量稱為類的成員變量,成員變量在整個方法內有效,且和它在類體中書寫的順序無關;在方法內部定義的變量或方法的參數稱為局部變量,局部變量只在定義它的方法內有效。例3.2:在例3.1的基礎上增加一些變量及方法。06二月202392classPeople{double身高;//全局變量

booblean性別=true;String姓名,職業;

publicvoid人物間介() //方法定義{age=30; //合法,因為age為全局變量,切合定義位置無關String愛好=“圍棋”; //局部變量

System.out.println(“個人基本資料:”+姓名+年齡+性別+身高+職業+愛好); }

intage;publicvoidspeak(Strings){System.out.println(“我的娛樂是”+愛好);//非法,變量愛好是局部變量}}在變量定義過程中,有時會出現成員變量和局部變量同名的情況,此時,在出現局部變量的方法中,同名的成員變量會被隱藏,即這個成員變量會在這個方法內暫時失效。06二月202393如:classTest{inta=30;publicstaticvoidmian(args[]) {inta=60;System.out.println(“a=”+a);}}程序輸出結果為a=60,因為全局變量a對于main方法來說,已經失效。但有的時候還需要在出現上述情況的方法中還使用全局變量,就必須使用關鍵字this。特別是希望某些方法得到的參數作為全局變量來用時,如下例所示。例3.3:編寫一個類,能夠根據一個方法的參數來修改全局變量a。classTest{

06二月202394staticStringa=“全局變量”;

publicString修改字符串(Stringa) {Stringa;this.a=a;//方法中的參數和全局變量同一化

System.out.println(“a=”+a);}}

1)靜態成員變量(類成員變量或類變量)與實例成員變量(實例變量)如果成員變量的類型關鍵字前面有關鍵字static,這樣的成員變量稱作類變量或靜態成員變量。如:classdog{floatx;//實例成員變量

staticinty;//類變量…}06二月202395如果一個類中的某個成員變量是類變量,那么所有類的實例對象的這個類變量都分配給同一處的內存,修改了其中一個對象的這個類變量,其他類的這個類變量也會隨之改變。也就是說,類變量被所有對象共享。3.2.3構造方法

根據類創建對象時,總是使用一個特殊的方法來初始化對象,這個方法稱為構造方法。構造方法的名字要求與類同名(包括大小寫),且無返回值。在創建對象時,java語言都會自動調用構造方法為新對象進行初始化。一個類可以創建多個構造方法,但必須具有不同的參數,也就是說,構造方法可以重載。利用不同參數調用不同的構造方法,可以實現對象的不同初始化。例3.4:還是people類的定義:06二月202396classPeople{Stringname,career;booleansex;//true代表女,false代表男

intage;doubleheight;//從姓名、年齡角度分析people類時使用

publicPeople(Stringname,intage) { =name; this.age=age;System.out.println(“姓名:”+name+“\n”+“年齡:”+age); }//從性別、職業角度分析people類時使用publicPeople(Stringcareer,booleansex) { this.career=career; this.sex=sex;System.out.println(“性別:”+sex+“\n”+“年齡:”+age); } publicPeople()//如果有前面定義的構造方法,最好也定義此構造方法: { }}06二月202397使用構造方法進行初始化的好處是避免了在生成對象后每次都調用對象的初始化方法,構造方法內部成員遵循前面局部變量的使用規則。總結構造方法有以下特點:l

構造方法名與類名必須大小寫及拼寫完全一致。l

構造方法用于對象初始化,不需返回值,但是不必用void說明。l

構造方法不能被程序調用,只能通過new運算符調用。l

構造方法可由編程人員在類中定義,當用戶沒有定義時,java語言會自動生成一個為空的構造方法,當用new調用默認的構造方法時,對象被初始化為內部各數據相應數據類型的默認值;但是當用戶定義有構造方法時,默認的構造方法會失效,如果還要用的話,最好把默認的構造方法顯式地定義出來。06二月202398構造方法對于創建對象非常關鍵。雖然在大多數情況下,類的對象都是調用有參數的構造方法,方便對象變量的初始化。

同時,類定義時如果沒有聲明任何構造方法,系統會賦給此來一個默認(無參)的構造方法。但是,一旦用戶在類中聲明了構造方法(有參),系統將不會再賦給這個類默認的構造方法了。所以,好的習慣是:要么不聲明構造方法,要么聲明兩個以上構造方法,兩個中包括一個無參數的構造方法。3.2.5終結函數終結方法:finalize(),該方法包含在java.Long.Object類中。java語言自動管理內存,可以自動進行垃圾收集,在收集前自動調用對象的finalize()方法來釋放系統資源。finalize方法06二月202399很相似c++中的析構函數。但由于java有垃圾回收機制,并且java垃圾回收器的使用不由程序員控制,也無規律可循,有可能在程序終止時都沒有啟動的機會。因此,這樣的資源回收并不是可靠的方法。這種垃圾回收器的不確定性,有時會給程序運行帶來麻煩,比如說在某段時間系統產生了大量的待釋放資源卻無法有效釋放。為了解決這種麻煩,java里提供了System.gc()方法,使用這個方法,可以強制啟動垃圾回收器,進而自動執行finalize()方法。例3.5:一個finalize的一個典型應用示例。classPerson{ publicvoidfinalize() { System.out.println("theobjectisgone!"); }

06二月2023100publicstaticvoidmain(String[]args) { newPerson(); newPerson(); newPerson();System.gc(); System.out.println("theprogramisending!"); }}運行結果如圖3-1。

圖3-1對象的釋放

3.2.6類方法和實例方法06二月2023101正如成員變量分為類變量和實例變量一樣,類的方法也分為類方法和實例方法。如:classdog{floatx()//實例方法{…return…}staticinty();//類方法{…

return…}}若一個方法被聲明為類方法,則它只能對類變量進行操作,且象類變量一樣,類的所有實例對象共享同一個類方法。如:06二月2023102classtest{inta=3;staticintb;floatf(intx,inty){a=x;b=y;//變量引用合法,因為f為實例方法returnx*y;}staticfloatg(intx,inty){a=x;b=2*a;//變量a引用不合法,因為g為類方法,而a為實例變量returnx*y;}}3.3

對象的創建和使用知道類是創建對象的模板。當用一個類創建了一個對象時,意味著一類事物中具體的某個客觀實體被程序表述了。在面相對對象的程序中,對象是由屬性和方法封裝而成,屬性是實體的一些特征值或構件,方法是實體的功能和行為。06二月2023103對象可以被看作復雜的數據結構。一個對象的生命周期分為三個階段:生成、使用和清除。3.3.1創建對象創建一個對象包括兩個步驟:聲明對象和為對象分配內存。1)對象的聲明一般格式為:類名對象名如:People張三這里people是前面定義的一個類的名字,張三是聲明對象的名字。但此時對象“張三”的內存中沒有任何數據,即“張三”還是一個空對象,不能使用。要是用這個對象還必須為這個對象分配內存,也叫做為對象分配實體。06二月2023104

1)為對象分配內存為對象分配內存,即使用new運算符和類的構造方法實例化某個對象。如果類中沒有構造方法,系統會自動調用默認的構造方法(沒有參數,名字遵循普通構造方法的要

溫馨提示

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

評論

0/150

提交評論