day13 構(gòu)造方法瑟啃,this關(guān)鍵字和多類合作

1. 構(gòu)造方法【雞肋】

1.1 作用

用于在開發(fā)過程中創(chuàng)建對象使用先蒋,創(chuàng)建對象目前的格式

new 類名(可能用到的參數(shù));

類名(有可能用到的參數(shù));這就是構(gòu)造方法 Constructor

初始化當(dāng)前創(chuàng)建對象中的成員變量數(shù)據(jù)1绯拧界斜!

1.2 格式

格式:

? ? public 類名(所需初始化參數(shù)列表) {

?? ?? ? 初始化語句;

?? ?}

細(xì)節(jié):

? ? 1.構(gòu)造方法的名字必須是類名合冀,并且其他方法的名字不能是類名

? ? 2.構(gòu)造方法沒有返回值類型聲明

? ? 3.初始化參數(shù)列表和正常的方法列表操作使用一致

? ? 4.初始化語句各薇,大多數(shù)是一些賦值語句

1.3 貌似我們昨天沒有寫構(gòu)造方法,但我們用了【了解】

首先

? ? 在Eclipse的項目所在文件夾中君躺,bin目錄是存放當(dāng)前java程序?qū)?yīng)的所有.class 二進制文件(字節(jié)碼文件)峭判,趕文件保存了java文件對應(yīng)的所有內(nèi)容

? ? 這里可以通過返編譯工具看到一些特定的現(xiàn)象【了解】

? ??Java -c -1 -private XXX.class

Java編譯器行為

? ? 在代碼中任何沒有【顯式】自行聲明構(gòu)造方法,java編譯器會在編譯代碼的過程中輔助程序程序員完成一個無參數(shù)的構(gòu)造方法棕叫,供程序員使用

1.4 根據(jù)需求完成所需構(gòu)造方法

格式:

? ? public 類名(所需初始化參數(shù)列表){

?? ?? ? 初始化語句林螃;

?? ?}

需求:

? ? 1.完成對于姓名在創(chuàng)建對象時初始化的構(gòu)造方法

? ? 2.完成對于姓名,年齡創(chuàng)建對象時初始化的構(gòu)造方法

? ? 3.完成對于姓名俺泣,年齡治宣,性別創(chuàng)建對象時初始化的構(gòu)造方法

注意:

? ? 如果在代碼中程序員自行完成了構(gòu)造方法,java編譯器不再自動生成無參構(gòu)造方法砌滞。

【強制要求】

? ? 以后代碼無論在什么時候都要給用戶提供一個無參數(shù)構(gòu)造方法使用

package com.qianfeng.a.Object;

class Dog {

????//成員變量 Field

????String name;

????int age;

????char gender;


????//無參構(gòu)造方法

????public Dog() {}

????//完成對于姓名在創(chuàng)建對象時初始化的構(gòu)造方法

????public Dog(String n) {

????????//成員變量可以在類內(nèi)其他中直接使用【80%正確】

????????name = n;

????}


????//完成對于名字侮邀,年齡的初始化構(gòu)造方法

????public Dog(String n, int a) {

????????name = n;

????????age = a;

????}


????//完成對于名字,年齡贝润,性別的初始化構(gòu)造方法

????public Dog(String n, int a, char g) {

????????name = n;

????????age = a;

????????gender = g;

????}


????//成員方法

????public void eat() {

????????System.out.println("吃骨頭");

????}


????public void sleep() {

????????System.out.println("狗睡覺");

????}


????public void game() {

????????System.out.println("狗狗玩球");

????}

}

