學習導讀 本章著重介紹Java編程中類和對象等非常重要的概念_第1頁
學習導讀 本章著重介紹Java編程中類和對象等非常重要的概念_第2頁
學習導讀 本章著重介紹Java編程中類和對象等非常重要的概念_第3頁
學習導讀 本章著重介紹Java編程中類和對象等非常重要的概念_第4頁
學習導讀 本章著重介紹Java編程中類和對象等非常重要的概念_第5頁
已閱讀5頁,還剩58頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、v學習導讀學習導讀v 本章著重介紹本章著重介紹Java編程中類和對象等非常重要的編程中類和對象等非常重要的概念。概念。v Java程序是由一個個類定義組成的,編寫程序是由一個個類定義組成的,編寫Java程序的過程就是從現實世界中抽象出程序的過程就是從現實世界中抽象出Java可實現的可實現的類并用合適的語句定義它們的過程,這個定義過程類并用合適的語句定義它們的過程,這個定義過程包括對類內各種屬性和方法的定義,創建類的對象,包括對類內各種屬性和方法的定義,創建類的對象,也包括類間的各種關系和接口的定義。也包括類間的各種關系和接口的定義。v 方法是類的主要組成部分。在一個類中,程序方法是類的主要組成

2、部分。在一個類中,程序的作用體現在方法中。方法是的作用體現在方法中。方法是Java語言的基本構件。語言的基本構件。利用方法可以組成結構良好的程序。本章介紹方法利用方法可以組成結構良好的程序。本章介紹方法的構成規則和設計、使用方法的基本要點。的構成規則和設計、使用方法的基本要點。v Java的應用程序接口(的應用程序接口(API)大量的軟件包庫。大量的軟件包庫。第4章 類和對象第4章 類和對象v4.1.面向對象的基本概念面向對象的基本概念v4.2 類類v4.3 方法方法v4.4 訪問控制符訪問控制符v4.5 靜態修飾符、靜態字段和方法靜態修飾符、靜態字段和方法v4.6 抽象類與抽象方法抽象類與抽

3、象方法v4.7 最終類、最終屬性、最終方法與終結器最終類、最終屬性、最終方法與終結器v本章小結本章小結v思考與練習思考與練習 4.1.面向對象的基本概念學習要點之二學習要點之二OOD方法提供了抽象數據類型機制,遵循軟件設計的三條重要原則,即抽象、信息隱藏和模塊化;雙重模塊化數據對數據的操作信息處理+封裝4.1.面向對象的基本概念v4.1.1 抽象v1什么是抽象 抽象就是抽出事物的本質特性而暫時不考慮它們的細節。過程抽象和數據抽象是常用的兩種主要抽象手段。 客觀世界的對象和操作 計算機算法 解空間 數據 程序員對問題的表達(抽象) 客觀世界的算法 結果 客觀世界的對象 程序設計的對象和操作 輸出

4、數據 問題空間 v2如何用面向對象的方法實現抽象如何用面向對象的方法實現抽象 一個抽象數據類型(Abstract Data Type,ADT)可以分解成4個部分,如圖4-2所示。語法和語義構成抽象數據類型ADT的說明,讓使用者了解這個抽象數據類型的特征。屬性和方法構成ADT的實現,展示這個ADT是怎樣做成的。 抽象數據類型 說明 實現 語法 語義 屬性 方法 圖4-2 抽象數據類型 v4.1.2 封裝封裝 將信息隱蔽的過程稱為封裝。 有兩方面的原因促使我們控制對成員的訪問。 第一個原因是防止程序員接觸他們不該接觸的東西通常是內部數據類型的設計思想。若只是為了解決特定的問題,用戶只需操作接口即可

5、,毋需明白這些信息。 第二個原因是允許庫設計人員修改內部結構,不用擔心它會對客戶程序員造成什么影響。 v4.1.3 對象對象 可將對象想象對象(可將對象想象對象(objectobject)應是應是實際問題域中有意義的個體或概念實體。實際問題域中有意義的個體或概念實體。此外,對象應該具有記憶自身狀態的能此外,對象應該具有記憶自身狀態的能力。同時對象應該以某種方式與系統發力。同時對象應該以某種方式與系統發生關聯,既對象應該與系統中其他有意生關聯,既對象應該與系統中其他有意義的對象進行消息傳遞,并提供外部服義的對象進行消息傳遞,并提供外部服務。務。 v4.1.3 對象對象l(1) (1) 所有東西都

6、是對象。可將對象想象成一種新型變所有東西都是對象。可將對象想象成一種新型變量;它保存著數據,但可要求它對自身進行操作。量;它保存著數據,但可要求它對自身進行操作。 l(2) (2) 程序是一大堆對象的組合;通過消息傳遞,各對程序是一大堆對象的組合;通過消息傳遞,各對象知道自己該做些什么。象知道自己該做些什么。 l(3) (3) 每個對象都有自己的存儲空間,可容納其他對象。每個對象都有自己的存儲空間,可容納其他對象。l(4) (4) 每個對象都有一種類型。根據語法,每個對象都每個對象都有一種類型。根據語法,每個對象都是某個是某個“類類”的一個的一個“實例實例”。其中,。其中,“類類”(Class

7、Class)是是“類型類型”(TypeType)的同義詞。一個類最重要的特征就的同義詞。一個類最重要的特征就是是“能將什么消息發給它?能將什么消息發給它?”l(5 5)同一類所有對象都能接收相同的消息。)同一類所有對象都能接收相同的消息。 4.2 類 類是現實世界某些對象的共同特征類是現實世界某些對象的共同特征(屬性和操作屬性和操作)的的表示,對象是類的實例表示,對象是類的實例。類的屬性類的屬性:就是類的靜態屬性的簡稱,指類內包就是類的靜態屬性的簡稱,指類內包含的各項數據,如變量或其他類的對象;含的各項數據,如變量或其他類的對象;類的服務類的服務: 則被稱為成員函數或方法。則被稱為成員函數或方

8、法。4.2 類 類的基本定義方法如下:修飾符修飾符 class 類名類名 extends 父類父類 implements 接口名接口名 類成員變量聲明類成員變量聲明 類方法聲明類方法聲明 類的修飾符用來說明類的特殊性質。 分為三種:訪問控制符:public 公共類公共類抽象類說明符:abstract最終類說明符:f inal 接口名跟在implements關鍵字后面,用來說明當前類中實現了哪個接口定義的功能和方法。 接口是Java語言用來實現多重繼承的一種特殊機制,我們將在后面詳細介紹它的使用方法。v1關于類頭關于類頭-class class關鍵字,在它的后面,應跟隨新數據類型的名稱。(注意不

9、要把class寫成Class)。 父類名跟在extends 關鍵字后面,用來說明當前類是哪個已經存在類的子類,存在繼承關系。繼承是類與類之間的一種非常重要的關系。v1關于類頭關于類頭-類的修飾符類的修飾符“public”(公共)公共) 意味著后續的定義任何人均可使用。“private”(私有)私有)意味著除您自己、類型的創建者以及那個類型的內部函數成員,其他任何人都不能訪問后續的定義信息。“protected”(受保護的)受保護的)與“private”相似,只是一個繼承的類可訪問受保護的成員,但不能訪問私有成員。“friendly”(友好的)友好的)若某樣東西是“友好的”,意味著它只能在這個包

