Java构造函数中的引用

Java构造函数中的引用,java,android,Java,Android,这是我的代码的第一个版本: 公共类ListSchedule实现ListInterface{ 私有数组列表; 私有字符串cookie; 公众名单附表({ this.list=new ArrayList(); } 公共ArrayList getList(){ 退货清单; } } 在另一节课上,我打了个电话: 受保护的最终列表计划解析(字符串jsonString) 抛出自定义异常{ ListSchedule list=新建ListSchedule(); JSONArray时间表; 试一试{ //将响

这是我的代码的第一个版本:

公共类ListSchedule实现ListInterface{
私有数组列表;
私有字符串cookie;
公众名单附表({
this.list=new ArrayList();
}
公共ArrayList getList(){
退货清单;
}
}
在另一节课上,我打了个电话:

受保护的最终列表计划解析(字符串jsonString)
抛出自定义异常{
ListSchedule list=新建ListSchedule();
JSONArray时间表;
试一试{
//将响应转换为JSONObject
JSONObject json=新的JSONObject(jsonString);
试一试{
int errorCode=json.getInt(“错误”);
//检查FilBleu服务器是否没有错误
如果(错误代码>0){
抛出新的CustomException(
CustomException.ERROR\u FILBLEU,
“DataAccessObject”,“服务器错误”
+json.getInt(“子错误”);
}
试一试{
字符串cookie=json.getString(“cookie”);
列表=新列表计划(cookie);
}捕获(JSONException e){
抛出新的CustomException(CustomException.JSON_格式,
“DataAccessObject”、“无cookie值”);
}
schedulesArray=json.getJSONArray(“时间表”);
//具有以下行的NullPointerException
Log.d(“DAO”,list.getList().toString());
parseSchedulesArray(列表,schedulesArray);
}catch(JSONException e){//无法获取错误代码
抛出新的CustomException(CustomException.JSON_格式,
“DataAccessObject”,“错误的JSON格式(”
+e.getMessage()+”);
}
}catch(JSONException e){//无法转换响应
抛出新的CustomException(CustomException.JSON_格式,
“DataAccessObject”,“错误的JSON格式(”
+e.getMessage()+”);
}
退货清单;
}
然后我从
Log.d(“DAO”,list.getList().toString())行中得到了一个
NullPointerException
。所以我尝试了另一种解决方案。如您所见,唯一的区别是
列表
属性的初始化:

公共类ListSchedule实现ListInterface{
private ArrayList list=new ArrayList();
私有字符串cookie;
公众名单附表({
}
公共ArrayList getList(){
退货清单;
}
}
而且,
NullPointerException
再也没有抛出过


我真的不明白初始化
列表
属性的两种方法之间的区别。有人能给我一个提示吗?

我推测您的代码库中存在以下构造函数:

public ListSchedule(String cookie) {
        this.cookie = cookie;
    }
您需要的是以下内容:

     public ListSchedule(String cookie) {
                this.cookie = cookie;
                this.list = new ArrayList<Schedule>();
            }

注意,在第二个构造函数中没有初始化列表。您也可以从调用默认构造函数开始,但稍后会将指向该对象的指针重新分配到从ListSchedule的字符串构造函数创建的对象中。

我推测您的代码库中存在以下构造函数:

public ListSchedule(String cookie) {
        this.cookie = cookie;
    }
您需要的是以下内容:

     public ListSchedule(String cookie) {
                this.cookie = cookie;
                this.list = new ArrayList<Schedule>();
            }

注意,在第二个构造函数中没有初始化列表。您也可以从调用默认构造函数开始,但稍后会将指向对象的指针重新分配到从ListSchedule的字符串构造函数创建的对象中。

您的代码正在调用此构造函数:

list = new ListSchedule(cookie);

对我来说,它不调用初始化您的
ArrayList
的函数,这解释了
NullReferenceException

您的代码正在调用此构造函数:

list = new ListSchedule(cookie);

对我来说,它不调用初始化
ArrayList
并解释
NullReferenceException

的那一个。如果你不能理解其中的区别,你应该阅读一个基本的程序book@blackbelt:我实际上不理解NullPointerException的行为。这里有些可疑之处。我们可能没有完整的代码。你能通过将初始化再次放入构造函数来重现这个bug吗?您确定没有其他更改吗?您没有向我们显示非默认构造函数,它显然没有实例化list@Tudor更全面地查看代码,他随后将列表重新分配给try块中的这个调用
newlistschedule(cookie)
,如果您无法理解其中的差异,你应该读一本基本的程序book@blackbelt:我实际上不理解NullPointerException的行为。这里有些可疑之处。我们可能没有完整的代码。你能通过将初始化再次放入构造函数来重现这个bug吗?您确定没有其他更改吗?您没有向我们显示非默认构造函数,它显然没有实例化list@Tudor更全面地查看代码,他后来在try块中将列表重新分配给这个调用
newlistschedule(cookie)
,我刚才在复制/粘贴中犯了一个错误,现已修复;)我刚刚在复制/粘贴时出错,现已修复;)实际上,这将实例化一个ListSchedule对象,这正是构造函数所做的。@Woot4Moo不,我的意思是
ArrayList
而不是
ListSchedule
。很抱歉造成混淆,实际上这会实例化一个ListSchedule对象,而构造函数就是这样做的。@Woot4Moo不,我的意思是
ArrayList
而不是
ListSchedule
。很抱歉给你带来了混乱