java構(gòu)造方法從基礎(chǔ)到入門_第1頁
java構(gòu)造方法從基礎(chǔ)到入門_第2頁
java構(gòu)造方法從基礎(chǔ)到入門_第3頁
java構(gòu)造方法從基礎(chǔ)到入門_第4頁
java構(gòu)造方法從基礎(chǔ)到入門_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、/*構(gòu)造函數(shù):構(gòu)造函數(shù)的作用: 初始化對應(yīng)的對象。構(gòu)造函數(shù)的格式:修飾符 函數(shù)名(形式參數(shù))函數(shù)體構(gòu)造函數(shù)要注意的事項:1. 構(gòu)造函數(shù)是沒有返回值類型的。2. 構(gòu)造函數(shù)的函數(shù)名是必須與類名一致。3. 構(gòu)造函數(shù)不是由我們手動調(diào)用的,是我們在創(chuàng)建了對應(yīng)的對象時,jvm會根據(jù)你創(chuàng)建的對象傳遞的參數(shù)調(diào)用對應(yīng) 的對象。4. 如果一個類沒有顯示寫上一個構(gòu)造函數(shù)的時候,那么java編譯器會為該類添加一個無參 的構(gòu)造函數(shù)。5. 如果一個類已經(jīng)顯示寫上一個構(gòu)造函數(shù)的時候,那么java編譯器則不會再為該類添加一個無參 的構(gòu)造函數(shù)。6. 構(gòu)造函數(shù)是可以以函數(shù)重載的形式存在多個。構(gòu)造代碼塊:構(gòu)造代碼塊的作用:給對象進(jìn)

2、行統(tǒng)一的初始化。構(gòu)造代碼塊 的格式:代碼;構(gòu)造代碼塊是在創(chuàng)建了代碼塊所屬類的對象時調(diào)用一次。this關(guān)鍵字:this關(guān)鍵字代表了所屬函數(shù)的調(diào)用者對象。this關(guān)鍵字的作用:1. 一個類中存在同名的成員變量與局部變量時,在方法的內(nèi)部默認(rèn)是訪問局部 變量的,可以通過this關(guān)鍵字指定訪問成員變量 的數(shù)據(jù)。2. this關(guān)鍵字還可以在構(gòu)造函數(shù)中調(diào)用另外一個構(gòu)造函數(shù)初始化對象,this關(guān)鍵字調(diào)用構(gòu)造函數(shù)要注意的事項:1. this關(guān)鍵字調(diào)用其他 的構(gòu)造函數(shù)時,必須要是在第一個語句。2. this關(guān)鍵字調(diào)用構(gòu)造函數(shù)時不能出現(xiàn)相互調(diào)用,因為是一個死循環(huán)。3. 如果在方法的內(nèi)部訪問一個變量時,該變量只存在于

3、成員變量中,局部沒有沒有,這時候java編譯器會為該變量的前面添加this關(guān)鍵字。static(靜態(tài)、修飾符)static修飾成員變量時:static修飾成員變量時,那么該成員變量的數(shù)據(jù)就是一個共享的數(shù)據(jù).靜態(tài)成員變量的訪問方式:方式一: 使用對象進(jìn)行訪問。對象.屬性名方式二:可以使用類名進(jìn)行訪問。類名.屬性名注意:1. 非靜態(tài)成員變量不能類名直接訪問,只能使用對象進(jìn)行訪問。2. 千萬不要為了方便訪問成員變量而使用static修飾,一定要是該數(shù)據(jù)是共享數(shù)據(jù) 時才使用static修飾。*/class Demo1 public static void main(String args) Syste

