1. 程式人生 > >java-面向物件程式設計-說說構造方法

java-面向物件程式設計-說說構造方法

我們在上一章中說到類與物件這個知識點,其中提到new一個物件的格式為:

//裝逼模式
ClassName  InstanceName =new ClassName();
//類名 物件名 =new 類的構造方法

在這裡,我們說到關於類的構造方法,可能會存在一些讓人覺得很混亂的地方,所以這一章就把構造方法提取出來,單獨介紹。下面進入正題:

首先,我們來談談什麼叫構造方法,既然都說了這是一個構造方法,那麼很顯然,它本質上就是一個方法。如果看到這裡的你不知道什麼叫做方法的話,可以先點選連結去看我的另一篇介紹方法的文章。
那麼,既然作為一個方法,它應該有方法的樣子吧。但是我們在上一章中發現,它除了回撥一個Class();之後,也沒見它有其他的定義方法的程式碼呀?這是因為,在未對類自定義構造方法的情況下,編譯器會自動在編譯期為其新增預設的構造方法

。什麼意思呢?就是說如果我們只是單純地像下面這麼寫的時候:

Class Car{
int weight;
Color Color;

go(){

}

}

一旦我們開始建立物件,那麼這段程式碼會被輸入編譯器進行編譯,而在編譯之前,有個幕後黑手為擅自為程式添加了這麼一段程式碼,就變成了:

Class Car{
int weight;
Color Color;
  //擅自新增的程式碼
  Public Car(){

  }
//新增程式碼結束
go(){

}

}

你看,這個幕後黑手新增的這段程式碼,是不是符合了一個無參方法?而這個,就是我們前面所呼叫的構造方法,因為它是編譯器預設加入的,所以我們把這個叫做預設構造方法


當然,前面也說了,這是在我們未對類自定義構造方法的時候,編譯器會給我們預設新增的。可是一旦我們對其自定義了構造方法之後,編譯器就不當這個幕後黑手了,也就是說,編譯器執行的是這麼一個角色:你不弄?我就幫你弄,你要是弄了,我就不管這閒事了。
那麼,這裡又牽涉到一個問題:怎麼自定義構造方法?別急,請往下看:

我們先來宣告一下構造方法的含義:與類的名稱完全相同,且不宣告返回值型別的方法,稱之為構造方法
什麼意思呢?就是說,我們的構造方法的方法名,必須和類名一致,如果有一個字母的不相符,那麼它都算不上是一個構造方法。這也是我們為什麼說構造方法可以用類名()表示的原因。同時,作為一個構造方法,它是可以有引數的,比如說:

Class Car{
int weight;
Color Color;
  //自定義的構造方法
  Public Car(int weight,Color color){
  this.weight=weight;
  this.color=color;
  }
//構造方法結束程式碼結束
go(){

}

}

你看,這就是我們自定義的一個構造方法,並且裡面也傳了引數。但是,如果我們往裡面傳遞了引數的話,我們的回撥構造方法的時候也需要加入引數,請看:

Car falali =new Car(4500,Color.black)

注意:我們在呼叫方法的時候,引數的順序和你定義引數的順序是要一致的,不能把引數位置交換

接下來,我們繞了一些彎之後,再來過九曲十八彎的河吧。

我們前面說了構造方法,無非兩種情況:有構造方法的時候,不呼叫預設的構造方法,沒有構造方法的時候,編譯器自動新增預設的構造方法。
但是,基於這一結論的延伸,我們還有下面的一個知識點,就是:構造方法可以定義多個,但每次new一個物件的時候,只能呼叫一個辦法。就好比你有好多輛的法拉利,但每一次你只能看一輛一樣。那麼,如果有多個構造方法的話,它是怎樣的呢?一個簡單的事例:

Class Car{
int weight;
Color Color;
  //自定義的構造方法1
  Public Car(int weight,Color color){
  this.weight=weight;
  this.color=color;
  }
//構造方法1結束程式碼結束
//自定義的構造方法2
  Public Car(int weight){
  this.weight=weight;
  }
//構造方法2結束程式碼結束
//自定義的構造方法3
  Public Car(){
  }
//構造方法3結束程式碼結束


go(){

}

}

在這裡,我們自定義了三個構造方法,每一個的方法名都是一致的,但是引數卻是不一致。並且你可以發現,其中竟然還有一個和預設構造方法一模一樣的構造方法,但是要注意的是,這個是我們自己自定義的方法。和編譯器無關,畢竟如果編譯器不幫我們預設建立這個方法,而我們有時候有需要這個方法的時候,我們還是可以發揮求人不如求己的精神把它再一次創造出來,反正也只是程式碼的事。
從程式碼就可以看出,實際上我們可以寫多個構造方法,但是要注意的是,每個構造方法的引數型別或者引數數量都是不一致的。決不能出現,同樣數量的資料型別,按照相同的順序排列的情況,這是絕對不允許的。請看幾個例子:
這裡寫圖片描述

