




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、JAVA初級編程初級編程 第四章 類和對象(二) 劉彬 1本次課程目標本次課程目標方法重載方法重載重載構(gòu)造方法重載構(gòu)造方法thisthis關(guān)鍵字關(guān)鍵字StaticStatic關(guān)鍵字關(guān)鍵字塊塊包包2本章詞匯本章詞匯this這,這個這,這個static靜態(tài)的靜態(tài)的package包裹,包包裹,包import引入,導入引入,導入overloaded重載,超載重載,超載overloaded method方法重載方法重載方法方法4方法的定義方法的定義方法的名稱方法的名稱參數(shù)列表參數(shù)列表方法的主體方法的主體方法返回類型方法返回類型方法定義與調(diào)用方法定義與調(diào)用 和C的函數(shù)一樣,Java中的方法是執(zhí)行某個功能的
2、代碼塊.定義的形式也基本和函數(shù)一樣修飾符修飾符 返回類型返回類型 方法名方法名(參數(shù)列表參數(shù)列表) 異常異常 方法主體方法主體 return var Java中的方法可以定義在中的方法可以定義在class塊中的任何地方塊中的任何地方 Java中的方法通過引用名中的方法通過引用名.方法名的形式調(diào)用方法名的形式調(diào)用方法原型方法重載方法重載 在在JavaJava中還允許方法同名中還允許方法同名, ,被稱為方法重載被稱為方法重載 用于定義一組方法,這些方法具有相同的名稱,并執(zhí)行類用于定義一組方法,這些方法具有相同的名稱,并執(zhí)行類似的操作,但是卻使用不同的參數(shù)列表;似的操作,但是卻使用不同的參數(shù)列表;
3、編譯器會根據(jù)調(diào)用時傳遞的實際參數(shù)自動判斷具體調(diào)用的編譯器會根據(jù)調(diào)用時傳遞的實際參數(shù)自動判斷具體調(diào)用的是哪個重載方法,如:是哪個重載方法,如:/*abs方法的重載*/int abs(int x) float abs(float x) double abs(double x) long abs(long x) 方法重載的三大原則方法重載的三大原則 方法名相同方法名相同 參數(shù)不同(可以有三方面的不同)參數(shù)不同(可以有三方面的不同)數(shù)量不同數(shù)量不同類型不同類型不同順序不同順序不同 同一個作用域同一個作用域 溫馨提示:方法重載跟方法的返回值類型沒有任何關(guān)系溫馨提示:方法重載跟方法的返回值類型沒有任何關(guān)系
4、。也就是說,只有返回值不同的方法不能構(gòu)成重載。也就是說,只有返回值不同的方法不能構(gòu)成重載。/*錯誤的方法重載*/void fun(int x) ;int fun(int x) ;方法重載的兩種方式之一方法重載的兩種方式之一 利用不同數(shù)據(jù)類型的參數(shù)重載; 對于帶有相同數(shù)量參數(shù)但參數(shù)類型不同的重載方法,編譯器可以區(qū)分它們,如: 只要所有參數(shù)式樣都是唯一的,就可以使用多個重載; 很多編程語言已經(jīng)重載了輸出方法,以便您可以用相同的方法名稱輸出任何類型的數(shù)據(jù)。int square(int x) float square(float x) double square(double x) 方法重載的兩種方式
5、之二方法重載的兩種方式之二 利用不同數(shù)量的參數(shù)重載,如: 將調(diào)用與參數(shù)最匹配的方法,如果沒有方法得出最佳匹配,那么編譯器將報錯;編譯器解決重載的方式與方法定義的順序無關(guān);重載不考慮方法的返回值類型。/*函數(shù)定義*/int fun(int n1) int fun(int n1, int n2, int n3) /*函數(shù)調(diào)用*/fun(a);fun(x, y, z);方法重載的作用域規(guī)則方法重載的作用域規(guī)則 只有屬于同一個類的方法才能構(gòu)成重載。class First public void show() class Second public void show(int x) 不構(gòu)成重載課堂練習課
6、堂練習1在Java中,對于成員方法float add(float f1, float f2) 下面選項()是對該成員方法的重載。int add(int n1, int n2) float add(float f) float add(float f2, float f1) void add(float f1, float f2) void add(float f1, float f2, float x) 課堂練習課堂練習2在Java中,下列方法()不能與int fun(int x) 構(gòu)成方法重載。int fun(int x, int y) float fun(int x) int fun(fl
7、oat x) int fun(int x, int y, int z) 關(guān)于方法重載的重要提示關(guān)于方法重載的重要提示請勿將功能完全不一樣的方法進行重載!重載構(gòu)造方法重載構(gòu)造方法 方法重載的一個重要應用就是重載構(gòu)造方法; 可以定義一組構(gòu)造方法,使其構(gòu)成重載關(guān)系,從而方便使用者能夠靈活機動地以各種不同的方式來實例化對象。重載構(gòu)造方法示例重載構(gòu)造方法示例class MyTime /定義時間類 private int mHour, mMinute, mSecond; /三個成員變量,時、分、秒 public MyTime() /構(gòu)造方法重載1 mHour = 0; mMinute = 0; mSeco
8、nd = 0; public MyTime(int hour) /構(gòu)造方法重載2 mHour = hour; mMinute = 0; mSecond = 0; public MyTime(int hour, int minute) /構(gòu)造方法重載3 mHour = hour; mMinute = minute; mSecond = 0; public MyTime(int hour, int minute, int second) /構(gòu)造方法重載4 mHour = hour; mMinute = minute; mSecond = second; public void display()
9、/顯示時間信息的方法 System.out.println(mHour + : + mMinute + : + mSecond); 重載構(gòu)造方法示例(續(xù))重載構(gòu)造方法示例(續(xù))/*測試時間類*/public class Test /*main方法,程序入口*/ public static void main(String args) /分別調(diào)用不同的構(gòu)造方法來初始化時間對象 MyTime t1 = new MyTime(); /調(diào)用重載方式1 t1.display(); MyTime t2 = new MyTime(8); /調(diào)用重載方式2 t2.display(); MyTime t3 =
10、new MyTime(8, 30); /調(diào)用重載方式3 t3.display(); MyTime t4 = new MyTime(8, 30, 30); /調(diào)用重載方式4 t4.display(); /*使用重載構(gòu)造方法可以使初始化對象的方式靈活機動,大大方便類的使用者。*/對象在內(nèi)存中的存放形式對象在內(nèi)存中的存放形式成員方法1成員方法2成員方法n成員變量1成員變量2成員變量n成員變量1成員變量2成員變量n成員變量1成員變量2成員變量n對象1對象3對象2每個對象都有自己獨立的數(shù)據(jù)成員,但是所有的對象共享成員方法。this引用引用 一個類可以創(chuàng)建很多對象,每個對象有屬于的自己的成員. 上面我們提
11、到調(diào)用成員需要通過引用名.成員的方式 那么如果想在類的內(nèi)部調(diào)用當前對象的成員,為了獲得引用而使用new去創(chuàng)建新的對象就完全不符合我們的需求了 Java在每個方法內(nèi)部提供了一個隱含的引用this,該引用永遠指向當前正在操作的對象使用使用thispublic class StudentString name;public void study() System.out.println(+”在學習”); 默認情況下可以省略默認情況下可以省略thispublic class StudentString name;public void study() System.out.print
12、ln(name+”在學習”); this.成員成員 當局部變量與成員屬性的命名發(fā)生重名的時候,根據(jù)就近原則會默認調(diào)用同名的局部變量public class BankCardString cardNo;String cardPwd;public BankCard(String cardNo,String cardPwd) this.cardNo=cardNo;this.cardPwd=cardPwd; public BankCard(String cardNo)this.cardNo=cardNo;cardPwd=“888888”;如果需要訪問成員屬性那么要顯示如果需要訪問成員屬性那么要顯示的加
13、上的加上this表示是當前對象的成表示是當前對象的成員變量員變量this() 如果在類中有多個構(gòu)造方法,那么可以通過this在某一個構(gòu)造方法中調(diào)用另一個構(gòu)造方法,但必須是在構(gòu)造方法中的第一句,并且每個構(gòu)造方法最多只調(diào)用一次,根據(jù)參數(shù)指定調(diào)用的構(gòu)造方法public class BankCardString cardNo,cardPwd;public BankCard(String cardNo,String cardPwd) this.cardNo=cardNo;this.cardPwd=cardPwd; public BankCard(String cardNo)this(cardNo,”88
14、8888”);類的靜態(tài)成員類的靜態(tài)成員 正常情況下類的成員是屬于某一個對象,訪問成員需要通過這個對象訪問,同時成員屬性的生命周期同對象生命周期 可以使用static關(guān)鍵字將成員屬性或者方法修飾為靜態(tài) 一旦修飾為靜態(tài)則表示該成員屬于類,其生命周期不再受對象影響靜態(tài)成員變量靜態(tài)成員變量 在成員變量前加在成員變量前加static關(guān)鍵字,可以將其聲關(guān)鍵字,可以將其聲明為明為靜態(tài)成員變量靜態(tài)成員變量; 如果類中成員變量被定義為靜態(tài),那么不論如果類中成員變量被定義為靜態(tài),那么不論有多少個對象,靜態(tài)成員變量只有一份內(nèi)存有多少個對象,靜態(tài)成員變量只有一份內(nèi)存拷貝,即所有對象共享該成員變量;拷貝,即所有對象共享
15、該成員變量; 靜態(tài)成員變量的作用域只在類內(nèi)部,但其生靜態(tài)成員變量的作用域只在類內(nèi)部,但其生命周期卻貫穿整個程序。命周期卻貫穿整個程序。靜態(tài)成員變量示例靜態(tài)成員變量示例class Dog public static int count = 0; /靜態(tài)成員變量 public Dog() /構(gòu)造方法count+; public class Test public static void main(String args) System.out.println(當前狗的數(shù)量是: + Dog.count); Dog d1 = new Dog(); Dog d2 = new Dog(); System.
16、out.println(當前狗的數(shù)量是: + Dog.count); 靜態(tài)成員變量的注意事項靜態(tài)成員變量的注意事項 和程序同生命周期;和程序同生命周期; 在沒有實例化對象時,可以通過類名訪問靜在沒有實例化對象時,可以通過類名訪問靜態(tài)成員變量;態(tài)成員變量; 也可以通過對象訪問靜態(tài)成員變量,但不論也可以通過對象訪問靜態(tài)成員變量,但不論使用的是哪個對象,訪問到的都是同一個變使用的是哪個對象,訪問到的都是同一個變量;量;靜態(tài)成員方法靜態(tài)成員方法 在成員方法前加在成員方法前加static關(guān)鍵字,可以將其聲關(guān)鍵字,可以將其聲明為明為靜態(tài)成員方法靜態(tài)成員方法; 靜態(tài)成員方法只能對類的靜態(tài)成員變量進行靜態(tài)成員
17、方法只能對類的靜態(tài)成員變量進行操作;操作; 靜態(tài)成員方法沒有靜態(tài)成員方法沒有this引用;引用; 在沒有實例化對象時,可以通過類名訪問靜在沒有實例化對象時,可以通過類名訪問靜態(tài)成員方法。態(tài)成員方法。靜態(tài)成員方法示例靜態(tài)成員方法示例class Dog private static int count = 0; /靜態(tài)成員變量 public Dog() count+; /顯示數(shù)量的方法,靜態(tài)成員方法 public static void displayCount() System.out.println(當前狗的數(shù)量是: + count); public class Test public sta
18、tic void main(String args) /沒有實例化對象之前,直接通過類名調(diào)用靜態(tài)成員方法 Dog.displayCount(); Dog d1 = new Dog(); Dog d2 = new Dog(); Dog.displayCount(); 靜態(tài)成員小結(jié)靜態(tài)成員小結(jié) 靜態(tài)成員包括靜態(tài)數(shù)據(jù)成員和靜態(tài)成員方法; 靜態(tài)成員屬于整個類而不是屬于某個對象,它被該類的所有對象共享; 訪問靜態(tài)成員時一般通過類名訪問,也可以通過對象訪問; 靜態(tài)成員也受訪問權(quán)限的約束; 靜態(tài)成員方法不能操作非靜態(tài)成員; 靜態(tài)成員方法沒有this引用。塊塊 初始化對象的屬性值除了使用構(gòu)造方法以外還可以使用
19、 表示的代碼塊來進行 代碼塊分為兩種,分別為初始化塊和靜態(tài)塊初始化塊初始化塊 初始化塊由一對獨立于其他域的組成,在對象被創(chuàng)建的時候被調(diào)用,與構(gòu)造方法的區(qū)別在于無論你執(zhí)行哪個構(gòu)造方法,這個初始化塊都會被執(zhí)行,且在構(gòu)造方法前執(zhí)行public class ClassName/初始化塊靜態(tài)塊靜態(tài)塊 初始化塊和構(gòu)造方法都會在對象被創(chuàng)建的時候執(zhí)行,假設我們只希望某個工作只在對象第一次被創(chuàng)建的時候執(zhí)行,以后再也不執(zhí)行的話,那么需要使用靜態(tài)塊public class ClassNamestatic/靜態(tài)塊包包 有時候,類和類的名稱可能發(fā)生沖突; Java提供了把類名空間劃分為更容易管理的塊的機制,這就是包; 包允許將類組合成較小的單元,類似于文件夾; 有助于避免命名沖突,分屬不同包的類即便名稱相同也不會引起誤會; 能在包與包之間對于類
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞務合同兼職合同范本
- 分包制作安裝合同范本
- 借款車位轉(zhuǎn)讓合同范本
- 代理房屋合同范本
- 2024年玉環(huán)市委辦公室選聘考試真題
- 2024年舟山市定海區(qū)人民檢察院招聘用工人員筆試真題
- 關(guān)于電纜合同范本
- 2024年玉林市第十一中學招聘高中體育頂崗教師筆試真題
- 個人經(jīng)營服務合同范本
- 借款房屋轉(zhuǎn)讓合同范本
- 2025年常熟市招聘進村人員歷年高頻重點提升(共500題)附帶答案詳解
- (主城一診)重慶市2025年高2025屆高三學業(yè)質(zhì)量調(diào)研抽測 (第一次)物理試卷(含答案)
- 2025年中國電信集團有限公司招聘筆試參考題庫含答案解析
- DB50T 393-2011 城市三維建模技術(shù)規(guī)范
- 新中式養(yǎng)生知識培訓課件
- 《肺癌圍手術(shù)期護理》課件
- 《糖尿病足護理查房》課件
- 山東省臨沂市地圖矢量課件模板()
- 2024復工復產(chǎn)安全培訓
- 演練活動合同范本三篇
評論
0/150
提交評論