2012-07-16 46 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取得这样做的唯一原因。