当前位置: 首页 > 知识库问答 >
问题:

简单代码的奇怪错误[重复]

薛烨霖
2023-03-14

运行此代码时,在int length=origin.length();行获得NullPointerException

如果我在调试模式下运行,它会在同一行上停止,但在变量选项卡中,origin的值可能是原样的,即来自main方法的值。

那么为什么运行时中有NullPointerException呢?

public static void main(String[] args) {

        String regexp = "(?:a)";
        Task t = new Task(regexp); // error
        t.process();

    }


class Task {

    private String origin;

    public Task() {
    }

    public Task(String origin) {
        this.origin = origin;
    }

    public void setOrigin(String origin) {
        this.origin = origin;
    }

    public String getOrigin() {
        return origin;
    }

    int length = origin.length(); //NullPointerException
...

共有2个答案

慕健
2023-03-14

初始化length变量时不会初始化origin。将其设置为零,并初始化origin,如下所示:

private String origin = new String();

或者origin变量在通过setter设置之前将是null字符串。

我会代替

int length = origin.length(); //NullPointerException

public int get_length(){return origin.length();

因此长度属性总是与实际原点长度适当相关。

刁俊人
2023-03-14

由于Java对象的生命周期:length属性是在执行构造函数中的代码之前设置的,因此origin属性仍然为NULL。

计算构造函数中的长度,从而解决该问题:

public Task (String o) {
    this.origin=o;
    this.length=this.origin.length();
}

然后更新setter:

public void setOrigin(String origin) {
    this.origin = origin;
    this.length=origin.length;
}

或者只为长度创建一个getter而不存储该值(在我看来,最好的选择):

int getLength() {
   this.origin.length();
}
 类似资料:
  • 问题内容: 我正在使用此代码: 但是在编译时出现此错误: 然后是堆栈跟踪的编译器错误。 我将在课堂开始时同时进行这两种导入: 有什么事吗 在Netbeans中,我看到自动完成选项并且Locale对象没有语法错误… 问题答案: 您的设置有些麻烦,下面的程序对我来说很好用。 它要求源代码的事实使我相信它正在尝试以某种调试模式进行编译或运行。您不需要编译java.util。*的源代码,这很奇怪。 看看我

  • 问题内容: 所有! 我在LinkedBlockingQueue中发现了奇怪的代码: 谁能解释为什么我们需要局部变量h?它对GC有什么帮助? 问题答案: 为了更好地了解发生了什么,让我们看看执行代码后列表的样子。首先考虑一个初始列表: 然后指向和指向: 然后指向和指向: 现在,实际上我们知道只有一个指向第一个元素的活动引用,它本身就是(),并且我们还知道GC收集的对象不再具有活动引用,所以当方法结束

  • 当我为第一个实体(customer1)创建数据时,数据创建成功了,但当我要为第二个实体创建数据时,Im会出现以下错误。我们在两个不同的包中生成这两个实体,它们的表注释名不同,所以我不明白为什么我会出现这个错误。我们还为每个实体创建不同的持久性单元名称...这个错误的原因是什么? 错误在提交中 异常[EclipseLink-4002](Eclipse Persistence Services-2.3

  • 线程“main”java.lang.noClassDefounderRor: org/openqa/selenium/remote/internal/circularoutputStream在org.openqa.selenium.firefox.firefoxBinary.(firefoxBinary.firefoxBinary.firefoxBinary.firefoxBinary.firef

  • 问题内容: 我目前正在开发一个纯粹的HTML和JavaScript驱动的Web应用程序,该应用程序使用CORS来使用远程Web服务,但目前在IE 11发出GET请求时遇到了麻烦。有趣的是,我们在IE8 / 9/10中可以正常运行,而不仅仅是11。 问题是IE 11似乎超时,而不是等待服务器的响应。ajax调用很简单: 在“网络”选项卡中,使用Fiddler,我可以看到IE从不发送请求。 请问有人有

  • 我最近开始了我的第一个libGDX游戏,一切都进行得很好,所有的东西都呈现得很好,但是大约一分钟后什么都没有呈现,呈现调用仍然被发出,并且spritebatch工作得很好,我只是留下了一个黑屏,我甚至把'gl clearcolor()'改成了但我仍然留下了一个黑屏。我不知道这会是什么。 我的主要类: 编辑:我们已经确定,经过一段时间SpriteBatch渲染一个黑色屏幕的红色清晰颜色,它也停止渲染