我是C#开发人员,我非常习惯于在同一个声明语句中初始化变量
ClassA myClass = new ClassA();
就我而言,这种做法简洁,可读,看起来很整洁。
现在,我正在学习java for android。到目前为止,无论我遇到什么java片段,我都看到片段编写器正在使用这样的代码:
ClassA myClass;
myClass = new ClassA();
现在,我明白了,我的问题可能听起来很愚蠢,但真的很好奇,是否有任何影响/影响,或者这两种方法有什么区别?我的意思是,如果我在java中编译代码如下:
ClassA myClass = new ClassA();
内部有什么关系吗?我只是想确定我没有做错任何事。
答案 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的唯一原因。