從屌絲到架構(gòu)師的飛越(面向?qū)ο笃?構(gòu)造方法

一.介紹

在Java中,任何變量在被使用前都必須先設(shè)置初值。Java提供了為類的成員變量賦初值的專門的方法稱之為構(gòu)造方法。

構(gòu)造方法是一種特殊的方法,它是一個(gè)與類同名且返回值類型為同名類類型的方法。對(duì)象的創(chuàng)建就是通過(guò)構(gòu)造方法來(lái)完成,其功能主要是完成對(duì)象的初始化。當(dāng)類實(shí)例化一個(gè)對(duì)象時(shí)會(huì)自動(dòng)調(diào)用構(gòu)造方法。構(gòu)造方法和其他方法一樣也可以重載。

二.知識(shí)點(diǎn)介紹

1、概念與功能

2、構(gòu)造方法特殊定義格式

3、默認(rèn)構(gòu)造方法

4、構(gòu)造方法的習(xí)慣性定義

5、構(gòu)造方法的使用解釋

6、構(gòu)造方法的注意事項(xiàng)

7、構(gòu)造方法與set方法、顯式初始化辨析

三.上課視頻對(duì)應(yīng)說(shuō)明文檔

1、構(gòu)造方法概念與功能

構(gòu)造方法是正常開發(fā)中不可或缺的一部分,是語(yǔ)法上必須存在的。是一個(gè)具有特殊格式的方法,且有特殊的調(diào)用方式。

(1)用來(lái)創(chuàng)建實(shí)例對(duì)象的方法,給對(duì)象的數(shù)據(jù)進(jìn)行初始化,如: Person p = new Person();?

調(diào)用構(gòu)造方法 Person();只是我們沒(méi)有寫這個(gè)方法,而是Java自動(dòng)補(bǔ)齊了這個(gè)方法,是方法就可以傳入?yún)?shù)。

(2)創(chuàng)建對(duì)象時(shí),可以直接為成員變量賦值,無(wú)需再在對(duì)象產(chǎn)生后再賦值。

(3)核心功能創(chuàng)建對(duì)象:只要方法被調(diào)用,就已經(jīng)創(chuàng)建了對(duì)象

(4)為成員變量賦值,在創(chuàng)建對(duì)象的同時(shí),通過(guò)構(gòu)造方法的方法體邏輯,為成員變量賦值,此時(shí)可以為帶參構(gòu)造

2、構(gòu)造方法特殊定義格式

一般定義在其他方法前,成員變量后。

奇怪的方法定義格式:沒(méi)有返回值類型定義,方法名與類名相同,參數(shù)依據(jù)需求而定。

public 類名(參數(shù)類型 參數(shù)1,參數(shù)類型 參數(shù)2){

//創(chuàng)建對(duì)象時(shí)要執(zhí)行的邏輯,經(jīng)常為成員變量賦值

}

如:

public class Person{

private String name;

private int age;

//兩個(gè)構(gòu)造方法為重載關(guān)系

public Person() {} //空參的構(gòu)造方法

public Person(String name,int age) { //帶參的構(gòu)造方法

this.name = name;

this.age = age;

}

}

代碼示例:

package cn.javahelp;

/*

* 自定義類型Person 類

*

* name? age

*

* 吃? 睡

*

* 構(gòu)造方法?

*

* 核心功能創(chuàng)建對(duì)象? 只要方法被調(diào)用,就已經(jīng)創(chuàng)建了對(duì)象

* 為成員變量賦值,在創(chuàng)建對(duì)象的同時(shí),通過(guò)構(gòu)造方法的方法體邏輯,為成員變量賦值,此時(shí)可以為帶參構(gòu)造

*

* 定義格式 一般定義在其他方法前,成員變量后。

*

* public 類名(參數(shù)類型 參數(shù)1,參數(shù)類型 參數(shù)2){

*? //創(chuàng)建對(duì)象時(shí)要執(zhí)行的邏輯,經(jīng)常為為成員變量賦值

* }

*

* 如果沒(méi)有手動(dòng)給出構(gòu)造方法? java會(huì)為我們自動(dòng)補(bǔ)齊一個(gè)空參的構(gòu)造方法

* 如果手動(dòng)給出任意構(gòu)造方法? java將不會(huì)為我們補(bǔ)齊空參構(gòu)造

*

*

* public 代表公共的? 任何包下都可以訪問(wèn)

* 默認(rèn)什么都不寫? 代表默認(rèn)權(quán)限? 當(dāng)前包下可以訪問(wèn)

* private? 代表私有? 本類中可以訪問(wèn)

*

*/