這裡寫圖片描述

正確語法例項:
這裡寫圖片描述
這裡寫圖片描述

事實上,關於構造方法為什麼可以出現多個的問題,實際上涉及到了我們以後要學的一些內容,這裡不仔細詳說,只是知道有這種情況出現,並且知道構造方法的作用就好。

當然,既然要你們知道構造方法的作用,肯定也要說一下構造方法到底有何使用者才行啦。

構造方法的作用
1.快速地初始化類的成員
什麼意思呢?還記得在我們上一章中,我們是這樣給類中的屬性(類的成員)賦值的。

Car falali =new Car();
falali.weight=4500;
falali,color=Color.black;

在這裡的時候,或許有人就說了,哎呀怎麼這麼麻煩,給變數賦值還要一句一句寫。於是,我們的改進方法就是,利用構造方法,請看:

Class Car{
int weight;
Color Color;
  //自定義的構造方法
  Public Car(int weight,Color color){
  this.weight=weight;
  this.color=color;
  }
//構造方法結束程式碼結束
}

在這裡,我們自定義了一個構造方法,並且在方法裡就已經實現了初始化成員變數的操作。所以我們要建立物件,並且給成員賦值的時候,就可以直接這麼寫:

Car falali =new Car(4200,Color.black);

如此,便可直接一步完成初始化變數成員的操作啦。

2.強制要求其它類給出某些資料
這個是什麼意思呢?因為在面向物件程式設計中,幾乎所有的類與類之間,都是可以相互呼叫的。如果說我們要在類A呼叫類B去處理問題,但是類B又需要類A傳遞某些資料過來才可以進行操作時,我們就可以通過在類B中新增構造方法,把所需的資料型別新增上去,那麼當我們在類A去調動類B時,就可以在類A中建立類B的物件,並把類B所需要的資料通過構造方法傳遞給類B去處理問題。就好比你要讓廚師給你做一盤紅燒魚,但是廚師說你要給我魚,我才能幫你做。那你沒辦法,就只能再叫廚師幫你做魚的同時,給廚師帶上一條魚,這樣廚師才能給你弄魚嘛。

好啦,關於一個類的構造方法,大致講述如下,如果發覺有遺漏或者說的不對的地方,可以給我留言更正,謝謝。我們的下一章內容是:面向物件的三大特性之繼承,敬請期待

相關推薦

Java 面向物件構造方法

01構造方法引入   A:構造方法的引入     在開發中經常需要在建立物件的同時明確物件的屬性值,比如員工入職公司就要明確他的姓名、年齡等屬性資訊。     那麼,建立物件就要明確屬性值,那怎麼解決呢?也就是在建立物件的時候就要做的事情,當使用new關鍵字建立物件時,怎麼給物件的屬性初始化值呢?     這

Java面向物件構造方法

package com.zhangxueliang.demo; /* * 構造方法: * 給物件的資料進行初始化 * * 格式: * 方法名和類名相同 *

java面向物件構造方法

一.構造方法概念 需要在建立物件的同時明確物件的屬性值 //構造方法的格式: 修飾符 構造方法名(引數列表) { } 構造方法的體現: 1.構造方法沒有返回值型別。也不需要寫返回值。因為它是為構建物件的,物件建立完,方法就執行結束。 2.構造方法名稱必須和類名保持一致。 3.構造方法沒有

3.Java面向物件程式設計OOA/OOP/OOD/OOAD()/UML類圖、函數語言程式設計Scala(JVM)---類與物件、封裝繼承多型、構造方法、覆寫/重寫/override

一、緒論 1.面向物件程式設計正規化(C++、Java、Go)------能進行現實生活的抽象。             每個物件都是一個類。類中包含屬性與方法。 OOA:面向物件分析 OOP:面向物件程式設計

java-面向物件程式設計-說說構造方法

我們在上一章中說到類與物件這個知識點,其中提到new一個物件的格式為: //裝逼模式 ClassName InstanceName =new ClassName(); //類名 物件名 =new 類的構造方法 在這裡,我們說到關於類的構造方法,可能會存

Java 面向物件程式設計構造方法構造程式碼塊(1)

Java 面向物件程式設計之構造方法、構造程式碼塊 面向物件程式設計是我們認識世界,創造事物的一種新的思維,其實就抓大放小,將所

Java 007 面向物件構造方法、static關鍵字、JDK幫助文件、Math類)

知識點梳理 心得體會 小知識點 1.不同型別的靜態變數 1>靜態變數是基本資料型別時,類的外部不用建立該類例項可以能直接使用 2>靜態變數是引用時,即靜態變數是一個物件的引用,必須先初始化這個物件,才能將引用指向靜態變數 2.靜態成員與例項成員 1&

java第七天---面向物件構造方法、static關鍵字、靜態變數與成員變數的區別

1 構造方法        1 構造方法的作用 建立物件,給物件中的成員進行初始化        2  構造方法的格式特點  a:方法名與類名相同  b:沒有返回值型別,連v

JAVA面向物件程式設計之購物車介面的設計與功能的實現

1、小組成員及分工 小組成員 負責工作 蘭澤祥 負責總體介面、Git程式碼庫 吳修恩 負責MVC模式、類名包名的規範化 2、Git 倉庫地址 倉庫地址:https://gitee

javascript面向物件程式設計--靜態方法

在面向物件程式設計中,類是不能夠直接訪問的,必須例項化後才可以訪問,大多數方法和屬性與類的例項產生聯絡。但是靜態屬性和方法與類本身直接聯絡,可以從類訪問,如javascript的核心物件中的Math和Global都是靜態物件,不需例項化,可以直接訪問 類的靜態成員(屬性和方法)包括私有和共有兩種

Java面向物件——類與方法

面向物件——能進行現實生活的抽象 世界是由一系列物件互相組合形成(多個物件之間的相互協作),每個物件有自己的屬性和方法。 通俗解釋:狗吃糧,狗和糧是兩個物件 ,吃是行為 每個物件——類,每個類有自己的屬性及方法 新興的程式設計正規化: 面向切面程式設計:EE-AOP 面向介面

034_面向物件_07_構造方法

一、概念介紹   a)構造器(constructor):又稱為構造方法,用於構造該類的例項。 二、語法格式  構造器的語法格式:  [修飾符] 類名([形參列表]){    //程式碼  } 三、演示例項    /** * [說明]汽車類 * @author aeon * */ pub

