1. 程式人生 > >java中new一個物件jvm做了哪些事情

java中new一個物件jvm做了哪些事情

new一個物件時Jvm做了哪些事情:

之前沒有進行過類載入(1)類載入並初始化類中的靜態屬性(賦預設值,如果靜態屬性有自己賦值,則顯示自己賦的值)

                                         (2)執行靜態程式碼塊

之前進行過類載入,則從第3步開始進行

                                         (3)初始化類中的非靜態屬性

                                         (4)呼叫父類的構造器(如果父類構造器中呼叫了子類重寫後的父類方法,則呼叫子類的方法)

                                         (5)父類構造器執行完以後,如果自己宣告的屬性有顯示的賦值,則覆蓋預設值

                                         (6)執行匿名程式碼塊

                                         (7)執行構造器

                                         (8)返回記憶體地址

class HelloA{
public HelloA(){
System.out.println("HelloA");
}
{System.out.println("I'm A class");}
static {System.out.println("static A");}
}
public class HelloB extends HelloA{
    public HelloB() {
    System.out.println("HelloB");
    }
    {System.out.println("I'm B class");}
    static {System.out.println("static B");}
    public static void main(String[] args) {
System.out.println("-----main start------");
new HelloB();
new HelloB();
System.out.println("-----main end------");
}
}

以上程式的輸出結果為:

static A
static B
-----main start------
I'm A class
HelloA
I'm B class
HelloB
I'm A class
HelloA
I'm B class
HelloB
-----main end------

java程式的編譯階段是將.java檔案翻譯成.class檔案,執行時將.class檔案載入到記憶體中去解釋執行。

相關推薦

javanew一個物件jvm哪些事情

new一個物件時Jvm做了哪些事情: 之前沒有進行過類載入(1)類載入並初始化類中的靜態屬性(賦預設值,如果靜態屬性有自己賦值,則顯示自己賦的值)                                          (2)執行靜態程式碼塊 之前進行過類載入,則

JavaNew一個物件是個怎麼樣的過程?

    在語言層面建立物件(例如克隆、反序列化)通常僅僅是一個new關鍵字而已,而在虛擬機器中,物件(普通Java物件,不包括陣列和Class物件等)的建立時一個怎麼樣的過程?一、物件的建立    當虛擬機器遇到一條new指令時候,首先去檢查這個指令的引數是否能在常量池中能否

new一個物件具體什麼

1、建立一個新物件,如:var person = {};2、新物件的_proto_屬性指向建構函式的原型物件,這樣新物件就擁有了建構函式中的方法。3、將建構函式的作用域賦值給新物件。(也所以this物件指向新物件)4、執行建構函式內部的程式碼,將屬性新增給this新物件。5、

java一個物件陣列刪除元素和判斷物件陣列存幾個元素的方法

//從陣列中刪除元素方法 private int arrayTotal=0; Pet[] pets=new Pet[10]; pets[1]=dog; pets[2]=cat; pets[3]=pig

Java建立物件在記憶體哪些事情

Student s = new Student();//做了哪些事情?A:把Student.class檔案載入到記憶體B:在棧記憶體給s變數開闢一個空間C:在堆記憶體為學生物件申請一個空間D:給成員變數進行預設初始化E:通過構造方法給成員變數進行顯示初始化F:通過構造方法給成

Java宣告一個物件並賦值NULL或者只宣告不賦值