public class Person {

private String name;

private int age;

//定義無(wú)參構(gòu)造方法

Person(){

//方法邏輯

System.out.println("我是Person的無(wú)參構(gòu)造");

}

//定義帶參構(gòu)造一般都是為了給成員變量賦值

public Person(String name ,int age){

System.out.println("我是Person帶參構(gòu)造給成員變量賦值");

this.name = name;

this.age = age;

}

public Person(int number){

System.out.println("我是Person的帶參構(gòu)造,每次調(diào)用我打印n次i love java");

for (int i = 0; i < number; i++) {

System.out.println("i love java");

}

}

public void eat(){

System.out.println("吃");

}

public void sleep(){

System.out.println("吃");

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

package cn.javahelp;

/*

* 測(cè)試構(gòu)造方法constructor

*/

public class Test {

public static void main(String[] args) {

Person p = new Person();

System.out.println(p.getName());

System.out.println(p.getAge());

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

Person p2 = new Person("柳巖",18);

System.out.println(p2.getName());

System.out.println(p2.getAge());

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

Person p3 = new Person(3);

System.out.println(p3.getName());

System.out.println(p.getAge());?

}

}

3、默認(rèn)構(gòu)造方法

構(gòu)造方法是必須存在的,如果沒(méi)有手動(dòng)給出構(gòu)造方法,Java會(huì)自動(dòng)為我們補(bǔ)齊一個(gè)空參的構(gòu)造方法。這個(gè)過(guò)程我們是看不到的。

如果手動(dòng)給出了構(gòu)造方法,java則不會(huì)再自動(dòng)補(bǔ)齊任何構(gòu)造。

4、構(gòu)造方法的習(xí)慣性定義

學(xué)習(xí)階段一般我們會(huì)定義至少兩個(gè)構(gòu)造方法:空參構(gòu)造與帶參構(gòu)造。

(1)空參構(gòu)造是習(xí)慣上存在的。后期一些情況要求我們必須提供空參構(gòu)造。

(2)帶參的構(gòu)造方法通常是為了給屬性賦值的。

構(gòu)造方法在定義時(shí),有時(shí)還會(huì)完成一些初始化動(dòng)作。

5、構(gòu)造方法的使用解釋

同其他方法相同,構(gòu)造方法也是先定義再使用。而不同的是,其他方法的調(diào)用是為了這個(gè)方法對(duì)應(yīng)的功能,而構(gòu)造方法的功能就是創(chuàng)建對(duì)象,同時(shí)可以為屬性賦值。我們?cè)诖酥皠?chuàng)建對(duì)象的方式均是通過(guò)構(gòu)造方法。

這樣當(dāng)對(duì)象創(chuàng)建出來(lái)后就已經(jīng)具備了非默認(rèn)值的初始值。

new 類型(實(shí)際參數(shù));?

//其結(jié)果就是產(chǎn)生了一個(gè)該類型的對(duì)象,具備一個(gè)地址值。

//可以賦值給一個(gè)這種類型的變量。

如:

Person p = new Person();? //產(chǎn)生了Person的對(duì)象

System.out.println(p);? //打印結(jié)果為一個(gè)對(duì)象地址值,如0x9a64

System.out.println(p.getName());? //打印結(jié)果為null

Person p2 = new Person(“AngelaBaby”,18); //產(chǎn)生了一個(gè)Person對(duì)象

System.out.println(p2);? //打印結(jié)果為一個(gè)對(duì)象地址值,如0252b2

System.out.println(p2.getName()); //打印結(jié)果為AngelaBaby

6、構(gòu)造方法的注意事項(xiàng)

構(gòu)造方法不能被繼承。

父類叫person 子類叫student 繼承構(gòu)造方法分不清對(duì)象? 繼承的構(gòu)造方法是public person 要求構(gòu)造方法和類名相同 所以和類名沖突了

構(gòu)造方法的public并不是固定不變的,我們?cè)趯W(xué)習(xí)完四種訪問(wèn)權(quán)限后,可以使用其他格式修飾構(gòu)造方法。

(看上面代碼,接口沒(méi)有構(gòu)造方法,抽象類具有構(gòu)造方法。)

7、構(gòu)造方法與set方法、顯式初始化辨析

構(gòu)造方法是為了在創(chuàng)建的同時(shí)直接為屬性賦值。

set方法時(shí)在創(chuàng)建對(duì)象之后,再重新為成員變量賦值,是修改值的過(guò)程。

顯示初始化會(huì)將每個(gè)對(duì)象都提供相同的初始化值,這樣的需求并不常見(jiàn)。

package cn.javahelp2;

/*

* 自定義類型 Animal 用來(lái)辨析 構(gòu)造方法給成員變量賦值? set方法給成員變量賦值? 顯示初始化賦值

*/

public class Animal {

private String name = "柳巖";

private int age;

//無(wú)參

public Animal(){

}

/**

* 帶參的構(gòu)造方法? 用來(lái)給成員變量賦值

* @param name 第一個(gè)參數(shù)需要一個(gè)名字

* @param age? 第二個(gè)參數(shù)需要一個(gè)年齡

*/

public Animal(String name,int age){

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

package cn.javahelp2;

/*

* 測(cè)試

* 構(gòu)造方法給成員變量賦值? set方法給成員變量賦值? 顯示初始化賦值

* 顯示初始化? 所有對(duì)象一旦創(chuàng)建只要沒(méi)有對(duì)成員變量重新賦值 就是顯示初始化的值? 一般不這樣使用

*

* 構(gòu)造方法為成員變量賦值? 當(dāng)對(duì)象一創(chuàng)建就為成員變量賦值了

* set方法賦值? 當(dāng)創(chuàng)建好了一個(gè)對(duì)象后調(diào)用set方法賦值

*/

public class Test {

public static void main(String[] args) {

Animal a = new Animal();

System.out.println(a.getName());

System.out.println(a.getAge());

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

Animal a2 = new Animal("劉柳",20);

a2.setName("劉艷");

System.out.println(a2.getName());

System.out.println(a2.getAge());

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容