java中初始化
『壹』 java中怎麼數組初始化
1 動態初始化:數組定義與為數組分配空間和賦值的操作分開進行;
『貳』 java中創建對象了,顯示初始化值和構造函數初始化對象的區別先後執行順序是什麼
兩個都可以初始化值,本質上沒有區別,不同的是執行的先後。構造方法初始化值時需要包含有參的構造方法,創建對象時使用Object obj = new Object(arg1,arg2)的形式,你說的顯示初始化值應該是使用set方法吧,比如obj.setArg1(arg1)的形式。執行順序肯定是構造方法的形式要在前了,因為在對象創建之後就會給屬性賦值,而set方法形式賦值只會在你調用set方法時才會賦值。
再插一點題外話:其實在對象創建時成員變數已經初始化了,只是初始化的都是變數對應類型的默認值,比如int類型的默認值是0,引用類型默認值是null,boolean類型默認值是false。
『叄』 java的類初始化,隱式,顯示,什麼意思
1.Java對象何時被初始化
Java對象在其被創建時初始化,在Java代碼中,有兩種行為可以引起對象的創建。其中比較直觀的一種,也就是通常所說的顯式對象創建,就是通過new關鍵字來調用一個類的構造函數,通過構造函數來創建一個對象,這種方式在java規范中被稱為「由執行類實例創建表達式而引起的對象創建」。
當然,除了顯式地創建對象,以下的幾種行為也會引起對象的創建,但是並不是通過new關鍵字來完成的,因此被稱作隱式對象創建,他們分別是:
● 載入一個包含String字面量的類或者介面會引起一個新的String對象被創建,除非包含相同字面量的String對象已經存在與虛擬機內了(JVM會在內存中會為所有碰到String字面量維護一份列表,程序中使用的相同字面量都會指向同一個String對象)
●自動裝箱機制可能會引起一個原子類型的包裝類對象被創建;
●String連接符也可能會引起新的String或者StringBuilder對象被創建,同時還可能引起原子類型的包裝對象被創建,比如(本人試了下,在mac ox下1.6.0_29版本的javac,對待下面的代碼會通過StringBuilder來完成字元串的連接,並沒有將i包裝成Integer,因為StringBuilder的append方法有一個重載,其方法參數是int);
2.Java如何初始化對象
當一個對象被創建之後,虛擬機會為其分配內存,主要用來存放對象的實例變數及其從超類繼承過來的實例變數(即使這些從超類繼承過來的實例變數有可能被隱藏也會被分配空間)。在為這些實例變數分配內存的同時,這些實例變數也會被賦予默認值。
上面的代碼中,Foo和Bar中都定義了變數i,在main方法中,我們用Foo引用一個Bar對象,如果實例變數與方法一樣,允許被覆蓋,那麼列印的結果應該是1,但是實際的結果確是0。
但是如果我們在Bar的方法中直接使用i,那麼用的會是Bar對象自己定義的實例變數i,這就是隱藏,Bar對象中的i把Foo對象中的i給隱藏了,這條規則對於靜態變數同樣適用。
在內存分配完成之後,java的虛擬機就會開始對新創建的對象執行初始化操作,因為java規范要求在一個對象的引用可見之前需要對其進行初始化。在Java中,三種執行對象初始化的結構,分別是實例初始化器、實例變數初始化器以及構造函數。
http://www..com/s?wd=52014085078
『肆』 java語言,什麼是初始化啊初始化和實例化一樣嗎
java中不管對象也好,還是基本數據類型也好,你聲明它的時候,它們都稱為變數,在你使用變數前給變數進行賦值,這就是變數的初始值,因此叫變數初始化。
實例化是指對象的創建,一般是指通過 new 關鍵字(當然還有其他途徑,比如反射),在堆中為對象分配內存,這就是實例化。舉個非常簡單的例子,你知道飛機會飛,但飛機在你腦海里只是個概念,當真的把飛機製造出來,變成實實在在的,存在於物質世界(java中稱內存)的東西時,你才能用它來飛。如果在物質世界(內存)中根本就不存在,那就無法使用。因此,實例化可以說將概念(類),變成實際存在(內存中存在)的過程就稱為實例化。
『伍』 java里對象的初始化有什麼作用,什麼時候要用到
對象初始化的例子如:List<String> list;
list=new ArrayList<String>();//這樣就將其初始化了。然後你可以調用它的方法如:list.add("dsafs");//正確的調用方法。
如果沒有上述的初始化,list.add("dsafs");//運行這句話時將要產生NullPointerException(空指針)異常。
基本類型數據用著全局變數,聲明後如果不初始化的話,java虛擬機將自動對其初始化,比如你在類的成員變數中聲明:int age;//這里沒有初始化,將產生默認值0;其他基本類型數據都有其默認值。但如果是聲明局部變數,比如說在某個方法中,就必須先初始化再調用,如: void add(){
int a;
System.out.println(a);//這樣編譯時不能通過,必須要求你先初始化
}
如果你剛開始學習java的話,我建議你先看點java基礎的書,還有就是多編程,java還是很有意思的,也挺好學的,希望我的回答對你有點幫助。
『陸』 JAVA中 數據初始化的三種方法是什麼
public
class
staticinitialization
{
public
static
void
main(string[]
args)
{
system.out.println("creating
new
cupboard()
in
main");
new
cupboard();
system.out.println("creating
new
cupboard()
in
main");
new
cupboard();
t2.f2(1);
t3.f3(1);
}
static
table
t2
=
new
table();//1:標記位1
static
cupboard
t3
=
new
cupboard();//2
標記位2
}
//
/:~
/**
1:要執行main方法,必須先載入staticinitialization,載入過程中,發現有靜態變數t2,首先執行t2
=
new
table()
new
table()需要實例化table,必須先載入table類
載入table類的過程中,發現table類也有靜態變數,首先執行static
bowl
b1
=
new
bowl(1);過程和上面一樣,要去創建bow1
創建之前載入bow1類,載入完畢,調用bow1的構造方法,於是列印出「bowl(1)」
b1實例化(創建)完成
然後執行static
bowl
b2
=
new
bowl(2);
再次調用bow1構造方法,列印「bowl(2)」
這時候table類載入完畢,開始實例化t2變數,調用table類構造方法,列印「table()」
執行b2.f(1);
列印「f(1)」
2:道理和上面1一樣,只是在cupboard中,static變數初始化完畢之後,還要去初始化一個非static變數
最後執行main中的方法,注意的是,此時table,cupboard
這2個類的載入過程已經完成,之後創建這2個類的實例的過程中,不再去初始化static變數
有其他問題在hi我
*/
『柒』 java中怎麼給變數初始化
不同的變數初始化方法不同。
變數包括:
類的屬性,或者叫值域
方法里的局部變數
方法的參數
對於第一種變數,Java虛擬機會自動進行初始化。如果給出了初始值,則初始化為該初始值。如果沒有給出,則把它初始化為該類型變數的默認初始值。
int類型變數默認初始值為0
float類型變數默認初始值為0.0f
double類型變數默認初始值為0.0
boolean類型變數默認初始值為false
char類型變數默認初始值為0(ASCII碼)
long類型變數默認初始值為0
所有對象引用類型變數默認初始值為null,即不指向任何對象。注意數組本身也是對象,所以沒有初始化的數組引用在自動初始化後其值也是null。
對於兩種不同的類屬性,static屬性與instance屬性,初始化的時機是不同的。instance屬性在創建實例的時候初始化,static屬性
在類載入,也就是第一次用到這個類的時候初始化,對於後來的實例的創建,不再次進行初始化。這個問題會在以後的系列中進行詳細討論。
對於第二種變數,必須明確地進行初始化。如果再沒有初始化之前就試圖使用它,編譯器會抗議。如果初始化的語句在try塊中或if塊中,也必須要讓它在第一
次使用前一定能夠得到賦值。也就是說,把初始化語句放在只有if塊的條件判斷語句中編譯器也會抗議,因為執行的時候可能不符合if後面的判斷條件,如此一
來初始化語句就不會被執行了,這就違反了局部變數使用前必須初始化的規定。但如果在else塊中也有初始化語句,就可以通過編譯,因為無論如何,總有至少
一條初始化語句會被執行,不會發生使用前未被初始化的事情。對於try-catch也是一樣,如果只有在try塊里才有初始化語句,編譯部通過。如果在
catch或finally里也有,則可以通過編譯。總之,要保證局部變數在使用之前一定被初始化了。所以,一個好的做法是在聲明他們的時候就初始化他
們,如果不知道要出事化成什麼值好,就用上面的默認值吧!
其實第三種變數和第二種本質上是一樣的,都是方法中的局部變數。只不過作為參數,肯定是被初始化過的,傳入的值就是初始值,所以不需要初始化。