用声明初始化变量

时间:2012-07-16 08:22:11

标签: java

我是C#开发人员,我非常习惯于在同一个声明语句中初始化变量

ClassA myClass = new ClassA();

就我而言,这种做法简洁,可读,看起来很整洁。

现在,我正在学习java for android。到目前为止,无论我遇到什么java片段,我都看到片段编写器正在使用这样的代码:

ClassA myClass;
myClass = new ClassA();

现在,我明白了,我的问题可能听起来很愚蠢,但真的很好奇,是否有任何影响/影响,或者这两种方法有什么区别?我的意思是,如果我在java中编译代码如下:

ClassA myClass = new ClassA();

内部有什么关系吗?我只是想确定我没有做错任何事。

5 个答案:

答案 0 :(得分:7)

不,这不是C#/ Java差异,你的习惯是合适的。除非必须由于初始化是有条件的(if / else),否则没有充分的理由将声明和初始化分开。

我确信有很多Android代码 写得恰当,就像那里有很多 C#一样。听起来你只是变得不走运(或者可能是同一位作者阅读了大量代码,而且风格很不幸)。

答案 1 :(得分:1)

这两种方法都是有效的,没有人可以在施工时停止初始化变量。

在第二种方法中,您可以根据需要构建对象。

如果你有参数化的构造函数。

ClassA myClass = new ClassA(xyz);

在上面的方法中,使用默认对象创建引用。

ClassA myClass;

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

 myClass=new ClassA(xyz);

答案 2 :(得分:1)

不确定你看过什么片段,但没有什么可以阻止你这样做:

ClassA myClass = new ClassA();

区别在于java不会允许你忽略异常,因为C#会在很多情况下你有这样的东西:

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

在这种情况下,如果你想在try块之外使用myClass变量,你必须在try块之外定义它并在try中初始化它:

ClassA myClass = null;

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

答案 3 :(得分:0)

类myClass;

此时,在调用“new”关键字之前,它不会创建新的java对象。但关键是,如果你的变量是全局的,不要使用直接声明。

答案 4 :(得分: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的唯一原因。