4、m.out.println("Hello World!");/*static(靜態(tài)、修飾符)static修飾成員變量時:static修飾成員變量時,那么該成員變量的數(shù)據(jù)就是一個共享的數(shù)據(jù).靜態(tài)成員變量的訪問方式:方式一: 使用對象進(jìn)行訪問。對象.屬性名方式二:可以使用類名進(jìn)行訪問。類名.屬性名注意:1. 非靜態(tài)成員變量不能類名直接訪問,只能使用對象進(jìn)行訪問。2. 千萬不要為了方便訪問成員變量而使用static修飾,一定要是該數(shù)據(jù)是共享數(shù)據(jù) 時才使用static修飾。static修飾方法(靜態(tài)的成員方法):訪問方式:方式一:可以使用對象進(jìn)行訪問。對象.靜態(tài)的函數(shù)名();方式二

5、:可以使用類名進(jìn)行訪問。類名.靜態(tài)函數(shù)名字。推薦使用是類名直接訪問靜態(tài)的成員。靜態(tài)的成員變量與非靜態(tài)的成員變量的區(qū)別:1. 作用上的區(qū)別:1. 靜態(tài)的成員變量的作用共享一個 數(shù)據(jù)給所有的對象使用。2. 非 靜態(tài)的成員變量的作用是描述一類事物的公共屬性。2. 數(shù)量與存儲位置上的區(qū)別:1. 靜態(tài)成員變量是存儲方法 區(qū)內(nèi)存中,而且只會存在一份數(shù)據(jù)。2. 非靜態(tài)的成員變量是存儲在堆內(nèi)存中,有n個對象就有n份數(shù)據(jù)。3. 生命周期的區(qū)別:1. 靜態(tài)的成員變量數(shù)據(jù)是隨著類的加載而存在,隨著類文件的消失而消失。2.非靜態(tài)的成員數(shù)據(jù)是隨著對象的創(chuàng)建而存在,隨著 對象被垃圾回收器回收而消失。靜態(tài)函數(shù)要注意的事項:

6、1. 靜態(tài)函數(shù)是可以調(diào)用類名或者對象進(jìn)行調(diào)用的,而非靜態(tài)函數(shù)只能使用對象進(jìn)行調(diào)用。2. 靜態(tài)的函數(shù)可以直接訪問靜態(tài)的成員,但是不能直接訪問非靜態(tài)的成員。原因:靜態(tài)函數(shù)是可以使用類名直接調(diào)用的,這時候可能還沒有存在對象,而非靜態(tài)的 成員數(shù)據(jù)是隨著對象 的存在而存在的。3. 非靜態(tài)的函數(shù)是可以直接訪問靜態(tài)與非靜態(tài)的成員。原因:非靜態(tài)函數(shù)只能由對象調(diào)用,當(dāng)對象存在的時候,靜態(tài)數(shù)據(jù)老早就已經(jīng)存在了,而非靜態(tài)數(shù)據(jù)也隨著對象的創(chuàng)建而存在了。4. 靜態(tài)函數(shù)不能出現(xiàn)this或者super關(guān)鍵字。原因:因為靜態(tài)的函數(shù)是可以使用類名調(diào)用的,一旦使用類名調(diào)用這時候不存在對象,而this關(guān)鍵字是代表了一個函數(shù) 的調(diào)用

7、者對象,這時候產(chǎn)生了沖突。靜態(tài)的數(shù)據(jù)的生命周期:靜態(tài)的成員變量數(shù)據(jù)是優(yōu)先于對象存在的。static什么時候修飾一個函數(shù)?如果一個函數(shù)沒有直接訪問到非靜態(tài)的成員時,那么就可以使用static修飾了。 一般用于工具類型的方法靜態(tài)函數(shù)不能訪問非靜態(tài)的成員? 靜態(tài)函數(shù)只要存在有對象,那么也可以訪問非 靜態(tài)的數(shù)據(jù)。只是不能直接訪問而已。*/class StudentString name; /名字staticString country = "中國" /國籍/靜態(tài)代碼塊 :靜態(tài)代碼塊是在Student.class文件加載到內(nèi)存的時候就馬上執(zhí)行的。staticSystem.out.pr