10、裝的范圍內使用(所以這一訪問級別有時也叫作“包裝訪問”)。“v1關于類頭關于類頭-接口名接口名接口名跟在接口名跟在implements關鍵字后面,用來關鍵字后面,用來說明當前類中實現了哪個接口定義的功能說明當前類中實現了哪個接口定義的功能和方法。接口是和方法。接口是Java語言用來實現多重繼語言用來實現多重繼承的一種特殊機制,我們將在后面詳細介承的一種特殊機制,我們將在后面詳細介紹它的使用方法。紹它的使用方法。2關于類體關于類體 類體的定義要包括類的具體內容,包括類體的定義要包括類的具體內容,包括類的屬性與方法。類的屬性與方法。class Java中聲明類屬性為簡單變量的語法如下:中聲明類屬性

11、為簡單變量的語法如下: 修飾符修飾符 變量類型變量類型 變量名變量名 =變量初值變量初值; 變量類型和變量名是聲明一個變量必變量類型和變量名是聲明一個變量必不可少的部分;變量的類型是簡單數據類不可少的部分;變量的類型是簡單數據類型,如型,如int、double等。等。2關于類體關于類體-類的屬性類的屬性2關于類體關于類體-類的方法類的方法Java中聲明方法的語法如下:中聲明方法的語法如下: 修飾符修飾符 返回值類型返回值類型 方法名方法名(參數參數列表列表)throws 例外名例外名1,例外名,例外名2, 方法體:方法體: 局部變量聲明;局部變量聲明; 語句序列;語句序列; 類的方法,又稱類的

12、方法,又稱為成員函數,用為成員函數,用來規定類屬性上來規定類屬性上的操作,實現類的操作,實現類的內部功能的機的內部功能的機制,同時也是類制,同時也是類與外界進行交互與外界進行交互的重要窗口。的重要窗口。 類中定義的方法通常起到兩種作用:一是圍繞著類的類中定義的方法通常起到兩種作用:一是圍繞著類的屬性進行各種操作;二是與其他的類或對象進行數據交流、屬性進行各種操作;二是與其他的類或對象進行數據交流、消息傳遞等操作。消息傳遞等操作。注意:系統調用方法的最大特點:注意:系統調用方法的最大特點:不需要在程序里書寫專門的調用不需要在程序里書寫專門的調用方法的命令方法的命令 Java語言中定義的方法有兩類

13、:語言中定義的方法有兩類: 一類是需要程序書寫專門的調用命令來調用的方法,一類是需要程序書寫專門的調用命令來調用的方法,稱為程序調用方法,例如稱為程序調用方法,例如isPrime (); 另一類是運行過程中系統自動調用的方法,稱為系統方另一類是運行過程中系統自動調用的方法,稱為系統方法,例如我們前面程序中的法,例如我們前面程序中的action()、paint()、init()等。這等。這兩類方法的定義和使用原則有很大差異。兩類方法的定義和使用原則有很大差異。 2關于類體關于類體-類的方法類的方法4.2.2 用戶程序自定義類用戶程序自定義類 Java程序員把注意力放在創建稱為類的用戶程序員把注意

