首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理"java.lang.NullPointerException“

处理"java.lang.NullPointerException“
EN

Stack Overflow用户
提问于 2013-03-03 05:55:26
回答 3查看 258关注 0票数 1

所以我是第一次学习Java。下面的代码在另一个类中调用square.toString()时抛出一个NullPointer异常(其中square是这个类中定义的对象的一个实例),我不太清楚为什么它不能工作。有人能给我解释一下吗?

代码语言:javascript
复制
public class SquareBuilder {

String box;
String[] parts;
final private String beam = "----";
final private String collumn = "|";
private int size;

public SquareBuilder(int firstSize)
{
    size = firstSize;

}

public static String repeatString(String s, int n) 
{   
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < n; i++) 
    {
        sb.append(s);
    }

    return sb.toString();
}

public void changeSize(int newSize)
{
    size = newSize;

}

public String toString( )
{
        parts[0] = repeatString(beam,size) + "\n";
        parts[1] = collumn + repeatString(" ",4*size-2) + collumn + "\n";
        box = parts[0] + repeatString(parts[1],size-2) + parts[0];
    return box;

}
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-03 06:07:35

当您试图在空对象上使用方法时,就会出现NullPointerException。在构造函数中,应使用以下表达式初始化parts数组

parts = new String[whateverSizeYouWant];

我不清楚你对这个数组做了什么。

票数 0
EN

Stack Overflow用户

发布于 2013-03-03 05:58:05

不清楚为什么你要声明一个名为parts的实例变量,然后在toString()中取消引用(parts[0] = ...) --但是你从来没有初始化它,所以值是null……因此出现了例外。

为什么你的实现不只是:

代码语言:javascript
复制
public String toString( )
{
    String ends = repeatString(beam,size) + "\n";
    String middle = collumn + repeatString(" ",4*size-2) + collumn + "\n";
    return ends + middle + ends;
}

toString()中修改对象是很不寻常的。

票数 3
EN

Stack Overflow用户

发布于 2013-03-03 05:58:14

你的问题结构不正确,但是我猜你在toString()方法中得到了一个NPE。原因是您从未在代码中真正初始化数组String[] parts;

您必须先对其进行初始化:

代码语言:javascript
复制
public SquareBuilder(int firstSize)
{
    size = firstSize;
    this.parts = new int[give the size here];

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

https://stackoverflow.com/questions/15179886

复制
相关文章

相似问题

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