public class Demo1{

????public static void main(String[] args) {

????????/*

???????? * 這里調(diào)用的是一個無參構(gòu)造方法

???????? * 該方法在Dog類內(nèi)是沒有定義的

???????? *

???????? * 以后用的比較多的情況大多數(shù)都是無參構(gòu)造方法

???????? *

???????? * The constructor Dog() is undefind

???????? */

????????//無參構(gòu)造方法

????????Dog dog = new Dog();

????????System.out.println(dog.name);

????????System.out.println(dog.age);

????????System.out.println(dog.gender);


????????System.out.println("------------------");


????????Dog dog1 = new Dog("聶亮");

????????System.out.println(dog1.name);

????????System.out.println(dog1.age);

????????System.out.println(dog1.gender);


????????System.out.println("------------------");


????????Dog dog2 = new Dog("聶亮", 22);

????????System.out.println(dog2.name);

????????System.out.println(dog2.age);

????????System.out.println(dog2.gender);


????????System.out.println("------------------");


????????Dog dog3 = new Dog("聶亮", 22, '男');

????????System.out.println(dog3.name);

????????System.out.println(dog3.age);

????????System.out.println(dog3.gender);


????}

}

1.5 總結(jié)

1.構(gòu)造方法

? ? 功能是用于初始化創(chuàng)建對象的成員變量數(shù)據(jù)

? ? 構(gòu)造方法是一個方法绊茧,參數(shù)使用方式和方法一致

2.構(gòu)造方法選擇

? ??Java編譯器會根據(jù)構(gòu)造方法中的的【參數(shù)類型,個數(shù)打掘,順序】來做選擇华畏,如果沒有指定的構(gòu)造方法鹏秋,報錯!亡笑!

3.無論什么時候一定要給當(dāng)前類提供一個無參數(shù)構(gòu)造方法

4.以下代碼報錯

? ? Dog(String name);

? ? Dog(String color);

? ? 調(diào)用:

? ? ?? ?String color =?“red”;

? ? ?? ?Dog dog = new Dog(color);

? ? 在java代碼中不允許出現(xiàn)相同數(shù)據(jù)類型侣夷,個數(shù),順序的構(gòu)造方法仑乌,和參數(shù)名沒有關(guān)系百拓,java編譯器選擇過程中,有且只針對數(shù)據(jù)類型晰甚,個數(shù)衙传,順序選擇,參數(shù)名無所謂厕九。

2. 類對象內(nèi)存分析圖【重點】

3. this關(guān)鍵字【雞肋】

3.1 this關(guān)鍵字【重點】

this關(guān)鍵字表示對象本身

? ? 1.調(diào)用當(dāng)前方法的類對象

? ? 2.通過構(gòu)造方法創(chuàng)建的類對象

this表示一個對象1痛贰!扁远!當(dāng)前對象

3.1 目前this關(guān)鍵字解決的問題

可以在方法中使用this關(guān)鍵字區(qū)分操作的是成員變量還是局部變量

package com.qianfeng.a.constructor;

class Person {

????String name;

????int age;


????public Person() {

????????//this關(guān)鍵字表示通過new + 構(gòu)造方法創(chuàng)建的類對象本身

????????System.out.println("Constructor" + this);

????}


????public Person(String name) {

????????/*

???????? * 以下操作是沒有用的俊鱼,這是自娛自樂

???????? * 這里存在一個【就近原則】問題,如果出現(xiàn)和成員變量

???????? * 同名的局部變量畅买,采用就近原則

???????? */

????????//name = name;


????????/*

???????? *這里需要賦值操作的是當(dāng)前類對象中的name成員變量

???????? *this.成員變量名字 表示使用的就是當(dāng)前類對象的成員變量亭引,而不是方法的參數(shù)

???????? */

????????this.name = name;

????}


????public Person(String name, int age) {

????????this.name = name;

????????this.age = age;

????}


????public void test() {

????????//表示調(diào)用當(dāng)前方法的類對象

????????System.out.println("test:" + this);

????}

}

public class Demo3 {

????public static void main(String[] args) {

????????Person person = new Person();


????????System.out.println("main:" + person);

????????person.test();


????????// PFSP private final static Person

????}

}

4. 封裝【重點,規(guī)范】

4.1 面向?qū)ο笕筇卣?/p>

封裝

? ? 最基本的思想

繼承

