第4章類與對象-構建Java程序的基石_第1頁
第4章類與對象-構建Java程序的基石_第2頁
第4章類與對象-構建Java程序的基石_第3頁
第4章類與對象-構建Java程序的基石_第4頁
第4章類與對象-構建Java程序的基石_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章類與對象:構建Java程序的基石

目錄

面向對象程序設計靜態(tài)類與靜態(tài)成員要素

Java修飾符Java程序的基本結構

構造方法類的描述

重點與難點點撥經典練習題本章知識重點3132構造方法33this關鍵字34類成員要素的訪問控制修飾符static修飾符與靜態(tài)成員要素35面向對象程序設計的優(yōu)越性本章知識難點33Java類成員要素的訪問控制修飾符343132面向對象幾大特征:抽象、封裝、繼承、多態(tài)Java類的訪問控制修飾符

類與對象的關系面向對象的基本概念對象(Object)是一個應用系統中用來描述客觀事物的實體,是具有特定屬性(數據)和行為(方法)的基本運行單位,是類的一個特定狀態(tài)下的實例。類(Class)是Java代碼的基本組織模塊,是用以描述一組具有共同屬性和行為的對象的基本原型,是對這組對象的概括、歸納與抽象表達,它定義了本類對象所應擁有的狀態(tài)屬性集及操作這組屬性的行為方法集。3132面向對象的基本概念(續(xù)1)接口(Interface)是一種只包含常量與抽象方法的特殊的類,是Java語言用以實現類間多重繼承功能的唯一手段。接口定義了一組特定功能的對外接口與規(guī)范,而并不真正實現這種功能,功能的實現留待給實現這一接口的各個類來完成

34包(Package)是用來容納一組相關類與接口的容器,是Java語言組織與管理類與接口的一種機制

33類與對象的關系類與對象之間的關系,類似于數據類型與變量之間的關系;一個類可以生成無數個不同的對象,每個對象屬性值不同,其狀態(tài)也不同??梢杂糜嬎銠C模型與計算機實體之間的關系來更形象地說明類與對象之間的關系:將馮·諾依曼計算機模型看作計算機類,則不同品牌的計算機實體就對應為一個個的實例對象。類與對象的關系示例計算機模型與計算機實體之間的關系:面向對象編程(OOP)

從問題域客觀存在的事物出發(fā),將這些現實世界的物理實體抽象成概念世界的抽象數據類,再進一步將這種抽象數據類轉換為計算機世界的類(Class);類刻畫出實體所具有的狀態(tài)信息與所能發(fā)揮的功能信息,是創(chuàng)建對象時所遵循的模板(Template)。對類進行實例化,就生成一個個的對象,對象對應于各個具體事物,是程序運行過程中實際發(fā)揮作用的類的獨立內存映像。借助于類與對象這兩個面向對象程序中最基本的要素,按照盡可能符合人類自然思維的方式,來構造軟件系統,這就是所謂的面向對象程序設計(OOP)

OOP的邏輯過程面向對象設計分析的完整過程如圖所示:現實域抽象抽象類對象實例化映射抽象數據類物理實體邏輯實現概念域計算機世界面向對象的重要特征

面向對象具有以下幾個重要特征:抽象封裝與隱藏繼承多態(tài)性

