一.首先看乙個程式:
public class test1}class singleton
public static singleton getsingleton()
分析:當程式執行到 singleton s = singleton.getsingleton();時 singleton類中的靜態成員被載入到了記憶體中,首先進行預設的初始化counter=0 counter2=0;
然後靜態變數進行賦值,counter1=0,counter2=50;此刻類的靜態變數載入完畢了。又有new singleton()後,載入非靜態成員,呼叫建構函式,
counter1=100; counter2=100;
二、再看乙個程式:
public class test1
}class singleton
public static singleton getsingleton()
}分析:當singleton s = singleton.getsingleton();後類singleton中的靜態成員被載入了,就是singleton=null counter1=0,counter2=0 然後就是順序賦值,
singleton=new singleton()此時構造器賦值counter=100,counter2=100;然後counter1沒有賦值 counter2賦值了counter2=50;因此:counter1=100;
counter2=50;
類的載入順序:
分兩種:
一、當第一次呼叫乙個雷的靜態方法時:
1.載入類的靜態成員(即靜態成員變數和靜態方法)到記憶體中的方法區,並初始化。如果靜態變數後有賦值語句,再為靜態成員變數賦值。類中的靜態靜態變數只需載入一次,並且是全域性共享的。
2.此時的非靜態成員沒有分配記憶體。。。。
二、當第一次new乙個類的例項:
1.載入類的靜態成員(即靜態成員變數和靜態方法)到記憶體中的方法區,並初始化。如果靜態變數後有賦值語句,再為靜態成員變數賦值。類中的靜態靜態變數只需載入一次,並且是全域性共享的。
2.載入非靜態成員。
類的載入過程
類的載入過程 1 在建立物件時,會先判斷物件所屬的型別 類 在記憶體中是否存在,如果存在則直接使用 如果不存在,則把類載入到記憶體中的方法區下 2 在把類 class 載入到方法區時,分兩種情況 2.1 從.class檔案的上面向下依次載入內容 2.2 靜態的內容載入到方法區的靜態區域下 非靜態內容...
類的載入過程
person person new person 為例進行說明。1 因為new用到了person.class,所以會先找到person.class檔案,並載入到記憶體中 2 執行該類中的static 塊,如果有的話,給person.class類進行初始化 3 在堆記憶體中開闢空間分配記憶體位址 4 ...
類的載入過程
類的載入過程,可分為三個階段,載入 連線 初始化。初始化,為類的靜態變數賦予預設的初始值 jvm規範規定了以下六種主動使用類的場景 被動呼叫,不會導致類的載入和初始化 先看乙個面試題 public class singleton public static singleton getinstance...