? ? 子承父業(yè)

多態(tài)

? ? 貓皮获,狗焙蚓,都是動物

? ? U盤,鍵盤洒宝,鼠標(biāo)购公,都是USb設(shè)備

? ? 【最難的是多態(tài),最簡單的也是多態(tài)】

?4.2 封裝雁歌,不單單是對于類的封裝

歸納總結(jié):旰啤!靠瞎!

? ? 循環(huán)封裝過程

? ? 方法封裝過程

? ? 類封裝數(shù)據(jù)

? ? 框架封裝模塊

? ? 一段代碼使用了3遍比庄,做成一個循環(huán)

? ? 一個循環(huán)使用了3遍蟀苛,做成一個方法

? ? 一個方法使用了3遍沿盅,做成一個工具類

? ? 一個工具類使用了3遍,做成一個文檔

?4.3 java中規(guī)范化封裝【javaBean規(guī)范】

要求:

? ? 1.所有的成員變量全部私有化【private修飾】

? ? 2.要求至少完成一個無參數(shù)構(gòu)造方法雹熬,其他無所謂

? ? 3.要求給予所有的成員變量對應(yīng)的setter和getter方法

4.3.1 權(quán)限修飾符

private

? ? 私有化內(nèi)容父能,使用private修飾的成員變量神凑,成員方法和構(gòu)造方法,有且只能類內(nèi)使用,類外沒有操作權(quán)限

? ? 使用private修飾的內(nèi)容有且只能在class所處大括號以內(nèi)使用

public

? ? 公開內(nèi)容溉委,只要存在對應(yīng)的類對象鹃唯,都可以通過類對象調(diào)用類內(nèi)的public修飾的成員變量和成員方法

4.3.2 解決私有化成員變量賦值和取值操作問題

private私有化修飾的成員變量,類外不能通過類對象操作瓣喊,取值坡慌,賦值

javaBean規(guī)范規(guī)定了

? ? setter ==> 賦值操作

? ? 格式:

?? ?? ? public void set成員變量名(對應(yīng)成員變量數(shù)據(jù)類型參數(shù)) {

?? ?? ? 賦值操作;

?? ??? ?}? ??

? ? getter ==> 取值操作

? ? 格式:

?? ?? ? public 對應(yīng)成員變量數(shù)據(jù)類型返回值 get成員變量名() {

?? ?? ? return 成員變量藻三;

?? ??? ?}

? ? 注意:

?? ?? ? 1.方法格式固定洪橘,setter和getter方法操作過程不能修改

?? ?? ? 2.方法需要符合命名規(guī)范,小駝峰命名法

?? ?? ? 3.boolean類型數(shù)據(jù)較特殊

?? ??? ?? ? boolean類型成員變量getter方法要求是is開頭

4.3.3 可以使用快捷方式快速完成代碼

package com.qianfeng.a.constructor;

/*

* 以后開發(fā)中一個【實體類】如何封裝如何書寫

* 實體類:

* ????????真實存在的一個數(shù)據(jù)趴酣,人,狗坑夯,英雄

*/

class LOLHero {

????private String name;

????private float hp;

????private float mp;


????//根據(jù)個人需求完成對應(yīng)構(gòu)造方法岖寞,setter和getter方法

????//Shift + Alt + s

????public LOLHero() {}


????public LOLHero(String name, float hp, float mp) {

????????this.name = name;

????????this.hp = hp;

????????this.mp = mp;

????}

????public String getName() {

????????return name;

????}

????public void setName(String name) {

????????this.name = name;

????}

????public float getHp() {

????????return hp;

????}

????public void setHp(float hp) {

????????this.hp = hp;

????}

????public float getMp() {

????????return mp;

????}

????public void setMp(float mp) {

????????this.mp = mp;

????}

}

4.3.4 關(guān)于javaBean規(guī)范總結(jié)

javaBean規(guī)范制定的要求