Java面向物件——類與方法(練習:將車抽象為類)

程式碼: public class Car{ //屬性 //品牌(不可更改)、產地(不可更改)、顏色、價格 private String brand; private String origin; private String colour; private int price;

Java 面向物件程式設計之多型

轉自:chenssy java提高篇之理解java的三大特性——多型 封裝隱藏了類的內部實現機制,可以在不影響使用的情況下改變類的內部結構,同時也保護了資料。對外界而已它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。 繼承是為了重用父類程式碼。兩個類若存在IS-A的關係就可以使用

Java面向物件程式設計之類和物件

Java程式語言是一種面向物件的程式語言,其特性在於高度的抽象性。那麼,什麼是面向物件呢?面向物件和麵向過程有什麼區別呢?萬物可歸類,什麼是類呢?萬物皆物件,類和物件之間的聯絡是什麼?Java程式的執行需要jvm(Java虛擬機器)的支援,那麼,面向物件程式設計在計算機中怎麼進行記憶體分析;

Java 面向物件程式設計引言

*Java面向物件程式設計是Java語言的核心,Java語言就是面向物件的程式語言,在整個Java語言程式設計過程中,都會涉及到Java程式設計思想,即面向物件思想, 類和物件是 Java 程式的構成核心。圍繞著 Java 類和 Java 物件,有三大基本特性:封裝是 Java 類的編寫規範

Java 面向物件程式設計之四個關鍵字

this,super,static,final是四個常見的類的關鍵字,怎麼樣來描述類的屬性和行為? 如果一個類從另外一個類繼承,我們new這個子類的例項物件的時候,這個子類物件裡面會有一個父類物件。怎麼去引用裡面的父類物件呢?使用super來引用,this指的是當前物件的引用,super是當

Java 面向物件程式設計之介面內部類

介面,內部類,抽象類本質上也是類,是抽象的抽象類,這三種類有各自的特點。 1. 抽象類、 設計與實現的分開 抽象類:定義了抽象方法的類,不能例項化,只能被子類實現 , 用關鍵字abstract修飾。 抽象方法:只定義了方法體,沒有定義內容。 作用:為所有子類建立一

Java面向物件程式設計之三大特性

Java面向物件程式設計作為一種程式設計思想,有三大特性,封裝,繼承,多型。對於一個類而言, 如何封裝 呢?繼承是父類和子類的關係, 繼承關係如何實現的呢?父類和子類繼承時的方法體是怎麼樣的關係呢?多型是多個類之間的關係,類有不同的行為和屬性,其他類也有這樣的方法和屬性,就實現了多型的關係,

java面向物件程式設計以及陣列理解

一、語言的進化史 在計算機語言發展的早期,由於cpu和記憶體的限制,導致說發展很慢。後來由於硬體裝置的革命(即cpu價格的下跌和記憶體數量和容量的上升,記憶體的價格的下跌)和資金的推動(資本家為了提高勞動生產率和剩餘價值),計算機語言開始了高速的進化,從一開始的基本型別到結