8、intln("靜態(tài)代碼塊執(zhí)行了.");/構(gòu)造函數(shù)public Student(String name) = name;/非靜態(tài)的成員函數(shù)public void study()System.out.println("好好學(xué)習(xí)"+this);/靜態(tài)函數(shù)public static void sleep() /靜態(tài)方法與非靜態(tài)方法的字節(jié)碼文件是同時存在內(nèi)存中 的。 只是靜態(tài)的成員變量數(shù)據(jù)是優(yōu)先于對象存在而已。Student s= new Student("鐵蛋");System.out.println(+&quo

9、t;呼呼大睡.");class Demo2 public static void main(String args) Student.sleep();/Student s = new Student("狗娃");/*需求:編寫一個數(shù)組的工具類。Arrays.toString() 1,2,3,4;sort()*/數(shù)組工具類class ArrayToolpublic static String toString(int arr)String result = ""for(int i = 0; i < arr.length ; i+)if (i

10、=0)result+=""+arri+","else if(i=(arr.length-1)result+= arri+""elseresult+=arri+","return result;public static String toString(int arr)String result=""for(int i=0;i<arr.length;i+)if(i=0)result=""+arri+","+result;else if(i=(arr.l

11、ength-1)result=arri+""elseresult=arri+","+result;public static void sort(int arr)for(int i = 0; i < arr.length-1 ; i+)for(int j = i+1 ; j<arr.length ; j+)if(arri>arrj)int temp = arri;arri = arrj;arrj = temp;class Demo3 public static void main(String args) int arr = 12,1,

12、456,165;/ArrayTool tool = new ArrayTool();ArrayTool.sort(arr);String info = ArrayTool.toString(arr);System.out.println("數(shù)組的元素:"+ info);/*main函數(shù)的詳解:public : 公共的。 權(quán)限是最大,在任何情況下都可以訪問。 private 原因: 為了保證讓jvm在任何情況下都可以訪問到main方法。static: 靜態(tài)。靜態(tài)可以讓jvm調(diào)用main函數(shù)的時候更加的方便。不需要通過對象調(diào)用。void: 沒有返回值。 因為返回的數(shù)據(jù)是 給 j

13、vm,而jvm使用這個數(shù)據(jù)是沒有意義的。所以就不要了。main: 函數(shù)名。 注意: main并不是關(guān)鍵字,只不過是jvm能識別的一個特殊的函數(shù)名而已。arguments :擔(dān)心某些程序在啟動需要參數(shù)。*/class Demo4 public static void main(String args) System.out.println("數(shù)組的長度:"+ args.length);for(int i = 0 ; i <args.length ; i+)System.out.print(argsi+",");Scanner scanner = ne

14、w Scanner(System.in);/*單例設(shè)計模式:保證一個類在內(nèi)存中只有一個對象。模式:模式就是解決 一類 問題的固定步驟 。模式的概念最早起源于建筑行業(yè).建房子的步驟都是一樣子:打地基-> 澆柱子->蓋樓面->砌墻->封頂->裝修-入住軟件行業(yè)中23種設(shè)計模式:單例設(shè)計模式模板設(shè)計模式裝飾者設(shè)計模式觀察者設(shè)計模式工廠設(shè)計模式單例設(shè)計模式的步驟:餓漢單例設(shè)計模式1. 私有化構(gòu)造函數(shù)。2. 聲明本類的引用類型變量,并且使用該變量指向本類對象。3. 提供一個公共靜態(tài)的方法獲取本類的對象。懶漢單例設(shè)計模式:1. 私有化構(gòu)造函數(shù)。2. 聲明本類的引用類型變量,但

15、是不要創(chuàng)建對象,3. 提供公共靜態(tài) 的方法獲取本類 的對象,獲取之前先判斷是否已經(jīng)創(chuàng)建了本類 對象,如果已經(jīng)創(chuàng)建了,那么直接返回對象即可,如果還沒有創(chuàng)建,那么先創(chuàng)建本類的對象,然后再返回。推薦使用: 餓漢單例設(shè)計模式。 因為懶漢單例設(shè)計模式會存在線程安全問題,目前還不能保證一類在內(nèi)存中只有一個對象。*/餓漢單例設(shè)計模式 -> 保證Single在在內(nèi)存中只有一個對象。class Single/聲明本類的引用類型變量,并且使用該變量指向本類對象private staticSingle s = new Single();/私有化構(gòu)造函數(shù)private Single()/提供一個公共靜態(tài)的方法獲

16、取本類的對象publicstatic Single getInstance()return s;class Testpublic static Test t=new Test();private Testpublic static Test getInstance()return t;class Testpublic static Test t;private Testpublic static Test getInstance()if(t=null)t=new Test();return t;/懶漢單例設(shè)計模式 -> 保證Single在在內(nèi)存中只有一個對象。class Single2/

17、聲明本類的引用類型變量,不創(chuàng)建本類的對象private static Single2 s;/私有化了構(gòu)造函數(shù)private Single2()/public static Single2 getInstance()if(s=null)s = new Single2();return s;class Demo5 public static void main(String args) Single2 s1 = Single2.getInstance();Single2 s2 = Single2.getInstance();System.out.println("是同一個對象嗎?&quo

18、t;+ (s1=s2);/*在現(xiàn)實生活中事物與事物之間是存在關(guān)系.球員->球隊 整體與部分關(guān)系 has a 關(guān)系 學(xué)生->人 繼承的關(guān)系 is a 關(guān)系*/球員類class Playerint num; /編碼String name;public Player(int num , String name)this.num = num; = name;public void run()System.out.println(name+"開跑.");/球隊類class TeamString name; /球隊的名字Player p1; /球員1 Pl

19、ayer p2; /球員2Player p3; /球員3public Team(String name,Player p1,Player p2,Player p3) = name;this.p1 = p1;this.p2 = p2;this.p3 = p3;/開始比賽public void startGame()System.out.println(name+"開賽啦!");class Demo6 public static void main(String args) Player p1 = new Player(12,"梅西");P

20、layer p2 = new Player(7,"C羅");Player p3 = new Player(11,"內(nèi)馬爾");/球隊Team t = new Team("恒大",p1,p2,p3);t.startGame();System.out.println("名字:"+ );/*目前存在的問題:1. 無法描述清楚這兩個類之間的繼承關(guān)系。2. 存在著重復(fù)代碼。面向?qū)ο蟮娜筇卣鳎?. 封裝2. 繼承3. 多態(tài).繼承:繼承是通過關(guān)鍵字extends體現(xiàn)的。繼承的格式:class 類名1 exte

21、nds 類名2繼承要注意的事項:1. 千萬不要為了減少重復(fù)代碼而去繼承,只有真正存在著繼承關(guān)系的時候才去繼承。2. 父類私有的成員不能被繼承。3. 父類的構(gòu)造函數(shù)不能被繼承。4. 創(chuàng)建子類對象時默認(rèn)會先調(diào)用父類無參的構(gòu)造函數(shù)。*/人類 class PersonString name;privateint age;public Person(String name) = name;public Person()System.out.println("Person類的構(gòu)造方法被調(diào)用了.");public void eat()System.out.println

22、(name+"在吃飯.");/學(xué)生類class Student extends Person / Student 就稱作為Person類的子類, Person類就稱作為Student的父類(超類、基類)int num; /學(xué)號public Student()System.out.println("Student類的構(gòu)造方法被調(diào)用了.");public void study()System.out.println(name+"good good study , day day up");class Demo7 public static

23、 void main(String args) Student s = new Student();/* = "狗娃"System.out.println("名字:"+ );s.eat();*/*疑問: 為什么要調(diào)用父類的構(gòu)造方法???這樣子做的意義在那?調(diào)用父類 的構(gòu)造方法是可以初始化從父類繼承下去的屬性的。*/ class Fuint x = 10;String name;public Fu(String name) = name;System.out.println("Fu類d帶參的構(gòu)造方法.&qu

24、ot;);public Fu()System.out.println("Fu類無參的構(gòu)造方法.");class Zi extends Fuint x = 20;public Zi(String name)super(name); /指定調(diào)用父類一個參數(shù)的構(gòu)造函數(shù)。public void print()System.out.println("x1 = "+ x);class Demo8 public static void main(String args) Zi z = new Zi("大頭兒子"); System.out.print

25、ln("name= "+);/*super關(guān)鍵字:super關(guān)鍵字代表了父類空間的引用。super關(guān)鍵字的 作用:1. 子父類存在著同名的成員時,在子類中默認(rèn)是訪問子類的成員,可以通過super關(guān)鍵字指定訪問父類的成員。2. 創(chuàng)建子類對象時,默認(rèn)會先調(diào)用父類無參的構(gòu)造方法,可以通過super關(guān)鍵字指定調(diào)用父類的構(gòu)造方法。super關(guān)鍵字調(diào)用父類構(gòu)造方法要注意的事項:1. 如果在子類的構(gòu)造方法上沒有指定調(diào)用父類的構(gòu)造方法,那么java編譯器會在子類的構(gòu)造方法上面加上super()語句。2. super關(guān)鍵字調(diào)用父類的構(gòu)造函數(shù)時,該語句必須要是子類構(gòu)造函數(shù)中的第一個

26、語句。3. super與this關(guān)鍵字不能同時出現(xiàn)在同一個構(gòu)造函數(shù)中調(diào)用其他的構(gòu)造函數(shù)。因為兩個語句都需要第一個語句。super關(guān)鍵字與this關(guān)鍵字的區(qū)別:1. 代表的事物不一致。1. super關(guān)鍵字代表的是父類空間的引用。2. this關(guān)鍵字代表的是所屬函數(shù)的調(diào)用者對象。2. 使用前提不一致。1. super關(guān)鍵字必須要有繼承關(guān)系才能使用。2. this關(guān)鍵字不需要存在繼承關(guān)系也可使用。3. 調(diào)用構(gòu)造函數(shù)的區(qū)別:1. super關(guān)鍵字是調(diào)用父類的構(gòu)造函數(shù)。2. this關(guān)鍵字是調(diào)用本類的構(gòu)造函數(shù)。*/class Fuint x = 10;String name;public Fu()Sy

27、stem.out.println("Fu類無參的構(gòu)造方法.");public Fu(String name) = name;System.out.println("Fu類帶參的構(gòu)造方法.");public void eat()System.out.println("小頭爸爸吃番薯.");class Zi extends Fuint x = 20; int num;public Zi(String name,int num)super(name); /指定調(diào)用了父類帶參的 構(gòu)造方法.this(); / 調(diào)用本類無參構(gòu)造

28、方法./super(); /指定調(diào)用了父類無參構(gòu)造方法。System.out.println("Zi類帶參的構(gòu)造方法.");public Zi()System.out.println("Zi類無參的構(gòu)造方法.");public void print()System.out.println("x = " +super.x);public void eat()System.out.println("大頭兒子吃龍蝦.");class Demo9 public static void main(String args) Z

29、i z = new Zi("狗娃");/*目前的問題:父類的功能無法滿足子類的需求。方法重寫的前提: 必須要存在繼承的關(guān)系。方法的重寫: 子父類出了同名的函數(shù),這個我們就稱作為方法的重寫。什么是時候要使用方法的重寫:父類的功能無法滿足子類的需求時。方法重寫要注意的事項:1.方法重寫時, 方法名與形參列表必須一致。2.方法重寫時,子類的權(quán)限修飾符必須要大于或者等于父類的權(quán)限修飾符。3.方法重寫時,子類的返回值類型必須要小于或者 等于父類的返回值類型。4.方法重寫時, 子類拋出的異常類型要小于或者等于父類拋出的異常類型。Exception(最壞)RuntimeException

30、(小壞)方法的重載:在一個類中 存在兩個或者兩個 以上的同名函數(shù),稱作為方法重載。方法重載的要求1. 函數(shù)名要一致。2. 形參列表不一致(形參的個數(shù)或形參 的類型不一致)3. 與返回值類型無關(guān)。*/class Animal /大的數(shù)據(jù) 類型 class Fish extends Animal /Fish小 的數(shù)據(jù)類型。class FuString name;public Fu(String name) = name;public Animal eat() throws RuntimeException System.out.println(name+"吃番薯.&qu

31、ot;);return new Animal();class Zi extends FuString num;public Zi(String name)super(name);/指定調(diào)用 父類帶參的構(gòu)造方法/重寫父類的eat方法public Animal eat() throws ExceptionSystem.out.println("吃點開胃菜.");System.out.println("喝點湯.");System.out.println("吃點龍蝦.");System.out.println("吃青菜."

32、);System.out.println("喝兩杯.");System.out.println("吃點甜品.");return new Animal();class Demo10public static void main(String args) Zi z = new Zi("大頭兒子");z.eat();/*需求:使用java描述一下普通的學(xué)生、 java基礎(chǔ)班的學(xué)生、 就業(yè)班的學(xué)生。所有的學(xué)生都會學(xué)習(xí)。但是學(xué)習(xí)的內(nèi)容不一樣。普通 的學(xué)生: 馬克思列寧主義?;A(chǔ)班的學(xué)生:學(xué)習(xí)的是 javase。就業(yè)班學(xué)生: javaee+and

33、roid.*/普通的學(xué)生類class StudentString name;/構(gòu)造函數(shù)public Student(String name) = name;public void study()System.out.println(name+"學(xué)習(xí)馬克思列寧主義");/基礎(chǔ)班的學(xué)生是屬于學(xué)生中一種class BaseStudent extends Studentpublic BaseStudent(String name)super(name);/指定調(diào)用父類構(gòu)造函數(shù)/重寫public void study()System.out.println(name

34、+"學(xué)習(xí)javase.");/就業(yè)班學(xué)生 也是屬于普通學(xué)生中一種class WorkStudent extends Student/構(gòu)造 函數(shù)public WorkStudent(String name)super(name);/重寫public void study()System.out.println(name+"學(xué)習(xí)javaee+android.");class Demo11 public static void main(String args) /System.out.println("Hello World!");BaseStudent s = new BaseStudent("居?xùn)|東");s.study();/創(chuàng)建

溫馨提示

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

評論

0/150

提交評論