隨著微電子技術的崛起,電子計算機、網絡通信、多媒體等IT信息技術的應用發展日新月異。作為信息化的核心支撐和關鍵技術,程序設計、軟件開發、系統集成、網絡布設等不僅在企業經營、政府管理、社會生活中發揮著重要作用,而且有力、有效地促進和推動著國民經濟信息化快速發展的進程。
跨平臺網絡語言Java在網絡開發、網絡系統集成、網絡應用中發揮著重要作用,并伴隨因特網的廣泛應用而得以迅速普及;“Java程序設計”是計算機專業重要的核心課程,也是計算機網絡及軟件相關專業中常設的一門專業課;學習掌握好Java程序設計已經成為網站及網絡信息系統從業工作的先決和必要條件。
本書作為高等教育計算機應用專業的特色教材,堅持科學發展觀、以學習者應用能力培養與提高為主線,嚴格按照教育部關于“加強職業教育、突出實踐技能和能力培養”的教學改革要求編寫。本書的出版不僅有力配合了高等教育計算機應用教學的創新和教材的更新,也體現了應用型大學辦學育人注重職業性、實踐性、應用性的特色。
全書共10章,根據Java程序設計操作規程,采用“任務驅動、案例教學”的方法,系統介紹Java開發和運行環境、Java基本語法、面向對象的程序設計、圖形界面設計、文件輸入/輸出流操作、線程、網絡和數據開發基礎等知識,并通過加強實踐實訓,提高應用能力與應用技能。
本書融入了Java程序設計的最新實踐教學理念,力求嚴謹,注重與時俱進,具有知識系統、案例豐富、敘述簡潔、突出實用性等特點。本書可以作為大學本科和高職高專院校計算機及相關專業Java語言程序設計的首選教材,也可作為企事業單位IT從業者的在職培訓用書,對于Java自學者也是一本有益的科技讀物。
本書由李大軍籌劃并具體組織,高虎和曹記東任主編、高虎統改稿,翟然、李梓任副主編;由劉靖宇教授審定。作者編寫分工:牟惟仲編寫序言,高虎編寫第1~3章,曹記東編寫第4章,李梓編寫第5和6章,翟然編寫第7和8章,王耀編寫第9和10章;李曉新負責文字版式修改和制作教學課件。
在本書編寫過程中,我們參閱和借鑒了中外有關Java程序設計與應用的最新書刊、網站資料,并得到有關專家的具體指導,在此一并致謝。為了方便教學,本書配有電子課件,讀者可以登錄清華大學出版社網站(www.tup.com.cn)免費下載使用。因作者水平有限,書中難免存在疏漏和不足,在此懇請專家、同行和讀者予以批評指正。
編者2017年5月
第3章類和對象學習目標理解類和對象的概念、方法定義和方法調用。
掌握方法的重載和重寫。
掌握修飾符、類變量和類方法。
掌握static、this、final等關鍵字。
了解抽象類和接口以及包的概念。
3.1類和對象的概念
把客觀世界中的事物映射到面向對象的程序設計中就是對象。對象是面向對象程序設計中用來描述客觀事物的程序單位。客觀世界中的許多對象,無論其屬性還是其行為常常有許多共同性,抽象出這些對象的共同性便可以構成類。所以,類是對象的抽象和歸納,對象是類的實例。
3.1.1類和對象概述
客觀世界由許多具體事物構成,而這些事物都具有一定的靜態以及動態屬性。將事物放置到某一個特定的問題中,就將事物抽象成了一個對象。
對象即一組數據,用來描述對象的靜態特征。在Java程序中,把這一組數據稱為數據成員。
對象標識即對象的名字,是用戶和系統識別它的唯一標志。對象標識有“外部標識”和“內部標識”之分。外部標識供對象的定義者或使用者用,內部標識供系統內部唯一地識別每一個對象。
方法也稱為服務或操作,它是對象動態特征(行為)的描述。每一個方法確定對象的一種行為或功能,為避免混淆,本書中把方法稱為成員方法。
在Java程序中,類是創建對象的模板,對象是類的實例,任何一個對象都是隸屬于某個類的。3.1.2類的定義
對象是對事物的抽象,而類是對對象的抽象和歸納。分類所依據的原則是抽象,即抽象出能反映與當前目標有關的本質特征,而忽略那些與當前目標無關的非本質特征,從而找出事物的共性,把具有共同性質的事物歸結為一類,得出一個抽象的概念——類。在描述類時需要指明以下幾種方面。
(1)類的標識:一種區別類的工具,也稱為類的名字。
(2)類的屬性說明:用來描述相同對象的靜態特征。
(3)類的說明方法:用來描述相同對象的動態特征。
例如,定義一個類的程序如下。classHusky//定義一種class類,Husky是類的標識
{
Stringname;
intAverageWeight;
intAverageHeight;
publicvoidmove()類的屬性(靜態)
{...}
publicvoidShowHusky()
{...}
}類的說明方法(動態)Husky類3.1.3構造方法
Java構造方法是定義在Java類中的一個用來初始化對象的方法,它是使用new+構造方法創建一個新的對象。并且方法名與類名必須相同,沒有返回值,在對象創建時被調用。根據需求定義有參構造方法和無參構造方法。
例31無參構造方法的使用。main():
Telphonephone=newTelphone();
classTelphone;
publicTelphoe(){
System.out.pritln("無參構造方法執行了!");
}此函數沒有參數卻能夠執行,是因為在無參函數中,系統會自定義一個參數,如果不滿意定義的參數,也可以修改自定義參數。
例32有參構造方法的使用。main():
Telphonephone2=newTelphone(4.0f,2.0f,2.0f);
classTelphone:
publicTelphone(floatnewScreen,floatnewCpu,floatnewMem){
screen=newScreen;
cpu=newCpu;
mem=newMem;
}有參構造方法與無參構造方法不同的就是寫了一個參數列表,然后將參數列表里面的值賦給了成員變量。
在程序中,當沒有指定構造方法時,系統會自動添加無參函數的構造方法;當有指定構造方法時,無論是有參、無參的構造方法,都不會自動添加無參構造方法。
在一個類中,方法名相同,但參數不同的多個方法可以相互調用,在調用時會自動根據不同的參數選擇相應的方法。這就是構造方法的重載。而上面所寫的有參構造方法和無參構造方法就相當于構造方法的重載。
例33構造方法的重載。publicStudent(Stringname){
System.out.println("這是帶一個String類型的構造方法");
this.name=name;
}
publicStudent(intage){
System.out.println("這是帶一個int類型的構造方法");
this.age=age;
}
publicStudent(Stringname,intage){
System.out.println("這是一個帶多個參數的構造方法");
this.name=name;
this.age=age;
}
publicvoidshow(){
System.out.println(name+"---"+age);
}3.1.4類的實例化——對象的構造
有如下程序:Students1;
s1=newStudent("Lisa","Male",1,18);其中,Students1為引用類型變量分配應用空間。
newStudent("Lisa","Male",1,18)有3個作用:①創建新對象,并進行屬性(實例變量)的默認初始化;②執行構造方法,將傳遞進來的參數的值分別賦給對象屬性;③對引用類型變量s1賦值。將新創建的Student對象的存儲空間的首地址賦給s1。
……