? ? 1.要求java中所有實體類成員變量全部私有化,最少提供一個無參數(shù)構(gòu)造方法柜蜈,對成員變量實現(xiàn)setter和getter方法

? ? 2.javaBean規(guī)范仗谆,是為了后期開發(fā)匯總更好的代碼適配度,提高代碼運行的統(tǒng)一性淑履,能夠滿足框架的使用

? ? 3.javaBean規(guī)范只是一個規(guī)范隶垮,而且是作為一個基礎(chǔ)規(guī)范,操作都是可以使用快捷鍵來完成的C卦搿狸吞!

4. 多類合作【重點】

5.1 汽車類和修理廠類分析

汽車

? ? 可以看作是一個類

? ? ?? ?成員變量:

? ? ?? ?名字

? ? ?? ?顏色

? ? ?? ?輪胎個數(shù)

? ? 成員方法:

? ? ?? ?飆車

?? ?? ? 飆車要有要求,輪胎個數(shù)必須為4

修理廠

? ? 可以看作是一個類

? ? 成員變量:

? ? ?? ?名字

? ? ?? ?地址

? ? ?? ?聯(lián)系方式

? ? 成員方法:

?? ?? ? 修理汽車的方法【重點】

?? ??? ?? ? 該方法是需要一個汽車類的對象

5.2 汽車類代碼實現(xiàn)

package com.qianfeng.b;

/*

* 汽車

* ????可以看作是一個類

* ????成員變量:

* ????????名字

* ????????顏色

* ????????輪胎個數(shù)

*

* ????成員方法:

* ????????飆車

* ????????????飆塵有要求指煎,輪胎個數(shù)必須為4

*/

public class Car {

????//成員變量 Field

????private String name;

????private String color;

????private int wheelCount;


????//構(gòu)造方法

????public Car() {}


????public Car(String name, String color, int wheelCount) {

????????this.name = name;

????????this.color = color;

????????this.wheelCount = wheelCount;

????}


????/**

???? * 飆車方法蹋偏,如果輪胎數(shù)不為4,提示需要找修理廠

???? */

????public void race() {

????????if (4 == wheelCount) {

????????????System.out.println("開著" + color + "的" + name + "驪山彎道飆車時速280KM/H");

????????} else {

????????????System.out.println("缺少輪胎至壤,快去修理廠威始!");

????????}

????}

????//setter和getter方法 Method

????public String getName() {

????????return name;

????}

????public void setName(String name) {

????????this.name = name;

????}

????public String getColor() {

????????return color;

????}

????public void setColor(String color) {

????????this.color = color;

????}

????public int getWheelCount() {

????????return wheelCount;

????}

????public void setWheelCount(int wheelCount) {

????????this.wheelCount = wheelCount;

????}

}

5.3 修理廠類代碼實現(xiàn)

package com.qianfeng.b;

/*

* 修理廠

* ????可以看作是一個類

* ????成員變量:

* ????????名字

* ????????地址

* ????????電話

*

* ????成員方法:

* ????????修理汽車的方法【重點】

* ????????????該方法是需要一個汽車類對象

*/

public class Factory {

????//成員變量

????String name;

????String address;

????String tel;


????//構(gòu)造方法

????public Factory() {}


????public Factory(String name, String address, String tel) {

????????this.name = name;

????????this.address = address;

????????this.tel = tel;

????}


????/*

???? *修理汽車方法分析

???? *權(quán)限修飾符

???? *????public

???? *返回值類型

???? *????void

???? *方法名

???? *????repair

???? *形式參數(shù)列表【重點】

???? * ????1.這里需要一個汽車作為參數(shù)

???? * ????2.而且是必要參數(shù)

???? * ????3.這里需要的是一個汽車類對象

???? *????(Car car)這里是一個汽車類對象

???? *方發(fā)聲明

???? *????public void repair(Car car)

???? */

????/**

???? * 修理汽車的方法,需要的參數(shù)是一個汽車Car類對象

???? *

???? * @param car??Car類對象

???? * @throws InterruptedException

???? */

????public void repair(Car car) throws InterruptedException {

????????if (car.getWheelCount() < 4) {

????????????System.out.println("缺少輪胎像街,需要修理");


????????????//修改當(dāng)前汽車對象的輪胎個數(shù)黎棠,賦值為4

????????????car.setWheelCount(4);


????????????//報錯,com + 1 選擇第一個回車

????????????Thread.sleep(1000);


????????????System.out.println("¥100000");

????????} else {

????????????System.out.println("腦子進書了");

????????}

????}


????//setter和getter方法 Method

????public String getName() {

????????return name;

????}

????public void setName(String name) {

????????this.name = name;

????}

????public String getAddress() {

????????return address;

????}

????public void setAddress(String address) {

????????this.address = address;

????}

????public String getTel() {

????????return tel;

????}

????public void setTel(String tel) {

????????this.tel = tel;

????}????

}