33313234抽象抽象(Abstraction):抽象是面向對象編程的起點,也是其最本質的特征之一。抽象的廣義概念是這樣定義的:從研究對象中提取與當前目標主題關系最密切的主要方面,而忽略掉與目標無關的那些方面或關系不大的細枝末節(jié),從而更充分地注意與當前目標有關的方面,更明確地突出主題,這就是抽象抽象示例下圖闡述了如何由自然界眾多的動物實體出發(fā),經過抽象的處理過程,最終得到動物這一概念封裝封裝(Encapsulation):封裝也可稱為信息隱藏(InformationHiding),是通過對象的方法來訪問與改變對象屬性的一種機制。封裝是面向對象的一個重要原則,其實現的核心是將類的屬性與相關的操作捆綁起來,包裝成不可分割的、獨立的對象實體,將內部的數據與實現細節(jié)盡可能隱蔽起來,使外部用戶不能直接操縱對象的內部信息,只能通過對象對外提供的施加有一定限制的訪問接口來使用對象封裝示例下圖形象地說明了一個類的封裝原理。類對數據與行為的封裝是借助于不同級別的訪問修飾符來達到控制目的的繼承繼承(Inheritance):繼承是指從已有的類中可以派生出若干個新類,已有類稱為基類或父類,新類稱為派生類或子類;子類將自動地獲得基類的屬性與方法,從而不需再重復定義這些屬性與方法;當然子類還可以修改父類的方法或增加新的方法,從而使自己更適合特殊的需要。類之間的繼承關系是現實世界中遺傳關系的直接模擬多態(tài)性多態(tài)性(Polymorphism):是指允許不同類的對象對同一消息作出各自的響應,即以統一的風格處理已存在的數據及相關的操作。多態(tài)性語言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢,較好地解決了應用程序中方法同名的問題

OOP的優(yōu)越性從面向過程到面向對象是程序設計技術的一個飛躍。人們之所以要采用面向對象的程序設計技術,其目的在于:

提升程序的開發(fā)與運行效率提高代碼的可重用性(或者稱為復用性)按照與人類習慣思維方法一致的原則開發(fā)系統OOP的優(yōu)越性(續(xù))提高程序的可靠性與可維護性

提高程序的可擴展性增強程序的可控制性總之,面向對象的程序設計,能夠有效分解、降低問題的難度與復雜性,提高整個求解過程的可控制性、可監(jiān)視性和可維護性,從而獲得較高的開發(fā)效率與可靠效果類的描述類是Java語言面向對象編程的基本要素,用來定義對象的成員變量(數據域)與成員方法(功能接口),描述對象的狀態(tài)與行為。Java程序將你要表達的實體或概念封裝在類中,并由類來創(chuàng)建諸多的實例對象。應用程序的功能便是由各個類的實例對象,通過調用各類方法來實現的類的定義

修飾符public、說明了類的屬性,abstract與final為互斥的兩個修飾符,不能同時出現于一個類的聲明中類的聲明用來指定該類的訪問修飾符、類的名稱、父類名稱及實現接口等屬性。聲明類的完整形式為:關鍵字class后面跟隨類名,類名為用戶定義的標識符,最好以意義完整且易于識別的英文單詞或短句作為類名;類名應該能夠描述出類的特征或作用,類名的第一個字母通常要大寫,如果類名由多個單詞組成,則每一單詞的首字母一般都要大寫。類的定義(續(xù)1)關鍵字extends后面跟隨著基類的名稱關鍵字implements后面跟隨著類所實現的接口列表帶有[]的項目為可選項目,只在必要時才出現類體是類功能實現的主體,是Java語句的集合

語句塊界定符{及}標識出類體的有效范圍類的描述(續(xù)2)成員變量與成員方法為類的成員要素,簡稱為成員(Member),它們又分為靜態(tài)/類的要素與對象/實例要素兩類。

構造方法是具有與類名相同名稱的一種特殊方法,用來創(chuàng)建類的對象及對成員變量進行初始化。構造方法為可選項,當省略時,Java系統會按缺省方式定義空白的構造方法。類定義示例【例】建立一個公共的最終類—日期類,其聲明格式如下:publicfinalclassDate//類的聲明語句{//類體定義

privateintyear;//年

privateintmonth;//月

privateintday;//日

publicinitDate(int

y,int

m,intd){……}//初始化年、月、日值的方法

publicshowDate(){……}//顯示當前日期值的方法}屬性聲明public、protected與private為成員要素訪問修飾符,用來限制成員變量或成員方法的訪問范圍,即哪些類或對象可以訪問此成員要素static用來指明成員要素為靜態(tài)要素,又稱類要素,以區(qū)別于對象要素。靜態(tài)要素存在于類的定義區(qū)域中,屬于類本身的成員,每個該類的對象共享這些要素

