【问题标题】:I need some help understanding instances/references我需要一些帮助来理解实例/参考
【发布时间】:2014-07-21 03:07:30
【问题描述】:

只是想知道我想教自己的是否正确。

我会在我的一个程序中得到这样的结果:

public class Test {
    int array[];

    public static void main(String[] args){
        Test test = new Test();
        test.array = new int[10];
        test.fillArray();

        for(int i=0;i<test.array.length;i++)
            System.out.println(test.array[i]);
    }

    public void fillArray(){
        Test test = new Test();
        for(int i=0;i<test.array.length;i++)
            test.array[i]=i;
    }
}

但是我得到一个空指针异常。我似乎经常遇到这类问题。正确规划我的程序会对此有所帮助吗?

空指针是因为当我说 new 时,它会创建一个单独的对象,该对象只存在于该方法中,对吗?

除了使数组静态或给它一个参数(或者它是参数..?)之外,还有其他方法可以解决这个问题吗?就像我在下面所做的那样?

public class Test {
    int array[];

    public static void main(String[] args){
        Test test = new Test();
        test.array = new int[10];
        test.fillArray(test.array);

        for(int i=0;i<test.array.length;i++)
            System.out.println(test.array[i]);
    }

    public void fillArray(int a[]){
        for(int i=0;i<a.length;i++)
            a[i]=i;
    }
}

【问题讨论】:

  • 您不需要对参数进行操作来填充测试实例的数组。您可以在 fillArray 方法中简单地引用类的字段数组。我假设您的目标是在 main. 创建的测试实例中填充数组字段
  • 是的,我正在尝试填充我在 main() 中创建的测试实例的数组字段。我将如何去引用类的字段数组而不是静态的
  • 见 Elliots 的回答。不要参数化你的fillArray方法,直接引用类的字段'array'。
  • 你应该在构造函数中初始化你的类成员。

标签: java class variables reference instance


【解决方案1】:

您的第一个 fillArray 存在阴影问题,因为您正在创建一个新的测试实例并对其进行初始化 - 而是在当前(或 this)实例中初始化字段 array

public void fillArray() {
  // Test test = new Test();
  for (int i = 0; i < this.array.length; i++) {
    this.array[i] = i; // <-- this.array or just array[i]
  }
}

【讨论】:

  • 我相信你的意思是this.array[i] = i
  • 谢谢,为什么您可以在方法中引用类字段,但对于 main(),它必须是静态的或具有类的实例?还是应该将其作为新问题发布? (我今天只是充满了问题......)
  • @Orion 因为main 是静态的。这意味着它在没有类的特定实例(或任何实例)的情况下运行。
猜你喜欢
  • 2022-09-24
  • 2012-02-17
  • 2020-08-06
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 2013-06-10
  • 2012-02-02
相关资源
最近更新 更多