5.4 主方法代碼

package com.qianfeng.b;

public class Demo {

????public static void main(String[] args) throws

????InterruptedException{

????????/*

???????? * 同包package內(nèi)可以直接使用對應(yīng)的class類

???????? */

????????Car car = new Car("特斯拉", "黑色", 4);


????????for (int i = 0; i < 10; i++) {

????????????car.race();


????????????/*

???????????? * 讓程序暫停0.5s镰绎,存在一個紅色的報錯脓斩。這里Ctrl + 1

???????????? * 快速修復(fù),選擇第一個

???????????? */

????????????Thread.sleep(500);

????????}

????????Thread.sleep(1000);


????????System.out.println("輪胎爆一個");

????????//輪胎爆一個

????????car.setWheelCount(3);


????????Thread.sleep(1000);

????????car.race();


????????//現(xiàn)在需要一個修理廠對象

????????Factory factory = new Factory();


????????factory.setAddress("勞動路轉(zhuǎn)盤");

????????factory.setName("狂人修車");

????????factory.setTel("18629433943");


????????/*

???????? * 這里需要通過Factory類對象畴栖,調(diào)用repair方法俭厚,修理汽車Car類對象

???????? */

????????factory.repair(car);


????????for (int i = 0; i < 10; i++) {

????????????car.race();


????????????Thread.sleep(500);

????????}

????}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市驶臊,隨后出現(xiàn)的幾起案子挪挤,更是在濱河造成了極大的恐慌叼丑,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扛门,死亡現(xiàn)場離奇詭異鸠信,居然都是意外死亡,警方通過查閱死者的電腦和手機论寨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門星立,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人葬凳,你說我怎么就攤上這事绰垂。” “怎么了火焰?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵劲装,是天一觀的道長。 經(jīng)常有香客問我昌简,道長占业,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任纯赎,我火速辦了婚禮谦疾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘犬金。我一直安慰自己念恍,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布晚顷。 她就那樣靜靜地躺著樊诺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪音同。 梳的紋絲不亂的頭發(fā)上词爬,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天,我揣著相機與錄音权均,去河邊找鬼顿膨。 笑死,一個胖子當(dāng)著我的面吹牛叽赊,可吹牛的內(nèi)容都是我干的恋沃。 我是一名探鬼主播,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼必指,長吁一口氣:“原來是場噩夢啊……” “哼囊咏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤梅割,失蹤者是張志新(化名)和其女友劉穎霜第,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體户辞,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡泌类,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了底燎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刃榨。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖双仍,靈堂內(nèi)的尸體忽然破棺而出枢希,到底是詐尸還是另有隱情,我是刑警寧澤朱沃,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布苞轿,位于F島的核電站,受9級特大地震影響为流,放射性物質(zhì)發(fā)生泄漏呕屎。R本人自食惡果不足惜让簿,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一敬察、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尔当,春花似錦莲祸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至畜号,卻和暖如春缴阎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背简软。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工蛮拔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痹升。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓建炫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親疼蛾。 傳聞我的和親對象是個殘疾皇子肛跌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,576評論 2 349