其實這個問題可以當成宣告變數要不要賦初始值的問題,不管這個變數是基礎型別還是引用型別,只是基礎型別不能賦值NULL。 這裡要分兩種清況,成員變數或者區域性變數。給一個程式碼: class People{ private String name; private int a

new一個物件都發生什麼

一. 之前沒有進行類載入 1. 類載入,同時初始化類中的靜態的屬性(賦預設值) 2. 執行靜態程式碼塊 3. 分配記憶體空間,同時初始化非靜態的屬性(賦預設值)。 4. 呼叫父類構造器 5. 父類構造器執行完後,如果自己宣告屬性的同時有顯示的賦值,那麼進行顯示賦值把

Student s = new Student();在記憶體哪些事情

【Student s = new Student();在記憶體中做了哪些事情?】      1載入Student.class檔案進記憶體      2在棧記憶體為s開闢空間      3在堆記憶體為

Student s = new Student();在記憶體哪些事情?

載入Student.class檔案進記憶體,如果該類有父類,要先載入其父類 在虛擬機器棧中為引用變數s開闢空間(棧中不會預設初始化) 在堆記憶體中為學生物件開闢空間,進行預設初始化(0,null) [

關於類、方法、對象(實例):通過一個例子看一下self都哪些事情

就會 就是 style 寫代碼 obj 這一 charm self 將不 我們在定義一個類時,經常會在類的各個方法中看到self,那麽在程序執行時self到底起了什麽作用,什麽時候要加self,這一點需要我們思考並好好理解。之前在學習時沒有想這麽多,加之用p

Mybatis與Spring整合時哪些事情

 這篇部落格主要是來分析MyBatis與Spring整合後Spring幫我們做了哪些事情,以及整合後使用MyBatis有什麼變化。 首先來看看整合包下有什麼東西吧。 第一個模組annotation:這裡做了一個註解(MapperScan),用於掃描mapper。以及mappe

申請陣列記憶體空間時哪些事情

申請陣列時,除了分配申請的空間之外,還會分配一些空間儲存和這塊記憶體相關的資訊 1、_CrtMemBlockHeader,放在申請的記憶體空間之前,包括兩部分:[1]這塊記憶體的相關資訊。[2]申請記憶體之前連續4個位元組,值為fd typedef struct _CrtM

java的方法之new一個物件的時候JVM那些事情

——之前沒有進行類載入    *1.類載入,同時初始化類中靜態的屬性(賦預設值,隨即賦宣告的值), * 2.執行靜態程式碼塊  3. 為類分配記憶體空間,初始化非靜態的屬性 (賦預設值)      4.呼叫父類構造器 5.父類構造器執行完後,如果自己宣告屬性的同時有顯示的賦

new一個物件java虛擬機器什麼?

這個問題一直困擾我很久,面試被問到好多次,但是都沒有一個清晰的認識,然後最近在回頭過來看下java基礎回味下。 當剛寫完一個java程式,main方法new一個物件,記憶體做了如下操作: 一、初期: 程式先進入編譯時期,java編譯器將程式

Java字串直接賦值和new一個物件,得到的地址值是什麼樣子的

  public class StringDemo2 { public static void main(String[] args) { String s1 = "hello"; String s2 = new String("hello"); String s3 = "hello"

new一個物件時在JVM會有哪些操作

目錄 類載入機制 1、載入 2、連線  3、初始化 首先我們瞭解一下虛擬機器(JVM)的記憶體分佈      程式計數器(program count register):當前執行緒所執行

javanew出來一個物件和定義一個物件賦值為空有什麼不同

new 一個物件出來,比如SomeClass sc=new SomeClass();這個時候已經為sc這個物件分配了指向 new SomeClass() 所建立的記憶體空間。即對這個物件sc進行了例項化。而SomeClass sc=null,則sc物件未進行例項化,是一個空的物件,未能指向任何記憶體空間。

Java基礎-new一個在不同個包且只有protected構造方法的類的物件(匿名內部類的使用)

目錄 前言   如何new一個在不同個包中且只有protected構造方法的類的物件呢?在講解如何實現之前,來講一下事情的緣由。下面將說明如何實現(這裡主要講的是如何使用匿名內部類實現)。後續描述的內容如有問題請廣大讀者能夠耐心指出,給讀者帶來不便

Java List新增一個物件多次

在實際應用場景中,可以需要在一個List中新增多個物件,在使用的時候有個誤區就是將一個物件新增多次到List中,導致資料不一致。 測試程式碼: public class test { public static void main(String[] args) {

iOS App一個檢視從新增到完全渲染,在這個過程,iOS系統都什麼?

文字簡答: 首先一個檢視由CPU進行Frame佈局,準備檢視和圖層的層級關係,查詢是否有重寫drawRect:或drawLayer:inContext:方法,注意:如果有重寫的話,這裡的渲染是會佔用CPU進行處理的。 CPU會將處理檢視和圖層的層級關係