首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Java会在这里抛出NullPointerException?

为什么Java会在这里抛出NullPointerException?
EN

Stack Overflow用户
提问于 2015-06-01 07:21:18
回答 5查看 580关注 0票数 1
代码语言:javascript
运行
复制
public class Test {

    public int [] x;

    public Test(int N)
    {
       int[] x = new int [N];
       for (int i=0;i<x.length;i++)
       {
           x[i]=i;
           StdOut.println(x[i]);
       }
    }


    public static void main(String[] args) { 

        String path = "/Users/alekscooper/Desktop/test.txt";
        In reader = new In(path);
        int size=reader.readInt();
        StdOut.println("Size = "+size);

        Test N = new Test(size);
        StdOut.println(N.x[3]);

    }

    /* ADD YOUR CODE HERE */

}

大家好。我正在通过阅读Robert关于算法的书来学习Java,例如,我正在使用他的库,比如StdOut。但问题是关于Java的。我不明白为什么这里的Java会抛出一个NullPointerException。总的来说,我知道这意味着什么,但我不知道为什么会出现在这里,因为我认为我在做的是:

  1. 从文件中读取整数--类Test中数组的大小。在我的测试示例size=10中,不会出现超出约束的类型。
  2. 打印出来。
  3. 创建类型测试的对象N。在这个对象中,我想我创建了一个大小数组,我刚刚从文件中读取了这个数组。为了好玩,我初始化它从0到大小-1,并打印它。到目前一切尚好。
  4. 这里是一切开始的地方。因为我的类是公共的,而且我已经运行了构造函数,所以我想我有一个对象N,它作为一个属性,具有带有size元素的数组x。然而,,例如,当我试图处理x时, StdOut.println(N.x3); Java抛出NullPointerException。

为什么会这样呢?请帮忙,非常感谢您的时间。

EN

回答 5

Stack Overflow用户

发布于 2015-06-01 07:30:33

您所做的被称为跟踪--您用局部变量x跟踪了字段x。所以你要做的就是避免这样做:

int[] x = new int [N];是错误的,如果您希望您的字段初始化而不是局部变量,那么您可以执行如下操作:x = new int [N];获取更多信息,请阅读this

票数 9
EN

Stack Overflow用户

发布于 2015-06-01 07:28:09

将构造函数的第一行更改为

代码语言:javascript
运行
复制
int[] x = new int [N];

代码语言:javascript
运行
复制
x = new int [N];

应该管用的..。

实际上,在构造函数中,当您说int[] x时,它正在创建多一个局部变量,而不是将数据设置为公共变量x.如果从构造函数的第一行中删除int[],那么它将初始化公共变量&您将能够在main()方法中打印它们

票数 4
EN

Stack Overflow用户

发布于 2015-06-01 07:25:32

public Test(int n)**:**内部的

变化

代码语言:javascript
运行
复制
int[] x = new int [N]; // Creating a local int array x

代码语言:javascript
运行
复制
x = new int [N]; // Assigning it to x
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30567802

复制
相关文章

相似问题

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