2012-07-16 64 views
2

初始化變量我是C#開發人員,我非常習慣於在同一個聲明語句來初始化變量帶有聲明

ClassA myClass = new ClassA(); 

爲了我的角度來看,這種做法是簡潔,更具可讀性和外觀整潔。

現在,我正在學習Android的java。到目前爲止,我面對任何Java代碼,我到處看到片段作家是用這樣的代碼:

ClassA myClass; 
myClass = new ClassA(); 

現在,我明白了,我的問題可能聽起來很傻,但真的很想知道,是否有任何影響/效果還是這兩種方法有什麼區別?我的意思是,如果我編譯這樣的java代碼:

ClassA myClass = new ClassA(); 

有什麼關於它內部的問題嗎?我只是想確定我沒有做錯什麼。

回答

7

不,這不是C#/ Java的區別,你的習慣是適當的。除非必須由於初始化是有條件的(if/else),否則沒有充分的理由來拆分聲明和初始化。

我敢肯定有很多這適當地寫,就像有足夠的 C#在那裏的Android代碼。這聽起來像你剛剛變得不幸(或者可能是由同一作者閱讀了很多代碼,他們有不幸的風格)。

1

兩種方法都是有效的,沒有人可以在施工時停下來初始化變量。

在第二種方法中,您在需要時按需構建對象。

如果您有參數化的構造函數。

ClassA myClass = new ClassA(xyz); 

在上面的方法中,您使用默認對象創建引用。

ClassA myClass; 

// some condition 
myClass=new ClassA(abc); 
// some other 

myClass=new ClassA(xyz); 
+0

謝謝。但是,我認爲,在我需要它之前,我不應該聲明一個變量。以我的觀點來看,懸掛指針/參考遠離使用會使代碼聞起來。無論如何,程序員對程序員的做法和選擇當然不同。 – 2012-07-16 08:40:54

1

不知道什麼網頁摘要你看着,但是沒有什麼阻止你做:

ClassA myClass = new ClassA(); 

不同的是,java會不會讓你忽略的例外是C#會因此在很多的情況下,你有這樣的事情:

try{ 
ClassA myClass = new ClassA(); 
} 
catch(Exception e) 
{ 
} 

在這種情況下,如果你喜歡用MyClass的變量try塊之外,你必須把它定義在try塊外面,在嘗試將其初始化:

ClassA myClass = null; 

    try{ 
    myClass = new ClassA(); 
    } 
    catch(Exception e) 
    { 
    } 
    if(myClass != null){ 
     myClass.doSomething(); 
    } 
+0

「java不會允許你忽略異常,因爲C#會」---感謝信息,我不知道,我會檢查出來。 – 2012-07-16 08:36:59

0

ClassA myClass;

此時,它不會創建一個新的java對象,直到您調用「new」關鍵字。但問題是,如果你的變量是全局的,不要使用直接聲明。

0

它可能會造成的唯一「差異」是當你的myClass被用在try-catch塊中時。

ClassA myClass; 

try { 
    myClass = new ClassA(); // exception may occur here 
} catch { 
    // catch and process exception 
} finally { 
    // always do something 
} 

doSomethingWith(myClass); 

如果您在try塊中聲明並初始化,那麼它在外面將不可見。
這是從我的POV,ATM取得這樣做的唯一原因。