/*** 初始化(一)
* 成員變數和構造機的初始化過程
* 1,成員變數的初始化:
* 2,構造方法的執行順序:
* 3,靜態成員的執行順序;
* 4,靜態**塊的執行順序;
*//* 一,成員初始化 */
class memberinitialization
/*2,指定初始化*/
//(1),在定義變數的地方初始化.
private boolean bl = true;
private char ch = 'a';
private byte bt = 0;
private short sh = 10;
private int in = 20;
private long lg = 30;
private float fl = 0.0f;
private double dl = 1.0;
private string strg = "string";
private memberinitialization ob = this;
public void printinfo2()
//(2),通過方法初始化
int j = f();
int f()
int x = a();
int y = b();
int a()
int b()
public static void main(string args)
}/*總結: 類中的成員變數將自動初始化,但是方法中定義的變數必須在使用前初始化*/
/* 輸出結果:
boolean false
char
byte 0
short 0
int 0
long 0
float 0.0
double 0.0
string null
reference null
boolean true
char a
byte 0
short 10
int 20
long 30
float 0.0
double 1.0
string string
reference memberinitialization@190d11
j = 1 x = 2 y = 4
*//* 二,構造方機初始化 */
/*1,在構造方法中初始化*/
class constructor
public constructor(int mark)
}/*2,初始化的順序*/
class constructorinitialization
private constructor con2 = new constructor(2);//con2定義在構造方法後
public void function()
private constructor con3 = new constructor(3);//con3定義在成員方法function後
public static void main(string args)
}/*3,靜態資料的初始化*/
class staticdata
}class statictest
static staticdata data2 = new staticdata(2);//靜態成員data2定義在構造方法之後,data4之後
public void function()
static staticdata data3 = new staticdata(3);//靜態成員data3定義在構造方法,成員方法,data4之後
public static void main(string args)
}/*4,非靜態**塊的初始化*/
class codetest
//在構造方法之前
codetest()
//在構造方法中
}//在構造方法後
void function()
//在成員方法後
public static void main(string args)
/* 輸出結果:
* code1 is calling...
* code2 is calling...
* code3 is calling...
* codetest()
* code4 is calling...
* function()
* again...
* code1 is calling...
* code2 is calling...
* code3 is calling...
* codetest()
* code4 is calling...
* function()
*///同樣打亂了**塊的順序,我們得到的結論是:
//**塊是在構造方法之前和成員方法呼叫前被呼叫.
}/*5,靜態**塊*/
class staticcodetest
staticcodetest()
}static
void function()
static
public static void main(string args)
/* 輸出結果:
* static code1 is calling...
* static code2 is calling...
* static code3 is calling...
* staticcodetest()
* static code4 is calling...
* function()again...
* staticcodetest()
* static code4 is calling...
* function()
*///同樣,打亂了靜態**塊的順序,我們的結論是:
//同樣靜態**塊是在構造方法之前和成員方法呼叫前被呼叫.但是由於是靜態的,所以只被初始化一次.
}/*6,總結*/
//我們在程式中將所有的成員加進去,看看這個順序
class summarizedata
}public class summarizetest
static //在構造方法之前交叉定義
summarizetest()
}summarizedata data5 = new summarizedata(5);
static summarizedata data2 = new summarizedata(2);
static //在構造方法之後交叉定義
void function()
summarizedata data6 = new summarizedata(6);
static summarizedata data3 = new summarizedata(3);
static //在成員方法之後交叉定義
public static void main(string args)
/* 輸出結果:
* summarizedata(1)
* static code1 is calling...
* summarizedata(2)
* static code2 is calling...
* summarizedata(3)
* static code3 is calling...
* summarizedata(4)
* code1 is calling...
* summarizedata(5)
* code2 is calling...
* summarizedata(6)
* code3 is calling...
* summarizetest()
* summarizedata(7)
* code4 is calling...
* function()
* again...
* summarizedata(4)
* code1 is calling...
* summarizedata(5)
* code2 is calling...
* summarizedata(6)
* code3 is calling...
* summarizetest()
* summarizedata(7)
* code4 is calling...
* function()*/}
/* 通過以上例項我們得出的結論:
* 程式的執行順序是:
* 首先執行靜態成員和靜態**塊(靜態成員變數和靜態**塊按照先後定義的順序執行,並且只執行一次)
* 之後執行成員變數和非靜態**塊(同樣,成員變數和非靜態**塊按照定義的先後順序執行,並且可以執行多次)
* 在次執行構造方法
* 最後執行成員方法
*/
物件導向 物件初始化
類名 alloc 使用nsobject提供的init方法雖然可以完成初始化,但由於它只是完成最基本的初始化,因此物件的所有成員變數依然為0。重寫init方法,可以加入任意的自定義處理 對屬性執行初始化 例 在.h檔案中定義屬性 property nonatomic copy nsstring nam...
java物件初始化過程
假設有一下類 class test test int n 0 我們知道,任何物件在使用前都會被初始化,方法裡面的區域性變數必須給初始化值才能通過編譯。現在我們來討論一下初始化的過程 對於字段 變數 而言,如果是基本型別,那麼即使不給初始值,都會得到jvm預設的初始值 boolean預設是false,...
物件導向(二)初始化方法
初始化方法 類名 就可以建立乙個物件 類名 建立物件的時候,python直譯器會自動執行以下操作 為物件在記憶體中分配空間 建立物件 呼叫初始化方法為物件的屬性設定初始值 這個初始化方法是內建方法,是專門用來定義乙個類據有哪些屬性和方法的 class cat def init self,name s...