1. 程式人生 > >JVM載入一個類例項化的過程

JVM載入一個類例項化的過程

<span style="font-size:32px;">子類A繼承父類B, A a = new A(); 則父類B建構函式、父類B靜態程式碼塊、父類B非靜態程式碼塊、子類A建構函式、子類A靜態程式碼塊、子類A非靜態程式碼塊 執行的先後順序是?
正確答案: C  

A父類B靜態程式碼塊->父類B建構函式->子類A靜態程式碼塊->父類B非靜態程式碼塊-></span>
<span style="font-size:32px;">子類A建構函式->子類A非靜態程式碼塊
B父類B靜態程式碼塊->父類B建構函式->父類B非靜態程式碼塊->子類A靜態程式碼塊-></span>
<span style="font-size:32px;">子類A建構函式->子類A非靜態程式碼塊
C父類B靜態程式碼塊->子類A靜態程式碼塊->父類B非靜態程式碼塊->父類B建構函式-></span>
<span style="font-size:32px;">子類A非靜態程式碼塊->子類A建構函式
D父類B建構函式->父類B靜態程式碼塊->父類B非靜態程式碼塊->子類A靜態程式碼塊-></span>
<span style="font-size:32px;">子類A建構函式->子類A非靜態程式碼塊</span>

這種題,你不能不懂JVM例項化物件的過程,

我們就把這個過程列出來:

1首先需要虛擬機器加載出.class檔案,並載入進記憶體,並會載入該例項的父類(如果該例項有父類,我們為了好講解,下面都當有父類的情況)

2在堆記憶體開闢空間,分配地址

3然後是物件中的屬性進行初始化

4對應的建構函式進行初始化

5在建構函式中,首先對父類進行初始化

6父類初始化完成後才會對子類屬性進行初始化

7子類建構函式進行初始化

8初始化完成後,將地址值賦給引用變數。

相關推薦

JVM載入一個例項過程

<span style="font-size:32px;">子類A繼承父類B, A a = new A(); 則父類B建構函式、父類B靜態程式碼塊、父類B非靜態程式碼塊、子類A建構函式、子

JVM總括四-載入過程、雙親委派模型、物件例項過程 JVM思考-init和clinit區別

