Java面向對象編程基礎_第1頁
Java面向對象編程基礎_第2頁
Java面向對象編程基礎_第3頁
Java面向對象編程基礎_第4頁
Java面向對象編程基礎_第5頁
已閱讀5頁,還剩69頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第3章Java面向對象編程基礎3.1面向對象軟件開發概述3.2Java的類3.3構造方法與對象的創建3.4定義和使用Java的方法3.5內部類與匿名類學習要點:1.理解面向對象程序設計的基本概念2.理解Java包中類的基本概念,掌握定義Java類和創建對象的方法3.掌握構造函數:構造函數的特點、構造函數的定義4.掌握方法的定義,理解方法的形式參數與實際參數、方法的返回值、方法的調用過程5.了解內部類和匿名類的定義與使用方式3.1面向對象軟件開發概述面向對象程序設計是一種運用對象、類、繼承、封裝、聚合、關聯、消息、多態性等概念來構造系統的軟件開發方法,其核心思想是用面向對象的編程語言把現實世界的實體描述成計算機能理解、可操作的、具有一定屬性和行為的對象,將數據及數據的操作封裝在一起,通過調用對象的不同方法來完成相關事件。對象、實體與類人classPerson{}Persontom=newPerson()設計方法特點代表性語言面向機器用機器指令為特定硬件系統編制程序,其目標代碼短,運行速度和效率高,但可讀性和移植性差。86系列匯編語言面向過程用高級程序設計語言按計算機能夠理解的邏輯來描述要解決的問題及其解決方法,是過程驅動的,程序的可讀性和移植性好,核心是數據結構和算法。但大型程序維護起來比較困難。Fortran(50年代)Basic(60年代)C(70年代)面向對象用面向對象的編程語言把現實世界的實體描述成計算機能理解、可操作的、具有一定屬性和行為的對象,將數據及數據的操作封裝在一起,通過調用各對象的不同方法來完成相關事件,是事件驅動的,其核心是類和對象,程序易于維護、擴充。C++(80年代)VB(90年代)ObjectPascal(90年代)Java(90年代)3.1.1程序設計方法的發展3.1.2面向對象的幾個基本概念對象(Object):系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。由一組屬性和施加于該組屬性的一組操作構成。對象可以是有形的事物,例如一臺電腦;也可以是無形的事物,例如一項工作計劃。類(Class):是具有相同屬性和操作的一組對象的集合,它為屬于該類的全部對象提供了統一的抽象描述,它由一個類名、一組屬性和一組操作構成。屬性(Property):是對象的特征,包括狀態和行為。事件(Event)——由對象識別的一個外部動作屬性動態屬性——“行為”,用方法表示靜態屬性——“狀態”,用變量表示類是一個抽象的概念,表示一個有共同特征的對象集合。對象是一個具體的概念,它是類的一個具體的實例。類的作用是創建對象。類是創建對象的模板,對象是類的一個實例。類與對象的關系“人”類和對象“李四”的關系如何理解“對象”?對象的行為是什么?——方法對象的狀態是什么?——屬性對象的身份是什么?——名稱狀態可能影響行為每個對象“總是”有不同的身份,一個類的多個對象“可能”有不同的狀態名稱也叫“引用”三方面特征

包含——當對象A是對象B的屬性時,稱對象B包含對象A;

如:發動機與汽車,CPU與計算機

繼承——當對象A是對象B的特例時,稱對象A繼承了對象B

如:北京大學和大學,液晶顯示器和顯示器

關聯——當對象A的引用是對象B的屬性時,稱對象A和對象

B之間是關聯關系。

如:汽車與制造商對象的之間關系繼承性(inheritance)

自動地共享具有層次關系的類(子類)和對象中的方法和數據的機制。

當類Y繼承類X時,就表明類Y是類X的子類,而類X是類Y的超/父類。類Y由兩部分組成:繼承部分和增加部分。 增加部分是專為Y編寫的新代碼;繼承部分可以是簡單的等同,也可以更為豐富:如對性質重命名、重實現、復制、置空等。XY繼承部分

增加部分