14、力放在創建稱為類的用戶自定義類型(自定義類型(user-defined type)上,類也稱上,類也稱為程序員定義的類型(為程序員定義的類型(programmer-defined type),),每個類都含有數據和一組操作數據的每個類都含有數據和一組操作數據的方法,類中的數據部分稱為實例變量。用戶定方法,類中的數據部分稱為實例變量。用戶定義類型(即類)的實例稱為對象。義類型(即類)的實例稱為對象。 下面是一個簡單化的下面是一個簡單化的EmployeeEmployee類,在編寫今后的職工工資類,在編寫今后的職工工資系統時,會用到它。系統時,會用到它。class Employee /構造函數構造函

15、數public Employee(String n,double s,int year,int month,int day) name = n; /職工姓名職工姓名 salary = s; /職工工資職工工資 hireDay=new GregorianCalendar(year,month-1,day);/出勤數出勤數/方法方法1public String getName() return name;/更多的方法更多的方法/屬性的實例屬性的實例private String name;private double salary;private Date hireDay;4.2.3 創建類及類的實

16、例對象創建類及類的實例對象 對象是類的一個實例,類是同種對象的抽象,對象是類的一個實例,類是同種對象的抽象,是創建對象的模板。在程序中創建是創建對象的模板。在程序中創建個對象將在內個對象將在內存中開辟一塊空間,其中包括該對象的屬性和方法。存中開辟一塊空間,其中包括該對象的屬性和方法。 我們將分步講述這個類的實現細節。創建對象使我們將分步講述這個類的實現細節。創建對象使用關鍵字運算符用關鍵字運算符newnew,例如下面的語句將創建例如下面的語句將創建EmployeeEmployee的對象:的對象:【例【例4.14.1】顯示三個員工的相關信息】顯示三個員工的相關信息4.2.3 創建類及類的實例對象

17、創建類及類的實例對象在程序中我們構造了一個在程序中我們構造了一個EmployeeEmployee數組,并給它賦給三個數組,并給它賦給三個EmployeeEmployee對對象象。關于數組我們將在下一章講述。關于數組我們將在下一章講述。 staff0 = staff0 = newnew Employee( Employee(張三張三, 75000,1987, 12, 15);, 75000,1987, 12, 15); staff1 =staff1 = new new Employee(Employee(李四李四, 50000,1989, 10, 1);, 50000,1989, 10, 1);

18、 staff2 = staff2 = newnew Employee( Employee(王五王五, 40000,1990, 3, 15);, 40000,1990, 3, 15); 創建對象以某個類為模板,這個類里定義了哪創建對象以某個類為模板,這個類里定義了哪些屬性和方法,新建的對象就必然在內存里擁有些屬性和方法,新建的對象就必然在內存里擁有相應的屬性和方法。相應的屬性和方法。 可見,相對于簡單數據類型,類就是用戶自己可見,相對于簡單數據類型,類就是用戶自己定義的復雜的抽象數據類型:而相對于簡單變量定義的復雜的抽象數據類型:而相對于簡單變量,對象就是復雜的既包括數據又包括方法代碼的,對象就

19、是復雜的既包括數據又包括方法代碼的復雜數據單位。復雜數據單位。4.2.4 構造函數構造函數v1構造函數的一般概念構造函數的一般概念v2創建自己的構造函數創建自己的構造函數v3構造函數的作用構造函數的作用4.2.4 構造函數構造函數-構造函數的一般概念構造函數的一般概念 要使用對象,首先必須構造它們,并指定它們的初始狀態,要使用對象,首先必須構造它們,并指定它們的初始狀態,然后將方法應用于對象。然后將方法應用于對象。 在在Java程序設計語言中,使用構造函數(程序設計語言中,使用構造函數(constructor)來構來構造新的實例。一個構造函數是一個新的方法,它的作用是構造造新的實例。一個構造函

20、數是一個新的方法,它的作用是構造并初始化對象。并初始化對象。構造函數是類的一種特殊方法,它的特殊性主要體現在如下的構造函數是類的一種特殊方法,它的特殊性主要體現在如下的幾個方面:幾個方面:(1)構造函數的方法名與類名相同。)構造函數的方法名與類名相同。(2)構造函數沒有返回類型。)構造函數沒有返回類型。(3)構造函數的主要作用是完成對類對象的初始化工作。)構造函數的主要作用是完成對類對象的初始化工作。(4)構造函數不能由編程人員顯式地直接調用。)構造函數不能由編程人員顯式地直接調用。(5)在創建一個類的新對象的同時,系統會自動調用該類的)在創建一個類的新對象的同時,系統會自動調用該類的構造函數

