基本上我创建了一个简单的类,以便将某些日期作为应用程序的一部分。因为我不是所有关于Java的人,我发现了一些与日期有关的代码,主要是日历类。所以我从示例代码中获取了一些部分并提出了以下类。
package com.example.myApp;
import java.util.Calendar;
import android.util.Log;
public class Date {
public int day;
public int month;
public int year;
public String formattedDate;
public Calendar calendar;
public Date(){
//Set to today by default.
// Create a Calendar object
Calendar calendar = Calendar.getInstance();
// Get current day from calendar
day = calendar.get(Calendar.DATE);
// Get current month from calendar
month = calendar.get(Calendar.MONTH);
// Get current year from calendar
year = calendar.get(Calendar.YEAR);
}
public String getDate(){
formattedDate = day+"/"+month+"/"+year;
return formattedDate;
}
public void incDate(){
calendar.add(Calendar.DATE, +1);
}
}
当我在主活动中运行incDate()方法时,程序崩溃了。因为这个类是相当基本的,并且唯一不同的是它与另一个我工作得很好的类相比是声明一个日历实例而不是正常实例化,让我觉得这就是问题。
如果有人能解释为什么有问题的方法导致应用程序崩溃,我会非常感激。
PS。我打算在这个课程的基础上进一步增加方法,但由于上述原因,目前显然这是一个毫无意义的冒险。
答案 0 :(得分:3)
更改
Calendar calendar = Calendar.getInstance();
到
calendar = Calendar.getInstance();
你在构造函数中是变量阴影,这就是全部。
变量阴影时,在另一个范围内使用相同的变量名称。在这种情况下,您只实例化构造函数的calendar
本地,因此作为范围calendar
的类实例保持null
。我还建议不要命名你的类Date
,因为那已经是Java提供的类了 - 你引入了歧义。
答案 1 :(得分:1)
更改此行:
Calendar calendar = Calendar.getInstance();
要:
calendar = Calendar.getInstance();
因为您正在初始化一个shadows
实例变量的新变量,所以当您调用incDate()
时,实例变量calendar
仍为null