Y繼承X繼承方式:簡單繼承(singleinheritance):一個類至多只能繼承一個 類(樹結構)。多重繼承(multipleinheritance):一個類直接繼承多個超 類(網狀結構)。類Y1,Y2簡單繼承類XXYY2Y1X1X2類Y多重繼承類X1,X2例:一個圖形系統()Figure

Line

Ellipse

Polygon

CloseFigure

OpenFigure

Pentagon

Triangle

Rectangle

Circle

Arc

(象素寬度,顏色,平移,旋轉)(填充,邊界,周長,面積)(長度)3.1.3面向對象的軟件開發過程

面向對象的軟件開發過程可以大體劃分為三個階段:面向對象的分析(objectorientedanalysis,OOA)面向對象的設計(objectorienteddesign,OOD)面向對象的實現(objectorientedprogramming,OOP)。(1)面向對象的分析(OOA——

objectorientedanalysis)主要作用:明確用戶的需求,并用標準化的面向對象的模型規范地表述這一需求,最后將形成面向對象的分析模型,即OOA模型。分析階段的工作應該由用戶和開發人員共同協作完成。面向對象的分析首先應該明確用戶的需求,然后再將這些需求以標準化模型的形式規范地表述出來,即將用戶和開發人員頭腦中形成的需求以準確的文字、圖表等形式表述出來,形成雙方都認可的文件。使用OOA的原因如下:(1)它使我們能在人類概括客觀事物的三個基本方法(對象及屬性、一般—特殊結構和部分—整體結構)的框架上進行定義和交流。(2)它首先著眼于問題空間的理解。(3)它將屬性及專用于那些屬性的方法視為一個固有的整體。(4)使用自包含分塊(對象之間依賴性最小)進行分析和說明。(5)它提供一個支持分析和設計一致的強有力的表示工具。(6)它能適應系列變化的系統和對當前實際運行系統的調整。常使用的OO(描述)方法有多種:BoochBooth方法(86年)Coad&yourdon方法(90年)JamesRumbaugh(OMT)方法(91年)Berard方法FireSmith方法Jacobson(OOSE)方法Martin-Odeu方法Seidewitz-Stark方法Shlaer-Mellor方法Wirfs-Brook方法UML(UnifiedModelingLanguage)方法Coad&Yourdon的OOA模型的5個層次對象—類層:找到要開發的應用軟件所對應的各個現實世界的實體,并從中抽象出類和對象。靜態屬性層:為對象—類層中抽取出來的各個類和對象設計靜態屬性和它們之間的約束關系。服務層:定義對象和類的動態屬性以及對象之間的消息通信。結構層:定義系統中所有對象和類之間的層次結構關系。主題層:將系統定義為若干主題(即子系統),把有關對象劃歸不同的主題。

從面向對象的分析到面向對象的設計

OOA的各層模型化了“問題空間”,而作為OOA各層擴充的OOD,則模型化一個特定的“實現空間”。這種擴充主要是從增加屬性和方法開始的。

OOA是獨立于程序設計語言的,初步的OOD在很大程度上依然獨立于程序設計語言,而詳細OOD是依賴于語言的,并可有效地應用過程式、函數式和面向對象的程序設計語言加以實現。語言的選擇對OOD的實施有重要的影響,但不會影響OOD的有效性。(2)面向對象的設計(OOD——

objectorienteddesign)概要設計——構成最初的OOD模型