21、為新對象初始化。構造函數為新對象初始化。4.2.4 構造函數構造函數-創建自己的構造函數創建自己的構造函數 構造函數的名字和類的名字是相同的。當構造構造函數的名字和類的名字是相同的。當構造Employee類的對象時,此構造函數被啟動,實例字段賦初值,在類的對象時,此構造函數被啟動,實例字段賦初值,在Java中,定義和初始化是統一的中,定義和初始化是統一的兩者缺一不可。兩者缺一不可。 例如,用下面的代碼創建例如,用下面的代碼創建Employee類的一個實例時,類的一個實例時,new Employee (“James Bond”,100000,1950,1,1);構造函數的特點有:構造函數的特點有

22、:(1 1)構造函數和類具有相同的名字。)構造函數和類具有相同的名字。(2 2)一個類可以有多個構造函數。)一個類可以有多個構造函數。(3 3)構造函數可以有)構造函數可以有0 0個、個、1 1個或多個參數。個或多個參數。(4 4)構造函數沒有返回值。)構造函數沒有返回值。(5 5)構造函數總是和)構造函數總是和newnew運算符一起被調用。運算符一起被調用。4.2.4 構造函數構造函數-構造函數的作用構造函數的作用(1)對象初始化)對象初始化(2 2)引入更多的靈活度(變量賦值或更復雜的操作)引入更多的靈活度(變量賦值或更復雜的操作)(3)Java中可以不定義構造函數中可以不定義構造函數 J

23、ava中可以不定義構造函數,此時系統會自動為該系統中可以不定義構造函數,此時系統會自動為該系統生成一個默認的構造函數。這個構造函數的名字與類名相生成一個默認的構造函數。這個構造函數的名字與類名相同,它沒有任何形式參數,也不完成任何操作。同,它沒有任何形式參數,也不完成任何操作。 為了避免失去控制,一般將構造函數的聲明與創建分開為了避免失去控制,一般將構造函數的聲明與創建分開處理。處理。 4.3.1 方法概述方法概述4.3 方法 Java程序是由一個個類定義組成的,類有兩個部分:程序是由一個個類定義組成的,類有兩個部分:屬性和方法。屬性描述類是什么,屬性和方法。屬性描述類是什么,方法描述類做什么

24、方法描述類做什么。任。任何對象都有獨立的內存存儲它的屬性。類的所有的對象共何對象都有獨立的內存存儲它的屬性。類的所有的對象共享存貯在內存的方法。享存貯在內存的方法。 換言之:方法是類的主要組成部分。在一個類中,程換言之:方法是類的主要組成部分。在一個類中,程序的作用體現在方法中。序的作用體現在方法中。 方法即是方法即是JAVA創建一個有名字的子程序。一個主方法創建一個有名字的子程序。一個主方法和若干個子方法構成。主方法調用其他方法,其他方法間和若干個子方法構成。主方法調用其他方法,其他方法間也可互相調用,同一個方法可被一個或多個方法調用任意也可互相調用,同一個方法可被一個或多個方法調用任意次。

25、次。 4.3.1 方法概述方法概述Java程序的基本結構如下:程序的基本結構如下:引入引入Java類庫;類庫;定義用戶類定義用戶類1 定義類定義類1的若干變量或對象:的若干變量或對象: 定義類定義類1的方法的方法1; 定義類定義類1的方法的方法2;定義類定義類1的方法的方法M1;定義用戶類定義用戶類2定義類定義類2的若干變量或對象:的若干變量或對象:定義類定義類2的方法的方法1;定義類定義類2的方法的方法2;定義類定義類2的方法的方法M24.3.1 方法概述方法概述 Java語言的方法實現子任務處理時,有下面幾語言的方法實現子任務處理時,有下面幾個原則與規律:個原則與規律:(1)算法中需要細化

26、的步驟、程序中重復的代碼)算法中需要細化的步驟、程序中重復的代碼以及重載父類方法都可以定義成類的方法。以及重載父類方法都可以定義成類的方法。(2)界面清晰。)界面清晰。(3)大小適中。)大小適中。(4)方法有兩種:一種是標準方法,)方法有兩種:一種是標準方法,Java API提提供了豐富的類和方法,這些方法提供了程序員所需供了豐富的類和方法,這些方法提供了程序員所需的許多功能。另一種是用戶自定義的方法,以解決的許多功能。另一種是用戶自定義的方法,以解決用戶專門需要。用戶專門需要。(5)Java應用程序中,程序的執行從應用程序中,程序的執行從main類開始,類開始,調用其他方法后又回到調用其他方

27、法后又回到main類,在類,在main類中結束類中結束整個程序的運行。整個程序的運行。4.3.2 定義方法定義方法v1聲明方法頭聲明方法頭v2聲明方法體聲明方法體Java中聲明方法的語法如下:中聲明方法的語法如下: 修飾符修飾符 返回值類型返回值類型 方法名方法名(參數參數列表列表)throws 例外名例外名1,例外名,例外名2, 方法體:方法體: 局部變量聲明;局部變量聲明; 語句序列;語句序列; 類的方法,又稱類的方法,又稱為成員函數,用為成員函數,用來規定類屬性上來規定類屬性上的操作,實現類的操作,實現類的內部功能的機的內部功能的機制,同時也是類制,同時也是類與外界進行交互與外界進行交互

