1

基本上,我创建了一个简单的类,以便将某些日期作为应用程序的一部分。由于我对 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。我确实打算以此类为基础并添加更多方法,但由于上述原因,目前显然这是一个毫无意义的冒险。

4

2 回答 2

3

改变

Calendar calendar = Calendar.getInstance();        

calendar = Calendar.getInstance();        

您是构造函数中的变量阴影,仅此而已。

当你改变影子时,你在另一个作用域上使用同名的变量。在这种情况下,您只需将一个calendar局部实例化为构造函数,因此作用域内的类实例calendar保持为null. 我还建议不要命名您的类Date,因为它已经是 Java 提供的类 - 您正在引入歧义。

于 2013-02-15T23:45:04.450 回答
1

更改此行:

Calendar calendar = Calendar.getInstance();   

至:

calendar = Calendar.getInstance();   

因为你正在初始化一个新的变量即shadows实例变量,所以当你调用incDate()实例变量calendar的时候还是null

于 2013-02-15T23:45:12.967 回答