Java初始化对象

时间:2010-10-15 03:22:43

标签: java object

好的,我说我有一个班级

class Ghost {   
    private int x, y, direction;
    private Color color;

现在说我没有明确定义构造函数,所以它只使用默认构造函数。如果我要创建一个新的Ghost对象,那么方向有什么价值? 0对吗?但我不知道为什么我一直为方向获得1的值。你觉得有什么不对劲吗?

2 个答案:

答案 0 :(得分:1)

你能告诉我们更多代码吗?在这里发生了其他事情。

int变量将在Java中默认初始化为0,如果我使用您的代码段并实例化Ghost,则其所有int成员都为0。

因此,根据您的评论,我认为您的代码可能存在问题,例如您在使用directionGhost.setX时意外设置Ghost.setY

在我非常简单的类实现中,这个测试代码完全符合预期。

自代码发布以来编辑

好的,我有一个基于你的代码的课程。我没有看到其他函数有什么问题,因为很少有类实际改变direction。我删除了那些额外的函数,因为它们没有修改方向,除了一个将它设置为0的东西。

您应该尝试一个非常简化的测试用例,看看您的代码是否有效。试试这个:

import junit.framework.Assert;

class Ghost
{
    private int x, y, direction;

    public int getX() { return x; }
    public void setX(int x) { this.x = x; }

    public int getY() { return y; }
    public void setY(int y) { this.y = y; }

    public int getDirection() { return direction; }
    public void setDirection(int direction) { this.direction = direction; }

    public static void main (String [] args)
    {
        Ghost g = new Ghost();
        g.setX(10);
        g.setY(20);

        Assert.assertEquals(g.getDirection(), 0);

        System.out.println(g.getX() + " " + g.getY() + " " + g.getDirection());
    }   
}

此处仍然有效,请按原样尝试该代码。这纯粹是你的代码,如果它有效(并且它应该),那么还有其他代码,比如类的用户正在做某事。

独立,您的代码应该可以正常工作。

使用调试器

您熟悉调试器吗?如果您使用的是Eclipse或NetBeans,那么您应该使用集成到其环境中的调试器。这应该可以帮助您在direction通过放置手表来更改值时跟踪。

使用调试器超出了本答案的范围;这是你真正需要阅读并尝试自己的东西。

以下是使用Eclipse进行调试的链接:

答案 1 :(得分:1)

有些东西你没有向我们展示。你的getDirection()方法是简单地返回方向,还是做一些更奇特的东西?有没有一个setter方法可以做一些奇怪的事情?您没有向我们展示的课程的其他部分是否会以某种方式修改方向?

在Java中,int类型的实例变量初始化为0,因此您要么没有向我们展示某些内容,要么使用某些非标准实现(几乎绝对不是后者)。