OOA模型界面管理:負責整個系統的人機交互界面的設計任務管理:負責處理并行操作之類的系統資源管理功能數據管理:負責設計系統與數據庫的接口詳細設計——對OOD模型進行細化細化分析:是否有可以直接引用的已有類或部件細化設計:設計類,包括類的屬性和類之間的相互關系細化驗證:驗證各對象類公式間是否相容和一致、類成員的訪問權限設置是否合理、對象類的功能是否符合用戶要求等。(3)面向對象的實現(OOP——

objectorientedprogramming)選擇一種合適的面向對象的編程語言用選定的語言編碼實現對軟件系統中各對象類的詳盡描述將編寫好的各個類代碼模塊根據類的相互關系集成起來利用開發人員提供的測試樣例和用戶提供的測試樣例分別檢驗編碼完成的各個模塊和整個軟件系統。面向對象的軟件開發過程小結分析用戶需求,從問題中抽取對象模型;將模型細化,設計類,包括類的屬性和類之間的相互關系,同時考察是否有可以直接引用的已有類或部件;選定一種面向對象的編程語言,具體編碼實現上一階段類的設計,并在開發過程中引入測試,完善整個解決方案。3.1.4面向對象程序設計的四個特點抽象性指采用數據抽象的方法來構建程序的類、對象和方法,即把系統中需要處理的數據和這些數據上的操作結合在一起,根據功能、性質、作用等因素抽象成不同的抽象數據類型。封裝性指利用類將數據和基于數據的操作封裝在一起,數據被保護在類的內部,系統的其他部分只有通過包裹在數據外面的被授權的操作,才能與這個類進行交流和交互。繼承性指一個類可以從其它已有的類中派生,新類保持了父類中的行為和屬性,但增加了新的功能。多態性

指一個程序中可以有同名的不同方法共存的情況。可以利用子類對父類方法的覆蓋和重載在同一個類中定義多個同名的方法來實現。3.1.5面向對象程序設計的三大優點可重用性指在一個軟件項目中所開發的模塊,不僅可以用于本項目,還可以重復地使用在其他項目中。提高了開發效率,縮短了開發周期,降低了開發成本。由于采用了正確、有效的模塊,質量得到保證,維護工作量減少。采用可重用模塊來構建程序,提高了程序的標準化程度,符合現代大規模軟件開發的需求。

可管理性采用類作為構建系統的部件,使整個項目的組織更加合理、方便;把數據和其上的操作封裝在一起,僅本類的方法才可以操縱、改變這些數據,效率提高,開發難度降低;指應用軟件能夠很方便地進行修改和擴充,包括軟件的內容、形式和工作機制(如把C/S模式改為B/S模式)的修改和擴充。特別適合于使用在快速原型的軟件開發方法中。

使系統維護(包括延伸開發)變得簡單和容易,維護工作量和開銷大大降低。對模塊化技術的更有效的支持。

可擴展性再回首:Java關鍵字數據類型:bytebooleanchardouble

floatintlong

short,特殊的值:falsetruevoidnulllength程序流程控制:ifelse

switch

case、breakdefault、do–while、for、continue、return類的定義:class

extendsimplements

importinterfacepackagesuperthis非訪問控制符:abstractfinalstaticnative特殊運算符:instanceofnew

訪問控制符:publicprivateprotected異常處理:trycatchfinallythrowthrows

線程:threadtransientsynchronized3.2Java的類類由數據和方法構成,是Java編程的基礎。類既要提供與外部聯系的接口,同時又要盡可能隱藏類的實現細節。類屬性(數據)方法(操作數據)3.2.1類的定義[修飾符]class

類名[extends

父類][implements

接口名]{

成員變量聲明 //域(屬性)的聲明

方法聲明 }publicabstractfinal接口名父類修飾符定義類屬性,成員變量定義類方法(1)聲明類頭:關鍵字class父類名:跟在extends關鍵字后,用以說明當前類是已經存在的哪個類的子類。通過定義繼承關系,子類可以獲得父類的所有屬性和方法,并進一步定義它自己的特殊屬性.接口名:跟在implements關鍵字后,用以說明當前類中實現了哪個接口定義的功能和方法。修飾符:說明類的特殊性質,分為訪問控制符、抽象說明類和最終類說明符。

(2)聲明類體:

定義類的具體內容,包括類的屬性與方法

[類的屬性]:可以是簡單變量,也可以是對象、數組等其他復雜數據結構。聲明類屬性為簡單變量的語法:

[修飾符]變量類型變量名[=變量初值];例:intpassword;聲明類屬性為對象的語法:[修飾符]類名對象名[=new類名(實際參數列表)];例:PhoneCardmyCard=newPhoneCard();

修飾符有訪問控制符、靜態修飾符static、最終修飾符final、易失修飾符volatile和過渡修飾符transient。[類的方法]:

