2

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

ClassA myClass = new ClassA();

在我看来,这种做法更简洁、更具可读性并且看起来很整洁。

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

ClassA myClass;
myClass = new ClassA();

现在,我明白了,我的问题可能听起来很傻,但真的很想知道,这两种方法之间是否有任何影响/效果或有什么区别?我的意思是,如果我像这样在 java 中编译代码:

ClassA myClass = new ClassA();

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

4

5 回答 5

7

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

我确信有很多编写得当的 Android 代码,就像那里有很多糟糕的C# 代码一样。听起来你只是运气不好(或者可能阅读了同一作者的大量代码,他的风格很不幸)。

于 2012-07-16T08:23:50.447 回答
1

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

在第二种方法中,您在需要时按需构造对象。

如果您有参数化构造函数。

ClassA myClass = new ClassA(xyz);

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

ClassA myClass;

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

 myClass=new ClassA(xyz);
于 2012-07-16T08:25:29.837 回答
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();
    }
于 2012-07-16T08:28:22.947 回答
0

A类我的类;

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

于 2012-07-16T08:30:02.383 回答
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。

于 2012-07-16T08:30:50.760 回答