28、的重要窗口。的重要窗口。4.3.2 定義方法定義方法-聲明方法頭聲明方法頭1聲明方法頭聲明方法頭 方法頭一般由方法名、參數列表、返回類型、方法頭一般由方法名、參數列表、返回類型、方法修飾符和方法拋出的例外五部分組成。方法修飾符和方法拋出的例外五部分組成。(1)方法名可以是任何有效的標識符,命名規則與標識符命名規則相同。(2)類型說明符用來指定方法返回值的類型,方法最多只能返回一個值。(3)參數列表是方法的輸入接口,它列出了一系列形式參數的類型和名稱,在方法參數表的右括號后加一個分號是語法錯誤。參數表以逗號為分隔符,其中包含了方法被調用時傳遞給方法的參數說明。對于方法定義中的每一個參數,方法調用

29、時必須有一個參量與之對應,而且該參量的類型必須與對應參數類型相一致。4.3.2 定義方法定義方法-聲明方法體聲明方法體方法頭定義了方法的性質,方法體則定義了方法的具體內容。方法頭定義了方法的性質,方法體則定義了方法的具體內容。 方法體通常起到兩種作用,一是圍繞類的屬性進行各種操作;方法體通常起到兩種作用,一是圍繞類的屬性進行各種操作;二是與其他的類與對象進行數據交流、消息傳遞等操作。二是與其他的類與對象進行數據交流、消息傳遞等操作。在一個方法中定義另一個方法將產生語法錯誤。在一個方法中定義另一個方法將產生語法錯誤。(1)最好避免局部變量)最好避免局部變量“屏蔽屏蔽”實例變量,在一個類中不使實例

30、變量,在一個類中不使用同名標識符就可以做到這一點;方法調用中參數用來傳遞數用同名標識符就可以做到這一點;方法調用中參數用來傳遞數值、傳遞引用,同時方法還可以嵌套、遞歸調用。值、傳遞引用,同時方法還可以嵌套、遞歸調用。(2)方法體中如果指定了非)方法體中如果指定了非void的返回值類型,方法中就必的返回值類型,方法中就必須包含一條須包含一條return語句保證任何情況下都有返回數值,語句保證任何情況下都有返回數值,return語句后面語句后面(不能跟任何表達式不能跟任何表達式?);4.3.2 定義方法定義方法-聲明方法體聲明方法體例如下面的語句為部門類例如下面的語句為部門類Department定

31、義了若干方法:定義了若干方法:Class Department int m_ DeptNo; 部門編號部門編號 String m_DeptName; 部門名稱部門名稱 int m_DeptTotalEmp;部門雇員數部門雇員數 ManagerEmployee m_DeptMgr; 部門主管部門主管 int getDeptNo( ) 獲取當前對象的部門號獲取當前對象的部門號 return _DeptNo; 返回這個對象的部門號返回這個對象的部門號 v4.3.3 方法的調用方法的調用v1系統調用方法系統調用方法v2程序調用方法程序調用方法 Java語言中調用方法有兩類:語言中調用方法有兩類: 一類

32、是需要程序書寫專門的調用命令來調用的方法,一類是需要程序書寫專門的調用命令來調用的方法,稱為程序調用方法,例如稱為程序調用方法,例如isPfime (); 另一類是運行過程中系統自動調用的方法,稱為系統方另一類是運行過程中系統自動調用的方法,稱為系統方法,例如我們前面程序中的法,例如我們前面程序中的action()、paint()、init()等。這等。這兩類方法的定義和使用原則有很大差異。兩類方法的定義和使用原則有很大差異。 注意:系統調用方法的最大特點:不需要在程序里書寫專門的調用方法的命令v4.3.3 方法的調用方法的調用 在類中調用類自身的方法,可以直接使用這個方法的在類中調用類自身的

