Java 使用声明初始化变量

Java 使用声明初始化变量,java,Java,我是一名C#开发人员,我非常习惯于在与之相同的声明语句中初始化变量 ClassA myClass = new ClassA(); 在我看来,这种做法是简洁的,可读性更高,看起来整洁 现在,我正在学习android的java。到目前为止,无论我面对什么样的java代码段,只要我看到代码段编写器使用的代码如下: ClassA myClass; myClass = new ClassA(); try{ ClassA myClass = new ClassA(); } catch(Exceptio

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

ClassA myClass = new ClassA();
在我看来,这种做法是简洁的,可读性更高,看起来整洁

现在,我正在学习android的java。到目前为止,无论我面对什么样的java代码段,只要我看到代码段编写器使用的代码如下:

ClassA myClass;
myClass = new ClassA();
try{
 ClassA myClass = new ClassA();
}
catch(Exception e)
{
}
现在,我明白了,我的问题可能听起来很傻,但我真的很想知道,这两种方法之间是否有任何影响/效果或区别?我的意思是,如果我用java编译这样的代码:

ClassA myClass = new ClassA();
这件事有什么内在的影响吗?我只是想确定我没有做错任何事。

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


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

这两种方法都是有效的,没有人能在构建时停止初始化变量

在第二种方法中,当需要时,您可以按需构建对象

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

ClassA myClass = new ClassA(xyz);
在上述方法中,使用默认对象创建引用

ClassA myClass;

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

 myClass=new ClassA(xyz);

不确定您查看了哪些片段,但没有任何东西阻止您执行以下操作:

ClassA myClass = new ClassA();

区别在于java不允许您像C#一样忽略异常,因此在很多情况下,您会遇到如下情况:

ClassA myClass;
myClass = new ClassA();
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();
    }
ClassA myClass

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

它可能造成的唯一“区别”是在try-catch块中使用myClass时

ClassA myClass;

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

doSomethingWith(myClass);
如果您在try块中声明并初始化,那么它在try块外部将不可见。

这是我这么做的唯一原因,从我的观点来看,ATM。

“java不允许你像C一样忽略异常”——谢谢你提供的信息,我不知道,我会检查一下。谢谢。但是,我认为,在需要变量之前,我不应该声明它。在我看来,将指针/引用挂在远离用法的地方会让代码有味道。无论如何,实践和选择当然因程序员而异。