首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当对象是属性时,为什么不能使用构造函数呢?

当对象是属性时,为什么不能使用构造函数呢?
EN

Stack Overflow用户
提问于 2015-10-01 02:01:22
回答 2查看 61关注 0票数 1

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

这是对象的类:

代码语言:javascript
复制
    public class Posicion
{
    private int filas;
    private int columnas;

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

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

代码语言:javascript
复制
public class Casillas
{
    protected char simbolo;
    protected Posicion coordenadas;

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

这里我得到了Null指针异常( "inicio“方法的第一行):

代码语言:javascript
复制
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语言。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-01 02:23:01

您正在调用coordenadas.Posicion(x, y);,但是coordenadas从未初始化过,而且,Posicion()是一个构造函数 -为了调用它,您应该使用new关键字:

代码语言:javascript
复制
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;
    }
}

此外,构造函数不声明返回类型,因此更改:

代码语言:javascript
复制
public void Casillas(...

至:

代码语言:javascript
复制
public Casillas(...

以及:

代码语言:javascript
复制
public void Posicion(...

至:

代码语言:javascript
复制
public Posicion(...

另一个错误是:

代码语言:javascript
复制
art.Casillas('A', coordenadas);

同样--这不是你应该如何调用构造函数的方式。我建议纠正这个错误--但我不知道你在这里想做什么。

票数 6
EN

Stack Overflow用户

发布于 2015-10-01 02:28:20

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

因为您的构造函数没有正确编写,编译器不知道它们是构造函数,并创建了自己的默认构造函数,它只分配一些内存,并返回指向该内存的指针。因此,"coordenadas“变量从未初始化,并保留其默认值"null”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32878333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档