有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java对象为null,但未引发异常

我试着调试代码的一些功能

类似于这样

public class Testing {
private JSONArray array;

public void initObjects() {
    this.array = new JSONArray()
}

public JSONArray getArray() {
 return this.array;
}

然后我打电话来

Testing test = new Testing();
System.out.println(test.getArray().toString());

我否认了对象为null的事实,因为我认为如果对null对象调用方法,它会抛出错误。所发生的一切就是什么都没有被打印出来,仅此而已。结果证明该对象为空

为什么会这样


共 (3) 个答案

  1. # 1 楼答案

    正如您在评论中提到的,一个对象是json数组。因此,如果jsonarray的toString方法为空但已初始化,那么它可能会返回空白

    这就是javadoc中读取的内容

    toString()

    公共java。lang.String toString()

    Make a JSON text of this JSONArray. 
    

    所以,您需要检查初始化的位置,如果您使用的是eclipse,您可以将光标放在对象上,然后按ctrl+shift+g

  2. # 2 楼答案

    getObject()返回的object似乎是一个全局变量,它是以某种方式初始化的。所以object实际上不是null

    这就是为什么下面这行没有NullPointerException

    System.out.println(getobject().toString());
    

    试试这个,你肯定会得到NullPointerExceptiongetobject().toString()

    public Object getObject() {
     return null;
    }
    

    更新:随着问题的更新,我编译了以下代码:

    import org.json.JSONArray;
    
    public class Testing {
        private JSONArray array;
    
        public void initObjects() {
            this.array = new JSONArray();
        }
    
        public JSONArray getArray() {
         return this.array;
        }
    
        public static void main(String args[]) {
            Testing test = new Testing();
            System.out.println(test.getArray().toString());
        }
    }
    

    并获得以下异常:

    Exception in thread "main" java.lang.NullPointerException
    at Testing.main(Testing.java:16)
    

    我从here下载了java-json.jar

  3. # 3 楼答案

    编辑问题后,有一个可能的解释:

    JSONObject.NULL该常数与null不同,必须使用equals比较getObject()JSONObject.NULL的返回值