即成員函數,它規定類屬性上的操作,實現類的內部功能的機制,是類與外部交互的窗口。語法結構:[修飾符]返回值類型

方法名(參數列表)throws

例外名1,例外名2,...{

方法體;

局部變量聲明;

語句序列;}

課堂練習:1.編寫一個車輛類,其中包括2個域:車輛類別、輪胎數量,2個成員方法:分別用來設置車輛類別和輪胎數量。2.編寫一個JavaApplication程序,實現車輛對象的創建,并調用其成員方法將所創建車輛的“車輛類別”設置為“長公交”、輪胎數量設置為6,要求通過字符界面輸出所創建與設置的結果。3.2.2類中的“變量”概念辨析:(1)成員變量:在類體變量定義處定義的變量,在整個類內都有效;成員變量包括實例變量和類變量,用static定義的變量是類變量,也叫靜態變量;所有對象獨享實例變量,但共享類變量;實例變量只能通過對象名訪問,類變量既可以通過某個對象名也可以通過類名來訪問。(2)局部變量:在類的方法中定義的變量,僅在定義它的方法內有效3.2.3類中的“方法”概念辨析:(1)實例方法:實例方法既可以操作實例變量,也可以操作類變量;實例方法在創建類對象后才分配入口地址;實例方法可以被類創建的任何對象訪問,必須通過對象來調用;實例方法可以調用其它方法(包括類方法)。(2)類方法:

用static修飾的方法是類方法,也叫靜態方法;

類方法只能操作類變量;類方法在類被加載到內存后就分配了入口地址;類方法可以被類創建的任何對象調用,也可以通過類名來調用,類方法只能調用該類的類方法。本類中方法與變量之間的訪問關系

實例方法類方法實例變量類變量用對象名√√√√用類名

√各類之間方法與屬性的引用方法

實例方法類方法實例變量類變量局部變量實例方法√√√√√類方法

√√3.3構造方法與對象創建3.3.1構造方法的基本概念構造方法:用來初始化對象(為其所有屬性賦初值)的一個特殊方法。(也稱構造函數)構造方法名與類名相同構造方法可以有0個或多個參數特點構造方法始終和new關鍵字一起調用構造方法沒有返回值在創建一個類的新對象時,系統自動調用構造方法對其進行初始化。引入構造方法的原因:1)滿足面向對象程序設計中對象初始化的需要;2)提高靈活度,使初始化工作除賦值外有更復雜的操作;

在不定義構造方法時,系統會自動為該類生成一個默認(缺省)的構造方法。缺省構造類中可以不出現構造方法,如果沒有構造方法,系統將為該類缺省定義一個空構造方法,也稱為缺省構造方法。用缺省構造方法初始化對象時,系統用缺省值初始化類對象的數據成員。

各數據類型的缺省值如下:數值型:0布爾型:false字符型:’\0’

類:null3.3.2構造方法的定義例如,可以為Student類定義如下的構造方法,初始化它的2個域:

注意:構造方法定義了幾個形式參數,創建對象的語句在調用構造方法時,需要提供幾個類型、順序一致的實際參數,指明新建對象各域的初始值。

Student(Stringm,Strings) { name=m; sex=s; }publicclassTestStudent{publicstaticvoidmain(Stringargs[]){Students1=newStudent(“張華”,“軟131”);Students2=newStudent(“丁一”,“軟132”);

System.out.println(s1.stuName);

System.out.println(s1.stuClass);

System.out.println(s2.stuNam);}}classStudent{ StringstuName; StringstuClass;

Student(Stringm,Strings) { stuName=m; stuClass=s; }}對象的使用可以用點(.)操作符來調用對象實例的成員變量和方法

(1)域的引用

成員變量引用的形式如下:對象名.variablename

例如可以通過賦值語句修改firstP的值。

firstP=“Henry”;

(2)方法的調用對象的方法調用的一般形式如下:對象名.方法名(參數列表)例如:firstPerson.setAge(30);實參實參classDemo.javapublicclassClassDemo{inta;intb;

ClassDemo()

{a=2;b=3;}

voidshow(){ System.out.println(“a=”+a+”,b=”+b);}

publicstaticvoidmain(Stringargs[])

{newClassDemo().show();}}

