【问题标题】:Why can't an Object use a constructor when it is an attribute?为什么对象是属性时不能使用构造函数?
【发布时间】:2015-10-01 02:01:22
【问题描述】:

我在一个类中有这个属性,那也是一个对象。出于某种原因,每当我尝试为其使用构造函数时,它都会给我一个空指针异常。

这是对象的类:

    public class Posicion
{
    private int filas;
    private int columnas;

    public void Posicion(int x, int y)
    {
        filas = x;
        columnas = y;
    }
}

这是将对象作为属性的类:

public class Casillas
{
    protected char simbolo;
    protected Posicion coordenadas;

    public void Casillas(char simbolo, Posicion coordenadas) 
    {
        this.simbolo = simbolo;
        this.coordenadas = coordenadas;
    }
}

这就是我得到空指针异常的地方(“inicio”方法的第一行):

public class R2D2 extends Casillas
{
    public R2D2 inicio(int x, int y)
    {
        coordenadas.Posicion(x, y);

        R2D2 art = new R2D2();
        art.Casillas('A', coordenadas);

        return art;
    }
}

感谢我能得到的所有反馈。

编辑:这是 java 语言。

【问题讨论】:

  • 这是什么编程语言?
  • Java。使用 NetBeans。
  • 你在这里发明了语法。 coordenadas.Posicion(x, y); 不是 Java 代码,除非 Posicioncoordenadas 的一个带有两个参数的方法。你不能那样调用构造函数,
  • @EJP 在他的代码Posicion 实际上是我的方法。
  • 不,它不是构造函数。您可能需要重新检查 constructor looks like.

标签: java object constructor attributes


【解决方案1】:

您正在调用 coordenadas.Posicion(x, y);coordenadas 从未初始化,此外,Posicion()constructor - 为了调用它,您应该使用 new 关键字:

public class R2D2 extends Casillas
{
    public R2D2 inicio(int x, int y)
    {
        // instead of this:
        //coordenadas.Posicion(x, y);

        // do:
        coordenadas = new Posicion(x, y);

        R2D2 art = new R2D2();
        art.Casillas('A', coordenadas);

        return art;
    }
}

另外,构造函数没有声明返回类型,所以改变:

public void Casillas(...

到:

public Casillas(...

和:

public void Posicion(...

到:

public Posicion(...

还有一个错误是:

art.Casillas('A', coordenadas);

再次 - 这不是你应该调用构造函数的方式。我会建议修复此错误 - 但我不确定您要在这里做什么。

【讨论】:

  • new Posicion(x, y) 如果 OP 发布了整个 Posicion 类,则不会编译。
  • @Tom 您的评论不清楚。为什么不编译?编译错误会是什么?
  • 如果 OP 发布了整个 Posicion 类,那么它不包含任何定义的构造函数(因此,只有默认的构造函数)。
  • @Tom 我认为它是一个构造函数,而不是一个方法。
  • 由于某种原因,如果我不输入返回值,每次我尝试调用该类的构造函数时都会给我一个错误消息:找不到符号。此外,当我扩展到另一个类(通过继承)时,它说:Casillas 类中的构造函数 Casillas 不能应用于给定类型。
【解决方案2】:

您的“Casillas”和“Posicion”构造函数返回 void,当您在 Java 中编写构造函数时,您没有指定返回类型(它返回指向新构造对象的指针)。

因为你的构造函数写得不正确,编译器不“知道”它们是构造函数,并创建自己的默认构造函数,它除了分配一些内存之外什么都不做,并返回一个指向该内存的指针。所以“coordenadas”变量永远不会被初始化,并保持其默认值“null”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 2018-06-11
    • 2018-01-29
    • 2010-10-26
    相关资源
    最近更新 更多