1. 程式人生 > >java 關於初學面向物件的問題二:建立物件過程

java 關於初學面向物件的問題二:建立物件過程

在有static、final、extends、implements修飾的類(包括屬性和方法)的物件建立過程。因此約定下述引用宣告和物件建立:

匿名物件:沒有宣告引用的物件,一般是Has-a關係中的類建立的,直接在方法中賦值。

Class A = new B(引數表);引用的宣告都是在物件建立之前的(如果你不是建立的匿名物件的話)。

1、通常情況下(在沒有上述任何修飾詞的情況下,只包含屬性和方法的一般類)物件建立過程如下:

  1. 給物件分配記憶體空間(準確的說是屬性),並且將屬性值置為預設值0或者null或者false
  2. 例項變數初始化,將定義類時直接賦給屬性的字面值
  3. 呼叫類的構造方法,將構造方法中的引數傳給屬性(如果有引數的話)

2、多型的建立過程extend修飾:先宣告父類引用在建立子類物件

  1. 給子類屬性分配記憶體空間並將屬性值置為預設值
  2. 遞迴構造父類物件:1)給父類屬性分配記憶體空間(包括私有屬性),並將屬性置為預設值,如果父類還有父類,則此步完成後再次遞迴構造父類物件;2)父類例項變數初始化;3)呼叫父類的構造方法完成物件的初始化
  3. 子類例項變數初始化
  4. 呼叫子類的構造方法完成全部物件的初始化

3、初始化程式碼塊

  1. 給物件分配記憶體空間
  2. 呼叫初始化程式碼塊(在每一次建立物件時都會呼叫一次,其內部的變數屬於區域性變數)
  3. 例項變數初始化
  4. 呼叫構造方法完成物件的建立
  5. 呼叫本類初始化程式碼塊在遞迴構造父類物件以後

4、靜態初始化程式碼塊和被static修飾的屬性

  1. 在類載入時物件建立之前呼叫靜態初始化程式碼塊
  2. 靜態修飾的部分從父類開始執行父類的靜態初始化程式碼塊->父類靜態屬性->子類靜態初始化程式碼塊->子類靜態屬性……靜態方法在物件建立過程中不分配記憶體空間
  3. 建立物件

5、final修飾

  1. final修飾的屬性在例項變數初始化(1.2)時完成賦值,如果final修飾的屬性賦值是在定義時給出而不是在構造方法中給出的。

6、包含屬性為類的類

  1. 屬性為其他類時,它和本類其他的屬性沒有任何差別,如果在呼叫有參構造時不使用匿名物件方式賦值的話,需先行用此屬性類建立一個物件,並給出引用
  2. 匿名物件方式賦值:在建立物件時,先行建立屬性的類的物件,其建立物件和其他物件的建立過程是一致的

7、構造方法帶引數的建立過程

  1. 就是呼叫構造方法,不過帶引數的構造方法一般都是給屬性賦值,有時會在這裡給final屬性賦值。
8、implements修飾
  1. implements是實現介面的關鍵字,也是多型的體現。介面的屬性都是公開靜態常量,因此他的屬性都是在類載入的時候完成的初始化。介面沒有構造方法。

總結:

因此整個建立物件的過程可以總結如此下:

  1. 所有介面屬性的空間分配和賦值
  2. 遞迴呼叫靜態初始化的成分,父類的靜態初始化程式碼塊,然後靜態屬性的空間分配和初始化
  3. 子類的靜態初始化程式碼塊,靜態屬性的空間分配和初始化
  4. 呼叫的構造方法中屬性為類,需要建立匿名物件的,先行建立一個物件,然後再建立本類物件
  5. 利用本類物件的建立過程,給物件分配記憶體空間,並將屬性值設為預設值
  6. 遞迴構造父類物件<就是重複5~9的過程>
  7. 呼叫本類的初始化程式碼塊
  8. 例項變數初始化,final修飾的屬性是直接賦值的話,在此步就會完成給屬性的賦值,如果是在構造方法中給出則跳過初始化這一步
  9. 呼叫本類的構造方法,將構造方法的引數傳給屬性,完成物件的建立,

相關推薦

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