java 關於初學面向物件的問題二:建立物件過程
在有static、final、extends、implements修飾的類(包括屬性和方法)的物件建立過程。因此約定下述引用宣告和物件建立:
匿名物件:沒有宣告引用的物件,一般是Has-a關係中的類建立的,直接在方法中賦值。
Class A = new B(引數表);引用的宣告都是在物件建立之前的(如果你不是建立的匿名物件的話)。
1、通常情況下(在沒有上述任何修飾詞的情況下,只包含屬性和方法的一般類)物件建立過程如下:
- 給物件分配記憶體空間(準確的說是屬性),並且將屬性值置為預設值0或者null或者false
- 例項變數初始化,將定義類時直接賦給屬性的字面值
- 呼叫類的構造方法,將構造方法中的引數傳給屬性(如果有引數的話)
2、多型的建立過程extend修飾:先宣告父類引用在建立子類物件
- 給子類屬性分配記憶體空間並將屬性值置為預設值
- 遞迴構造父類物件:1)給父類屬性分配記憶體空間(包括私有屬性),並將屬性置為預設值,如果父類還有父類,則此步完成後再次遞迴構造父類物件;2)父類例項變數初始化;3)呼叫父類的構造方法完成物件的初始化
- 子類例項變數初始化
- 呼叫子類的構造方法完成全部物件的初始化
3、初始化程式碼塊
- 給物件分配記憶體空間
- 呼叫初始化程式碼塊(在每一次建立物件時都會呼叫一次,其內部的變數屬於區域性變數)
- 例項變數初始化
- 呼叫構造方法完成物件的建立
- 呼叫本類初始化程式碼塊在遞迴構造父類物件以後
4、靜態初始化程式碼塊和被static修飾的屬性
- 在類載入時物件建立之前呼叫靜態初始化程式碼塊
- 靜態修飾的部分從父類開始執行父類的靜態初始化程式碼塊->父類靜態屬性->子類靜態初始化程式碼塊->子類靜態屬性……靜態方法在物件建立過程中不分配記憶體空間
- 建立物件
5、final修飾
- final修飾的屬性在例項變數初始化(1.2)時完成賦值,如果final修飾的屬性賦值是在定義時給出而不是在構造方法中給出的。
6、包含屬性為類的類
- 屬性為其他類時,它和本類其他的屬性沒有任何差別,如果在呼叫有參構造時不使用匿名物件方式賦值的話,需先行用此屬性類建立一個物件,並給出引用
- 匿名物件方式賦值:在建立物件時,先行建立屬性的類的物件,其建立物件和其他物件的建立過程是一致的
7、構造方法帶引數的建立過程
- 就是呼叫構造方法,不過帶引數的構造方法一般都是給屬性賦值,有時會在這裡給final屬性賦值。
- implements是實現介面的關鍵字,也是多型的體現。介面的屬性都是公開靜態常量,因此他的屬性都是在類載入的時候完成的初始化。介面沒有構造方法。
總結:
因此整個建立物件的過程可以總結如此下:
- 所有介面屬性的空間分配和賦值
- 遞迴呼叫靜態初始化的成分,父類的靜態初始化程式碼塊,然後靜態屬性的空間分配和初始化
- 子類的靜態初始化程式碼塊,靜態屬性的空間分配和初始化
- 呼叫的構造方法中屬性為類,需要建立匿名物件的,先行建立一個物件,然後再建立本類物件
- 利用本類物件的建立過程,給物件分配記憶體空間,並將屬性值設為預設值
- 遞迴構造父類物件<就是重複5~9的過程>
- 呼叫本類的初始化程式碼塊
- 例項變數初始化,final修飾的屬性是直接賦值的話,在此步就會完成給屬性的賦值,如果是在構造方法中給出則跳過初始化這一步
- 呼叫本類的構造方法,將構造方法的引數傳給屬性,完成物件的建立,
相關推薦
java 關於初學面向物件的問題二:建立物件過程
在有static、final、extends、implements修飾的類(包括屬性和方法)的物件建立過程。因此約定下述引用宣告和物件建立: 匿名物件:沒有宣告引用的物件,一般是Has-a關係中的類建
java初學 面向物件二 static關鍵字 封裝、繼承和多型
static關鍵字 1:如果沒有static會怎樣? 1:定義Person類 1:姓名、年齡、國籍,說話行為 2:多個構造,過載形式體現 2:中國人的國籍都是確定的 1:國籍可以進行顯示初始化 class Person {
Java虛擬機器(二)物件的建立與OOP-Klass模型
相關文章 Java虛擬機器系列 前言 在前一篇文章中我們學習了Java虛擬機器的結構原理與執行時資料區域,那麼我們大概知道了Java虛擬機器的記憶體的概況,那麼記憶體中的資料是如何建立和訪問的呢?這篇文章會給你答案。 1.物件的建立 物件的建立通常是通過new一個物件而
Java初學 面向物件程式設計(介面和內部類)
Java初學 面向物件程式設計(介面和內部類) 1、定義一個Phone介面,其中包含String GetPrice()方法和double GetWeight()方法;(1)在主類中設計void PrintPhone(Phone p)方法,呼叫Phone介面中的兩
包機制、訪問修飾符、Jar包 java初學 面向物件五
包機制 問題:當定義了多個類的時候,可能會發生類名的重複問題。 在java中採用包機制處理開發者定義的類名衝突問題。 怎麼使用java的包機制呢? 使用package 關鍵字。 package 包名。 問題: javac PackDemo1.java編譯沒有問題
JavaScript面向物件程式設計建立物件的方法分析
面向物件的語言具有一個共同的標誌,那就是具有“類”的概念,但是在javascript中沒有類的概念,在js中將物件定義為“無序屬性的集合,其屬性可以包含基本值,物件或者函式”,即其將物件看作是一組名值對的散列表。這樣問題就來了,如何建立物件呢? 在最開始時使用object建構函式和物件字
面向物件(建立物件)--建構函式模式02
上一篇工廠模式中有一個例子 現在建立自定義的建構函式,從而定義自定義物件型別的屬性和方法。例如,可以使用建構函式模式將上面的例子重寫如下 function Person(name, age, job) { this.name = name; this
面向物件(建立物件)--原型模式03(上)
回顧一下用建構函式模式編寫的程式碼 function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.sayName = sayN
面向物件(建立物件)--動態原型模式05
可以通過檢查某個應該存在的方法是否有效,來決定是否需要初始化原型。 function Person(name, age, job) { //屬性 this.name = name; this.age = age; this.job = jo
面向物件(建立物件)--寄生建構函式模式06
這種模式的基本思想是建立一個函式,該函式的作用僅僅是封裝建立物件的程式碼,然後再返回新建立的物件;但從表面上看,這個函式又很像是典型的建構函式。 function Person(name, age, job) { var o = new Object();
面向物件(建立物件)--七種模式總結
工廠模式(工廠模式雖然解決了建立多個相似物件的問題,但卻沒有解決物件識別的問題(即怎樣知道一個物件的型別)) function createPerson(name, age, job) { var o = new Object(); o.name = nam
java統計一個類中建立物件的個數,並使物件id遞增---static關鍵字的使用
一、思路 主要處理的問題:統計一個類中建立的物件的個數 1、在類中設定一個static的int變數,每次建立一個物件時,count加1。 staic int count=0; Person(){++count;} 2、 同時要讓物件的id遞增,只需把count加1的結果賦給
Java 基礎語法(二) 物件和類
Java物件和類 概念 物件:物件是類的一個例項,有行為和狀態。 類:類是一個模板,它描述一類物件的行為和狀態。 類 一個類可以包含以下型別變數: 區域性變數:在方法、構造方法或者語句塊中定義的變數被稱為區域性變數。變數宣告和初始化都是在方法中,方法結束後,變
沒有物件?建立物件呀!——Java建立物件的各種方式
沒有物件不可怕,就怕連物件都不能建立!下面是Java建立物件的5中方式 摘自程式設計師大咖 使用class類newInstance方法 呼叫了建構函式
Js面向物件程式設計——建立物件(工廠模式)
建立物件——工廠模式 建立物件——工廠模式 建立物件——工廠模式 工廠模式是軟體工程領域一種廣為人知的設計模式,這種模式抽象了建立具體物件的過程。考慮到在ECMAScript種無法建立類,開發人員就發明了一種函式,用函式來封裝以特定介面
Js面向物件程式設計——建立物件動態原型模式
建立物件動態原型模式 動態原型模式 動態原型模式 有其他OO語言經驗的開發人員在看到獨立的建構函式和原型時,很可能會感到非常困惑。動態原型模式正式時致力於解決這個問題的一個方案,它把所有資訊都封裝在了建構函式中,而通過在建構函式中初始化
JAVA中四種常見建立物件方法
一、使用new關鍵字 這是我們最常見的也是最簡單的建立物件的方式,通過這種方式我們還可以呼叫任意的夠贊函式(無參的和有參的)。 比如:Student student = new Student(); 二、呼叫物件的clone的方法 無論何時我們呼叫一
js -- 理解面向物件(建立物件與繼承)
目錄 二、繼承 1. 原型鏈 宣告: 部落格中關於js篇都是在node環境下測試,若在瀏覽器中有些地方結果可能有所不同但原理相同。 一、建立物件 1. 工廠函式模式 該模式抽象了建立具體物件
Java策略模式+反射動態建立物件
Java的反射機制使得物件可以在執行期間被動態建立。如果一個功能有很多種演算法或者策略,可以使用策略模式,對於不同的條件建立不同的策略,如果策略會拓展,可以利用反射來減少條件判斷。 1.介面 pack
java中的內部類建立物件方法
public class A { public class B { public void hxy() { System.out.println("hxy"); } } public sta