字段vs字段和新对象

Gre*_*ory 1 java variables field object

我想知道这两种情况之间的差异是什么:

class Cell
{
    Messages msg;

    public void getMessage()
    {
        msg.getMessage();
    }
}
Run Code Online (Sandbox Code Playgroud)

和:

class Cell
{
    Messages msg = new Messages();

    public void getMessage()
    {
        msg.getMessage();
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道在第一个例子中我只声明了字段,而在第二个例子中我声明了字段,对象和指定对象到字段.但是在这两种情况下我都可以.getMessage()Cell课堂上使用方法,那么什么是差异?我应该使用什么?

Adr*_*lat 6

在第二种情况下,Messages成员将在实例化时Cell实例化.这意味着msg = new Messages()当你new Cell()在代码中的某个地方写字时会被调用.

在第一种情况下,如果你实例化Cell(new Cell()例如)并调用getMessage()方法而不先设置任何东西msg,那么你将得到一个,NullPointerException因为null默认情况下对象成员的值.在第二个示例中编写的代码中不会出现这种情况.

您应该使用哪种解决方案取决于您希望如何处理代码.两者都是可以接受的,我担心这一点主要是基于意见的.您可以在此处找到有关类似问题的更多详细信息:在Java中初始化ArrayList字段的最佳实践.