JVM總括四-類載入過程、雙親委派模型、物件例項化過程 目錄:JVM總括:目錄 一、 類載入過程 類載入過程就是將.class檔案轉化為Class物件,類例項化的過程,(User user = new User(); 這個過程是物件例項化的過程); 一個.class檔案只有一個Class物件(位元

JVM思考-init和clinit區別 JVM總括四-載入過程、雙親委派模型、物件例項過程

JVM思考-init和clinit區別 目錄:JVM總括:目錄 clinit和init的區別其實也就是Class物件初始化物件初始化的區別,詳情看我上一篇部落格:  JVM總括四-類載入過程、雙親委派模型、物件例項化過程 一、init和clinit方法執行時機不同   init是物件構

JVM總括四-載入過程、雙親委派模型、物件例項過程

JVM總括四-類載入過程、雙親委派模型、物件例項化過程 目錄:JVM總括:目錄 一、 類載入過程 類載入過程就是將.class檔案轉化為Class物件, 類例項化 的過程 ,(User user = new User(); 這個過程是 物件例項化 的

載入過程(clinit()),物件例項過程(init())

類載入過程: 1、類載入就是執行Java程式編譯之後在位元組碼檔案中生成的clinit()方法(稱之為類構造器),clinit()方法由靜態變數和靜態程式碼塊組成。 2、子類的載入首先需要先載入父類,如果父類為介面。則不會呼叫父類的clinit方法。一個類中可以沒有clinit方法。 3、clinit方

JVM如何載入一個過程

虛擬機器把描述類的資料從Class檔案載入到記憶體,並對資料進行校驗、轉換解析、初始化,最終形成可以被虛擬機器直接使用的Java型別,這就是虛擬機器的類載入機制 從類被載入到虛擬機器記憶體中開始,到卸

例項載入過程詳解

在看這篇部落格之前: 想深入瞭解類的載入,從.class檔案到類被載入到虛擬機器並初始化可以檢視類的載入過程詳解 類的載入 什麼時候類載入:第一次需要使用類資訊時載入。 類載入的原則

Java載入例項過程

0x00 背景知識 1、虛擬機器在首次載入Java類時,會對靜態初始化塊、靜態成員變數、靜態方法(下文將這三種統稱為靜態程式碼塊)進行一次初始化 具體過程是: ①裝(加)載類的載入指的是將類的.class檔案中的二進位制資料讀入到記

面向物件【day07】:例項過程剖析(三)

本節內容 1、概述 2、類的語法 3、總結 一、概述    之前我們說關於python中的類,都一臉懵逼,都想說,類這麼牛逼到底是什麼,什麼才是類?下面我們就來講講,什麼是類?它具有哪些特性。 二、類的語法 2.1 語法

JVM總括四-加載過程、雙親委派模型、對象實例

jvm 地址 解析 img 指向 image pan 編譯 jvm內存 JVM總括四-類加載過程、雙親委派模型、對象實例化 一、 類加載過程 一定要註意每個過程執行的內容!!!!!! 1、Load:   將編譯後的.class文件以二進制流的方式加載到JVM內存中,並轉

物件例項過程

2018年11月05日 08:58:03 aprildusk 閱讀數:3 個人分類: java

Java子父中的建構函式例項過程

其實我們發現子類繼承父類操作很簡單,如果要是去深入的研究下會發現,例項化過程並非是我們看到的那樣,我們就以程式碼舉例來說明; 問大家,以下程式碼執行會輸出什麼呢? package com.oop; /** * 定義動物物件 * @author

JVM一個只會被載入一次

     載入是相對於程序而言的,     啟動一個main方法,也就是啟動了一個程序,在一個程序中,一個類只會被載入一次public class TestThread { /**

Java例項jvm執行順序

程式碼: public class ClassLoaderTest { public static void main(String[] args) { son sons=new son(); } } class parent{ private sta

JVM一個只會被載入一次

     載入是相對於程序而言的,      啟動一個main方法,也就是啟動了一個程序,在一個程序中,一個類只會被載入一次 public class TestThread { /** * 啟

實現一個只能例項一次的 即 單例模式(Singleton)

單例模式的要點有三個: 某個類只能有一個例項; 它必須自行建立這個例項; 它必須自行向整個系統提供這個例項。 從具體實現角度來說,就是以下三點: 單例模式的類只提供私有的建構函式 類定義中含有一個該類的靜態私有物件 該類提供了一個靜態的公有的函式

java例項記憶體過程與面向物件特徵

在談到類例項化的記憶體過程時先說說幾個概念: 物件:記憶體上來說是分配在堆上面的一塊記憶體區域 類:把一類具體事物相同特徵,功能/行為抽象為屬性與方法過程。 類是物件的模板,物件是類的具體表現。 建構函式:與類名同名的函式,用來例項化物件並初始化成員變數。 注意:構造器、建構函式不能稱為構造方法。 類的結

java面向物件——繼承最終章--子例項過程(記憶體)

一個物件的例項化過程:Person p=new Person(); 1.jvm會讀取指定的路徑下的Person.class檔案,並載入進記憶體。    並會先載入Person中的父類(如果有父類物件的情況下)。 2.在堆記憶體中開闢空間,分配地址 3.並在物件空間中,對物件

java之面向物件:子物件的例項過程詳解

在子類建構函式中,發現,訪問子類建構函式時,父類也運行了。原因是什麼呢? 在子類的建構函式裡第一行有一個預設的隱式語句:super() ExtendsDemo.java class Fu { Fu() { System.out.println("fu run")

載入、物件例項知識點一網打盡

## 前言 之前說了類載入的過程,但是有的讀者表示還是有些知識點沒弄清楚,相關面試題也不能思考出結果,所以今天就來總結下`類載入、物件例項化`方面的知識點/面試題,幫助大家加深印象。 全是乾貨,一網打盡類的`基礎知識`!先看看下面的問題都能回答上來嗎? * 描述new一個物件的過程,並結合例子說明。 *