屬性:成員變量(MemberVariable)又稱為屬性(Attribute)或數據域(DataField),用來描述類對象的數據特征屬性聲明(續(xù)1)final用于成員變量時,是作為定義最終變量即常量的關鍵字。這類常量的值不允許修改。transient(意為短暫的、瞬時的)為專門用于成員變量的修飾符,表明成員變量為臨時變量

volatile(意為可變的、不穩(wěn)定的)為專門用于成員變量的修飾符,聲明一個被多個并發(fā)線程所共享的變量屬性聲明(續(xù)2)成員變量名為用戶自定義的標識符,一般為有意義的英文單詞或單詞組合;變量名的第一個字母小寫,如果包含多個單詞,則其他單詞的首字母大寫一個定義語句可以聲明一個成員變量,也可以聲明多個同類型的成員變量。不同類型的成員變量必須分別由不同的聲明語句來定義屬性定義示例【例】定義一個包訪問屬性的學生類Student,該類繼承自Person父類,其屬性包含學號、姓名、性別、出生日期、電子郵箱、手機號碼、QQ號碼、通訊地址等。類的定義代碼如下:classStudentextendsPerson//extends關鍵字后面跟隨基類名稱{publicStringcode;//學號

publicStringname;//姓名

publicbooleansex;//性別

privateDatebirthDate;//出生日期

privateStringEmail;//電子郵箱

privateStringcellPhoneCode;//手機號碼

privateint

QQCode;//QQ號碼

publicStringaddress;//通訊地址……//成員方法定義(略)}類的成員方法成員方法(MemberMethod)又稱為功能接口(FunctionInterface),簡稱為方法(Method),是類對象與外界的接口,描述了類對象的行為方式,反應了對象的行為特征,特別是對屬性進行操作的特征。成員方法對成員變量的操作主要體現在以下兩個方面:改變對象的屬性,一般記為set方法返回對象的屬性,一般記為get方法成員方法的定義類中可定義多個方法,其定義格式如下:[成員方法修飾符]<方法返回類型><方法名>([參數列表])[throws<異常列表>]{//方法體定義

……//用于描繪方法行為的Java語句}成員方法展開的定義格式為:[public|protected|private][static][final|abstract][native][synchronized]<方法的返回類型><方法名>([參數列表])[throws<異常列表>]{……}成員方法的定義(續(xù)1)<方法的返回類型><方法名>([參數列表])子句為成員方法的方法原型。其中成員方法修飾符為修飾成員方法的一些關鍵字習慣上,人們將屬性的聲明放在方法之前,但Java編譯器對屬性和方法的位置并無規(guī)定,二者出現的順序可以任意進行組合穿插,在語法上都是有效的333132成員方法的定義(續(xù)2)throws<異常列表>子句稱為聲明拋出異常短語。如果定義的方法可能會產生自己不準備處理或無法處理的異常(異常為一種嚴重級別不高的錯誤),應該在方法定義語句的throws子句中聲明拋棄該類異常,使得該類異常對象從調用的棧中向上傳播,直到有合適的方法捕獲到它并給予處理為止34構造方法構造方法(Constructor)又稱為構造器,熟悉C++語言的人習慣上稱之為構造函數。構造方法是類用來創(chuàng)建對象、初始化類的屬性的一種特殊方法,它本身不屬于類的成員方法。Java中所有的類至少都要有一個構造方法,即使用戶不明確地定義,系統也會為該類生成一個默認構造方法或缺省構造方法,這種缺省構造方法沒有任何參數,且方法體為空。構造方法的特殊性構造方法沒有返回類型,也不允許返回void類型。構造方法的方法名與類名完全相同(包括字母大小寫)一個類可以包含多個重載的構造方法,使用這些重載的構造方法創(chuàng)建不同對象時,通過參數的不同來決定調用哪個構造方法。構造方法不允許用戶直接調用,只能通過new關鍵字在創(chuàng)建對象時由系統調用。33343132構造方法的特殊性(續(xù))構造方法可以繼承,即子類能夠繼承父類的構造方法構造方法用于創(chuàng)建對象時由系統自動調用,一般定義為public訪問修飾類型或默認的包訪問類型,極少有需要定義為private或protected訪問類型的場合構造方法中可以使用super與this兩個關鍵字來引用直接父類或自身對象353637實例對象類是用來描述對象數據與行為的模板與規(guī)范,是一個抽象的概念,無法直接使用類來完成數據狀態(tài)的改變與行為的實施,必須由一個個的對象來搭建應用程序的大廈。創(chuàng)建對象一般包括三個步驟:

聲明對象引用變量建立對象實體初始化對象

實例對象的引用對象實體(Object)與對象引用變量(ObjectReferenceVariable)是兩個完全不同的概念。對象實體是類映射在內存中的一塊物理區(qū)域,該區(qū)域中存儲著類所定義的成員的當前狀態(tài)。對象引用變量并不是對象本身,而是指向對象實體的符號標識,其值為一個32位的地址,該地址對應的存儲空間為對象的物理存放區(qū)域一個對象可以被多個對象引用變量引用,但一個對象引用變量某一時該只能指向一個特定的對象對象引用示例例如下面的兩行代碼:CubecubeObj1,cubeObj2=null;cubeObj1=newCube(50,40,30);第一個語句聲明了兩個立方體對象引用變量并初始化第二個變量的值為null,即cubeObj2變量不引用任何對象,它的“地址”為空值;第二個語句調用Cube類具有三個參數的構造方法,創(chuàng)建了一個實際的對象實體,并將對象的引用地址賦予對第一個變量對象引用示例圖

如同簡單數據類型的變量之間可以相互賦值,對象引用變量之間也可相互賦值。對象變量之間的賦值,并不重新生成對象的拷貝,而只是將一個對象變量的引用復雜給另一個對象變量,從而使它們最終都指向同一個對象實體的內存地址。賦值語句cubeObj2=cubeObj1;將變量cubeObj1指向的對象引用賦值給了cubeObj2變量,使得兩個對象變量都指向同一個對象使用對象成員要素對象創(chuàng)建后,就擁有了類的屬性與方法的實例化副本,通過對象引用變量及點符號(.),便可以使用該對象,實現對對象屬性與方法的訪問調用對象成員方法(續(xù))調用對象成員方法的命令格式為:<對象引用變量>.方法名([參數列表])訪問對象屬性的命令格式為:<對象引用變量>.<屬性名>this關鍵字this是一種特殊的引用,它指向對象自身,表示對自身對象的一個引用。通過this這一引用,能夠訪問對象自身的成員數據,調用對象自身的成員方法??梢詫his作為對象特殊的引用變量的名稱,該變量可被訪對象自身使用。this關鍵字主要用于類的非靜態(tài)成員方法(即實例方法)與構造方法中,而在靜態(tài)方法(即類方法)中是不允許使用this關鍵字的。this關鍵字的用途構造方法中通過this引用同類的其他重載構造方法在非靜態(tài)成員方法中,通過this訪問當前對象的成員變量或成員方法在構造方法中或非靜態(tài)成員方法中,參數名或方法內的局部變量名與類的屬性同名,為區(qū)分開來,需要在類的屬性名前加上this.前綴

在非靜態(tài)成員方法的參數中,包含有對當前對象引用的對象類型參數,此時需用this來傳遞這類參數get與set方法get方法返回特定屬性的當前值它的方法原型可描述為:

public<反回的數據類型>get<屬性名稱>()set方法用來設置或修改某一屬性的值它的方法原型可描述為:publicvoidset<屬性名稱>(<屬性的數據類型><參數>)get與set方法的好處類能夠將數據的內部實現隱藏起來,而提供給對外一個接口,從而避免用戶直接操縱類的屬性通過對get或set方法設置功能代碼,類能夠有效地實施成員變量的合法性檢查通過get或set方法的組合,能夠控制某些屬性的只讀或只寫屬性。如對于點類僅僅提供getX()方法,而不提供setX()方法,則x坐標屬性就成為一個只讀的屬性333132Java的修飾符Java的修飾符(Modifier)是一組用來描述與刻畫類、屬性、構造方法與成員方法的系統關鍵字。主要包括訪問權限控制修飾符與特征修飾符特征修飾符是用來刻畫類、成員變量或成員方法特定特征的修飾符,針對不同的對象,特征修飾符的內容也各不相同訪問權限控制修飾符簡稱訪問控制修飾符或訪問修飾符,其作用是指明類、屬性或方法是否可以被程序里的其他部分訪問和調用,限定程序的哪些其他部分可以訪問和調用它們,哪些不可以Java修飾符列表Java的修飾符類成員變量成員方法構造方法訪問修飾符public√√√√protected×√√√private×√√√缺省(package)√√√√特征修飾符static×√√×abstract√×√×final√√√×transient×√××volatile×√××native××√×synchronized××√×類的訪問控制修飾符公共類訪問修飾符public一個類被聲明為公共類,表明它可以被所有的其他的類所訪問和引用,其他的類既包括本包的類,也包括其他包的類缺省的類訪問修飾符缺省的包訪問屬性規(guī)定該類只能被同一個包中的其他類或對象所訪問和引用,而不允許被其他包中的類或對象所使用類成員的訪問控制修飾符31公共訪問修飾符public

32保護訪問修飾符protected

33私有訪問修飾符private34缺省的訪問修飾符類的特征修飾符

abstract特征修飾符final特征修飾符類的所有修飾符成員變量的特征修飾符

static與特征修飾符final特征修飾符transient屬性修飾符volatile屬性修飾符成員變量的所有修飾符成員方法的特征修飾符

static特征修飾符abstract特征修飾符final特征修飾符synchronized修飾符native修飾符成員方法的所有修飾符缺省的修飾符訪問屬性訪問修飾符關鍵字本類相同包中的不同類(包含子類)不同包中的子類不同包中的非子類公共訪問屬性public??♂?♂?♂保護訪問屬性protected??♂♂私有訪問屬性private?缺省的包訪問屬性無??♂訪問修飾符的控制范圍注:?表示能夠訪問訪問修飾符定義的類♂表示能夠繼承訪問修飾符定義的類static修飾符與靜態(tài)成員要素類的成員要素可以被特征修飾符static聲明為靜態(tài)成員要素。靜態(tài)成員要素屬于整個類,能夠通過類名來直接使用,而不需引用任何類的實例對象,因而靜態(tài)成員要素又稱為類成員要素,簡稱類成員(ClassMember)或靜態(tài)成員(StaticMember)。靜態(tài)成員要素包括靜態(tài)屬性(StaticAttribute)與靜態(tài)方法(StaticMethod),它們先于類的任何實例對象創(chuàng)建之前而存在。靜態(tài)屬性的特征靜態(tài)屬性在類加載時自動創(chuàng)建,并被存放在類的內存體中的公共存儲單元中該類所有的對象共享同一個靜態(tài)屬性,存取到的是相同的值靜態(tài)屬性可以通過類名直接訪問,也可以由對象變量來引用靜態(tài)屬性與非靜態(tài)屬性一樣,可以使用public、private、final等修飾符靜態(tài)方法的特征31靜態(tài)方法屬于整個類

32靜態(tài)方法可通過類名直接訪問或者由對象變量來引用

33靜態(tài)方法只能訪問該類的靜態(tài)屬性,不能訪問該類的實例變量

34靜態(tài)方法只能調用該類的其他靜態(tài)方法,不能調用該類的實例方法