33、方法,可以直接使用這個方法的名稱;調用其他對象或類的方法,則需要使用該對象或類名稱;調用其他對象或類的方法,則需要使用該對象或類為前綴。例如在為前綴。例如在isSameDept( )方法中,語句方法中,語句 if(getDeptNo( )dgetDeptNo( )中通過中通過getDeptNo( )調用當前對象自身的方法并獲得當前對調用當前對象自身的方法并獲得當前對象的部門號,通過象的部門號,通過dgetDeptNo( )調用形式參數調用形式參數d的方法獲的方法獲得得d的部門編號。這里的形式參數的部門編號。這里的形式參數d也是一個也是一個Depamnent類類的對象。的對象。v4.3.3 方法

34、的調用方法的調用(實例實例)boolean setDeptNo(int NewNo) /把當前部門號重新設置稱參數值把當前部門號重新設置稱參數值 if( NewNo 0) /若給出的新部門號合法若給出的新部門號合法 m_DeptNo=NewNo;/修改類屬性修改類屬性m_DeptNo return true; /返回返回true,聲明部門編號修改成功聲明部門編號修改成功 else return false; /若形式參數給出新部門號非法,返回若形式參數給出新部門號非法,返回false 4.3.4 Java API中的方法中的方法 1Math類的方法類的方法2Math方法的調用實例方法的調用實例

35、 在Java中,Java API(Application Program Interface,也稱為Java類庫)提供了豐富的類和方法,可以執行常見的算術運算、字符串操作、字符操作、輸入輸出、錯誤檢查等操作。4.3.4 Java API中的方法中的方法-Math類的方法類的方法 方法方法說明說明方法方法說明說明abs(x)x的絕對值的絕對值(這個方法還有這個方法還有float,int和和long型值的版本型值的版本)max(x,y)取取x和和y中較大者。中較大者。ceil(x)不小于不小于x的最小整數的最小整數(向上取整向上取整)min (x,y)取取x和和y中較小者。中較小者。cos(x)x

36、的余弦函數值的余弦函數值(x以弧度為單以弧度為單位位)pow (x,y)x的的y次冪次冪exp(x)指數方法指數方法e的的x次冪次冪sin (x)x的正弦函數值的正弦函數值(x以弧度為單位以弧度為單位)floor(x)不大于不大于x的最大整數的最大整數(向下取整向下取整)sqrt (x)x的平方根的平方根log(x)x的自然對數的自然對數(以以e為底為底) 4.3.4 Java API中的方法中的方法-Math方法的調用實例方法的調用實例 調用方法的一般格式是先寫方法名,然后是左括號,調用方法的一般格式是先寫方法名,然后是左括號,接著是參數(接著是參數(argument)或由逗號分隔的參數表,

37、最或由逗號分隔的參數表,最后是右括號。例如,要計算并且打印出后是右括號。例如,要計算并且打印出900的平方根,的平方根,調用方法的語句格式:調用方法的語句格式:System.out.prtntln(Math.sqrt(900);注意,所有Math類方法的調用必須采用方法名前冠以類名Math和點(.)運算符的形式。【例 4.2】擲一個六面骰子6000次的程序 4.4 訪問控制符訪問控制符 Java推出了“訪問控制修飾符”的概念,允許庫創建者聲明哪些東西是客戶程序員可以使用的,哪些是不可使用的。這種訪問控制的級別在“最大訪問”和“最小訪問”的范圍之間,分別包括:public,“defaut”(無關

38、鍵字),protected以及private。下面的列表說明訪問控制修飾符含義: 類的訪問控制修飾符(一種符號)類的訪問控制修飾符(一種符號) public公共訪問公共訪問屬性與方法的訪問控制修飾符(四種符號)屬性與方法的訪問控制修飾符(四種符號) 符號符號publicprotectedprivate protectedprivate 含義含義公共訪問公共訪問保護訪問保護訪問私有保護訪問私有保護訪問私有訪問私有訪問 4.4 訪問控制符訪問控制符v4.4.1 公共訪問控制符公共訪問控制符public Java中類的訪問控制符只有一個:public,即公共的。一個類被聲明為公共類,表明它可以被所有

39、的其他類所訪問和引用,這里的訪問和引用是指這個類作為整體是可見和可使用的,程序的其他部分可以創建這個類的對象、訪問這個類內部可見的成員變量和調用它的可見的方法。 一個類作為整體對程序的其他部分可見,并不能代表類內的所有屬性和方法也同時對程序的其他部分可見,前者只是后者的必要條件,類的屬性和方法能否為所有其他類所訪問,還要看這些屬性和方法自己的訪問控制符。 實例字段應用public關鍵字,這是一種非常糟糕的做法,破壞封裝。4.4.2 缺省訪問控制符缺省訪問控制符 假如一個類沒有訪問控制符,說明它具有缺省的訪問控制特性。這種缺省的訪問控制權規定該類只能被同一個包中的類訪問和引用,而不可以被其他包中

40、的類使用,這種訪問特性稱為包訪問性。通過聲明類的訪問控制符可以使整個程序結構清晰、嚴謹,減少可能產生類間干擾和錯誤。 4.4.3 私有訪問控制符私有訪問控制符private 用private修飾的屬性或方法只能被該類自身所訪問和修改,而不能被任何其他類,包括該類的子類,來獲取和引用。 v1. 對私有數據訪問的方法對私有數據訪問的方法例如有三個實例字段,它們含有在Employee類的實例內部被操作的數據。private string name;private double salary;private Date hireDay; private(私有的)關鍵字用來確保可以訪問這些實例字段的只能是

41、Employee類本身的方法。 4.4.3 私有訪問控制符私有訪問控制符privatev2. 私有方法私有方法 在實現類時,我們使所有的數據字段都是私有的,因為公開的數據是危險的。對于方法又是什么情況呢 ?雖然大多數方法是公開的,但是私有方法也經常使用。這些方法只能被同一個分離的方法。 總起來說,在下面的情況下可以選擇私有方法:(1)與類的使用者無關的那些方法。 (2)如果類的實現改變了,不容易維護的那些方法。 4.4.4 保護訪問控制符保護訪問控制符protectedv 用用protected修飾的成員變量可以被三種類所引修飾的成員變量可以被三種類所引用:該類自身、與它在同一個包中的其他類、

42、在其用:該類自身、與它在同一個包中的其他類、在其他包中的該類的子類。使用他包中的該類的子類。使用protected修飾符的主要修飾符的主要作用是允許其他包中的它的子類來訪問父類的特定作用是允許其他包中的它的子類來訪問父類的特定屬性。屬性。v protected關鍵字為我們引入了一種名為關鍵字為我們引入了一種名為“繼承繼承”的概念,它以現有的類為基礎,并在其中加入新的的概念,它以現有的類為基礎,并在其中加入新的成員,同時不會對現有的類產生影響成員,同時不會對現有的類產生影響我們將這我們將這種現有的類稱為種現有的類稱為“基礎類基礎類”或者或者“基本類基本類”(Base Class)。)。亦可改變那

43、個類現有成員的行為。對于從亦可改變那個類現有成員的行為。對于從一個現有類的繼承,我們說自己的新類一個現有類的繼承,我們說自己的新類“擴展擴展”(extends)了那個現有的類。了那個現有的類。 v4.4.5 私有保護訪問控制符私有保護訪問控制符private protected private和protected按順序連用構成一個完整的訪問控制符:私有保護訪問控制符。用privateprotected修飾的成員變量可以被兩種類訪問和引用,一種是該類本身,一種是該類的所有子類,不論這些子類是與該類在同一個包里,還是處于其他的包中。 相對于protected,privateprotected修飾符

44、把同一包內的非子類排除在可訪問的范圍之外,使得成員變量更專有于具有明確繼承關系的類,而不是松散地組合在一起的包。 訪問控制符訪問控制符 當前當前類類 (D)當前類的所有子當前類的所有子類類(C)當前類所在的當前類所在的包包(B) 所有類所有類(A) privateprotected* publicprivate protected A:所所有有類類 D:本本類類 B:包包中中的的類類 C:所所有有子子類類 E:包包中中 子子類類 圖圖4-3 程序中的訪問控制區域程序中的訪問控制區域4.5靜態修飾符、靜態字段和方法v4.5.1 靜態修飾符靜態修飾符 (2)另一種情形是我們需要一個特殊的方法,它沒

45、有與這個類的任何對象關聯。也就是說,即使沒有創建對象,也需要一個能調用的方法。 static一項重要的用途就是幫助我們在不必創建對象的前提下調用那個方法。 4.5靜態修飾符、靜態字段和方法v4.5.1 靜態修飾符靜態修飾符 static稱為靜態修飾符,它可以修飾類中的屬性和方法。使用static(靜態)關鍵字,可滿足兩方面的要求:(1)一種情形是只想用一個存儲區域來保存一個特定的數據無論要創建多少個對象,甚至根本不創建對象;被static修飾的屬性稱為靜態屬性,這類屬性一個最本質的特點是:它們是類的屬性,而不屬于任何一個類的具體對象。換句話說,對于該類的任何一個具體對象而言,靜態屬性是一個公共

46、的存儲單元,任何一個類的對象訪問它時,取到的都是相同的數值,同樣任何一個類的對象去修改它時,也都是在對同一個內存單元做操作。v4.5.2 靜態字段靜態字段 如果把一個字段定義為如果把一個字段定義為static.(靜態的),那么在一個類中只能有靜態的),那么在一個類中只能有一個這類字段。一個這類字段。 v4.5.3 靜態常量靜態常量 靜態變量是很少見的。然而,靜態常量卻很普遍。例如,靜態變量是很少見的。然而,靜態常量卻很普遍。例如,MathMath類中定類中定義了一個靜態常量:義了一個靜態常量:public class Mathpublic class Math public static fi

47、nal double PI=3.1.4159265358979323846;public static final double PI=3.1.4159265358979323846; v4.5.4 靜態方法靜態方法v4.5.5 main方法方法4.5.4 靜態方法靜態方法 聲明一個方法為聲明一個方法為static至少有三重含義:至少有三重含義:(1)使用這個方法時,應該使用類名做前綴,而不是某一)使用這個方法時,應該使用類名做前綴,而不是某一個具體的對象名;個具體的對象名;(2)static的方法是屬于某個對象的方法,在這個對象創建的方法是屬于某個對象的方法,在這個對象創建時對象的方法在內存

