2017-04-12 62 views
4

一樣,我無法理解一個對象是如何隱式創建的。java如何隱式創建對象?就像String類

例子:

String s = "implicit instantiation"; 

我可以做我自己的類,它的對象可以隱式創建?

+2

總之:你不能。 –

+2

'字符串'是一個特殊的對象,它周圍有一些語法糖 - 字符串文字,連接操作符,在'switch'情況下使用的能力。只有字符串具有這種能力(數組也有「文字」)。 – RealSkeptic

回答

3

不,字符串實例化由編譯器隱式處理。只有String和Array類具有此屬性。

String greeting = "Hello world!"; 
char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' }; 

Autoboxing讓你隱式實例化基本類型的包裝類型的對象,但是這也是一個特殊的情況下,由編譯器處理。你不能用這個能力創建你自己的類。

Boolean b = false; 
Integer i = 0; 
Double pi = 3.1416; 
+2

我們不能'整數i = 5'嗎? –

+0

@Shashwat哦,是的,讓我補充一點。 –

1

不幸的是,你不能那樣做!

相反C或C++,你不能重載Java語言中的任何操作,所以沒有可能的方式做類似

Foo myFoo = 1 

在String類的情況:

String s = "implicit instantiation" 

這對於開發者來說就是sugar sintax,幕後是編譯器在做「髒」工作並做類似事情(記住有一個字符串池):

String s = new String("implicit instantiation") 

這同樣適用於其他一些類型,如數組或包裝換號......

0

對於你需要一個構造函數和構造它的一個用於構建一個特殊的方法和初始化方法的對象的每個實例。例如:

String s; // Is not initialized and it's nos constructed. 

那麼你如何在java中構造一個新的對象?容易與new operator你創建一個新的對象!

s = new String("qwe"); // New object constructed 

但這裏的東西,很多的新手得到confussed。爲什麼我能做到這一點:

String s= "asdfasd;" 

因爲String是在Java中的特殊情況,你不需要添加new operator像所有那些類的原始變量。例如:

Integer i = 3; 
Double d = 3.3d; 

等等。