靜態(tài)方法的特征(續(xù))靜態(tài)方法不能以任何方式引用this與super關鍵字靜態(tài)方法不能被子類所覆蓋Java的應用程序必須有且只能有一個入口方法main(),是程序運行的起點,它存在于所有對象創(chuàng)建之前,因而main方法必須被定義為靜態(tài)方法363738但實例方法卻可以訪問該類的靜態(tài)屬性與靜態(tài)方法

35四類成員要素的性質與特征四類成員要素的使用及訪問方式表成員要素類型存在時機通過類名使用由對象引用能否在靜態(tài)方法中訪問能否在實例方法中訪問靜態(tài)/類屬性對象創(chuàng)建前已存在√√√√實例/對象屬性對象創(chuàng)建后才存在×√×√靜態(tài)/類方法對象創(chuàng)建前已存在√√√√實例/對象方法對象創(chuàng)建后才存在×√×√Java應用程序的基本結構

[package<聲明的包名稱>;][import<Java類庫1>;][……][import<Java類庫m>;]定義用戶類1{定義類1的若干成員變量定義類1的若干構造方法定義類1的若干成員方法}定義用戶類2{定義類2的若干成員變量定義類2的若干構造方法定義類2的若干成員方法}……定義用戶類n{定義類n的若干成員變量定義類n的若干構造方法定義類n的若干成員方法}成員方法程序的基本構成單元是類,而成員方法又是類的主要組成部分,類的功能主要由成員方法來體現。成員方法簡稱方法,它定義了類的行為或動作,描述了對象可以執(zhí)行的操作規(guī)范,規(guī)定了類與外界進行交互的接口方法是一個有名字的、具有相對獨立功能的程序模塊。對象通過執(zhí)行成員方法對傳遞過來的消息作出響應,從而完成特定的功能。方法之間可以互相調用,同一個方法可被一個或多個方法調用任意次方法的聲明Java程序中,成員方法只能在類中聲明。聲明方法的格式如下:[方法修飾符]<返回值類型><方法名>([參數列表])throws<異常列表>//方法頭部聲明

{//方法體定義局部變量聲明;語句序列;

[return<表達式>;]}方法定義的兩個部分方法定義中包含兩部分內容:方法頭部聲明與方法體定義方法頭部聲明定義了方法的原型與性質。一般由方法名、參數列表、返回類型、方法修飾符和方法拋出異常五部分組成方法體則定義了方法的具體內容與操作邏輯。方法體通常包含兩類功能:一是對類的屬性進行各種操作;二是與其他的類與對象進行消息傳遞操作頭部聲明與方法體定義31方法頭部聲明定義了方法的原型與性質32方法體則定義了方法的具體內容與操作邏輯33方法體通常包含兩類功能:一是對類的屬性進行各種操作;二是與其他的類與對象進行消息傳遞操作

局部變量類中的數據變量可分為成員變量(MemberVariable)與局部變量(LocalVariable)兩類成員變量在類體中定義,其作用域為整個類。成員變量在類中定義的順序與位置并不影響它的作用域范圍局部變量的作用域(Scope)又稱為局部變量的作用范圍,它是變量可被使用的代碼塊范圍;作用域決定了變量的可見性與生存時間。局部變量作用域開始于它的聲明,持續(xù)到包含該局部變量的程序段結束之處。不同類型的局部變量,其作用域也不盡相同3231局部變量的三種類型定義于方法體內的局部變量:這類局部變量僅能在方法內使用,其作用域局限于所定義的方法體。復合語句(或稱為語句塊)中定義的局部變量:這類局部變量只在復合語句中有效。方法的形參也稱為局部變量:這類局部變量的作用域覆蓋整個方法。方法形參在方法被調用時被創(chuàng)建,并以調用方法傳來的實參作為其初始值,當方法終止,調用結束時,這些形參自動被釋放,其生命周期也隨著終止。333132局部變量的使用原則局部變量不允許加Java修飾符局部變量在使用前必須先聲明,并賦初值,否則將出錯方法參數傳遞機制方法的參數是方法的輸入接口,是外界傳遞

溫馨提示

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

評論

0/150

提交評論