成員變量

成員方法classPerson{

Stringname;//姓名

intsex;//性別

int

age;//年齡

Person(Strings1){ name=s1;

}

StringgetName(){

returnname;}voidsetAge(int

d){

age=d;}}

Person類namesexagePerson()構造方法getName()setAge(

)3.3.3創建類的實例對象創建對象的一般格式:類名

新建對象名=new

構造函數();

new是為新建對象開辟內存空間的算符。構造函數()用來完成對象的初始化。如:TextFieldinput=newTextField(6);

建立一個名為input、長度為6的文本框。

Personp1=newPerson(“張三”);

建立一個名為“張三”的人p1。3.4定義和使用Java的方法3.4.1方法的定義Java中,方法只能在類中定義,由方法頭和方法體兩部分組成。格式:[修飾符]

返回值類型

方法名([參數列表])throws例外名1,例外名2,...{

局部變量/對象聲明部分;

語句部分;}方法定義舉例例如:定義計算平方值的方法intsquare(intx)

{

ints;

s=x*x;

returns;

}

int是方法返回值類型,square是方法的名字;x是方法的形式參數,s是方法體內的局部變量。方法聲明中的修飾符的含義:

[public|protected|private]

[static][final|abstract][native][synchronized]

static:

靜態方法(類方法),可通過類名直接調用

abstract:

抽象方法,沒有方法體

final:

方法不能被重寫

native:

集成其它語言的代碼

synchronized:

控制多個并發線程的訪問

例:

public

staticvoid

main(String

args[])

{}//主類方法3.4.2方法的參數方法頭定義時所帶的參數稱為形參,它規定了方法的輸入數據,調用時所帶的參數稱為實參。帶多個參數時,要指明各參數的類型,并用逗號把各參數分隔開來。“形實結合”時是按位置順序一一對應的,否則會引發編譯錯誤。多個同名方法通過所帶參數不同(包括:順序、類型、個數)而實現多態。參數傳遞示例值傳遞⑴

值傳遞調用方法時,參數是普通變量,實參將其值傳給形參,調用中實參的值不受形參的影響。

⑵引用傳遞調用方法時,參數的類型為復合數據類型,如:數組、類。實參隨形參的變化而變化。參數傳遞方式分類:3.4.3方法的返回值方法的返回值是方法的輸出數據。定義方法頭時,通過定義方法返回值類型說明該方法的輸出數據類型,用return語句返回確定數值。方法無返回值時,返回值類型應為void。格式:return表達式;例:類的定義publicclassTestClass{ staticints;//定義在此處才可以兩個方法都用

publicstaticvoidmain(Stringargs[]) { System.out.println("面積是:"+square(5)+""+s);//可以用兩種方法引用返回值

} staticintsquare(intx) {

//ints;

//在此處定義的話,main方法中則不能引用

s=x*x;returns; }}3.4.4方法的使用程序調用方法:

大部分用戶自定義的方法都屬于程序調用方法。調用命令通過被調用方法的名稱來說明要使用哪個自定義的方法,完成“形實結合”,為被調用方法的各形式參數賦初值。如:x=isPrime(i);

當有多個同名方法時,根據參數列表來區分。(2)系統調用方法:

其最大特點是方法定義后,不需要寫專門的調用命令,系統會在程序運行過程中自動去調用此方法才完成它所定義的任務。如:init()3.4.5定義方法的步驟和注意事項(1)算法中需要細化的步驟、程序中重復的代碼以及重載父類方法都可以定義成類的方法。(2)方法通常具有相對獨立的功能和明確的輸入輸出接口。(3)定義方法分定義方法頭和方法體兩部分。(4)方法頭包括方法名、參數列表、返回值類型、方法修飾和方法拋出的例外列表。重載方法的方法頭要與其父類方法的方法頭基本一致。(5)方法命名要遵循Java對標識符的規定:以字母、$或-開頭,由字母、數字組成。

(6)參數列表是方法的輸入接口,它列

溫馨提示

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

評論

0/150

提交評論