48、中擁有自己專用的代碼段;而時對象的方法在內存中擁有自己專用的代碼段;而static的方法是屬于整個類的,它在內存中的代碼段將隨著類的方法是屬于整個類的,它在內存中的代碼段將隨著類的定義而分配和裝載,不被任何一個對象專有;的定義而分配和裝載,不被任何一個對象專有;(3)由于)由于static方法是屬于整個類的,所以它不能操縱和處方法是屬于整個類的,所以它不能操縱和處理屬于某個對象的成員變量,而只能處理屬于整個類的理屬于某個對象的成員變量,而只能處理屬于整個類的成員變量。成員變量。 4.5.5 main方法方法 main方法并不對任何對象施加操作。實際上,當程方法并不對任何對象施加操作。實際上,當

49、程序開始執行時,還不存在任何對象。靜態方法被執行,序開始執行時,還不存在任何對象。靜態方法被執行,并構造程序所需的對象。并構造程序所需的對象。 提示提示 每個類都可以有一個每個類都可以有一個main方法。這是對類進行方法。這是對類進行單元測試的一個很方便技巧。單元測試的一個很方便技巧。 4.6抽象類與抽象方法v4.6.1 抽象類抽象類v當一個類被聲明為abstract時,這個類被稱為是抽象類。所謂抽象類就是沒有具體實例對象的類。v針對這個問題,Java專門提供了一種機制,名為“抽象方法”。它屬于一種不完整的方法,只含有一個聲明,沒有方法主體。下面是抽象方法聲明時采用的語法:vabstract

50、void X();v人類就是一個典型的抽象類。我們知道,類是對象的集合,對象是類的實例化,而人類這個類卻不存在一個僅屬于它的具體對象。 abstract是抽象修飾符,可以用來修飾類或方法。v4.6.2 抽象方法抽象方法 作為類方法修飾符,作為類方法修飾符,abstract則聲明了一則聲明了一種僅有方法頭,而沒有具體的方法體和操作種僅有方法頭,而沒有具體的方法體和操作實現的抽象方法。實現的抽象方法。 可見,可見,abstractabstract方法只有方法頭的聲明,方法只有方法頭的聲明,而用一個分號來代替方法體的定義:至于方而用一個分號來代替方法體的定義:至于方法體的具體實現,那是由當前類的不同

51、子類法體的具體實現,那是由當前類的不同子類在它們各自的類定義中完成的。在它們各自的類定義中完成的。 需要特別注意的是,所有的抽象方法,都必須需要特別注意的是,所有的抽象方法,都必須存在于抽象類之中。存在于抽象類之中。 除了抽象方法,抽象類也可以有具體的數據和除了抽象方法,抽象類也可以有具體的數據和方法。例如,方法。例如,PersonPerson類存儲人的名字并且用一個類存儲人的名字并且用一個具體的方法來返回它。具體的方法來返回它。 在在Java編程語言中抽象方法是非常重要的概念。編程語言中抽象方法是非常重要的概念。在接口里你會大量的用到它。在接口里你會大量的用到它。 4.7最終類、最終屬性、最

52、終方法與終結器final是最終修飾符,它可以修飾類、屬性和方法。另外終結器的關鍵字與final很相近,一并介紹。4.7.1 最終類最終類 如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為abstract的,又被聲明為final的。被定義成final的類,通常是一些有特殊作用的、用來完成標準功能的類,將一個類定義為final則可以將它的內容、屬性和功能固定下來,與它的類名形成穩定的映射關系,從而保證引用這個類時所實現的功能是準確無誤的。 v4.7.2 最終屬性最終屬性 無論無論static還是還是final字段,都只能存儲一個數據,字段,都

53、只能存儲一個數據,而且不得改變。而且不得改變。 許多程序設計語言都有自己的辦法告訴編譯器某許多程序設計語言都有自己的辦法告訴編譯器某個數據是個數據是“常數常數”。常數主要應用于下述兩個方面:。常數主要應用于下述兩個方面:(1)編譯期常數,它永遠不會改變;)編譯期常數,它永遠不會改變;(2)在運行期初始化的一個值,我們不希望它發生)在運行期初始化的一個值,我們不希望它發生變化。變化。 可以把一個實例字段定義為可以把一個實例字段定義為final(不能改變的不能改變的)。在對象被構造時,這種字段必須被初始化。即,必在對象被構造時,這種字段必須被初始化。即,必須保證在每一個構造函數結束之前其值已被設定

54、。須保證在每一個構造函數結束之前其值已被設定。以后字段的值不能改變。以后字段的值不能改變。4.7.3 最終方法最終方法 之所以要使用之所以要使用final方法,可能是出于對兩方面理由的考方法,可能是出于對兩方面理由的考慮。慮。 第一個是為方法第一個是為方法“上鎖上鎖”,防止任何繼承類改變它的本來,防止任何繼承類改變它的本來含義。設計程序時,若希望一個方法的行為在繼承期間保持含義。設計程序時,若希望一個方法的行為在繼承期間保持不變,而且不可被覆蓋或改寫,就可以采取這種做法。不變,而且不可被覆蓋或改寫,就可以采取這種做法。 采用采用final方法的第二個理由是程序執行的效率方法的第二個理由是程序執

55、行的效率。 4.8 本章小結 v1.關于類關于類v必須要學會如何創建、引用和繼承已建立的類。必須要學會如何創建、引用和繼承已建立的類。Java程序程序的基本單位是類。類的定義可以看作是建立對象的原形。的基本單位是類。類的定義可以看作是建立對象的原形。你建立類之后,就可用它來建立許多你需要的對象。你建立類之后,就可用它來建立許多你需要的對象。Java把每一個可執行的成分都變成類,使面向對象發展到極點。把每一個可執行的成分都變成類,使面向對象發展到極點。v類的基本定義方法如下:類的基本定義方法如下:v修飾符修飾符 class 類名類名 extends 父類父類 implements 接口名接口名vv 類成員變量聲明類成員變量聲明v 類方法聲明類方法聲明v2關于對象關于對象v 對象是類的一個實例,類是同種對象的抽象對象是類的一個實例,類是同種對象的抽象綜合,是創建對象的模板。在程序中創建綜合,

溫馨提示

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

評論

0/150

提交評論