改变静态变量的值

Change the value of static variable

我想设置 monthBtn 的变量,通过调用一个函数它会改变月份的变量。

private static String monthBtn;

    public static String getCurrentMonth() {
        int month = Calendar.getInstance().get(Calendar.MONTH);
        String monthBtn= "//*[@text='"+month+"']";
        System.out.println(yearBtn);
        return monthBtn;
    }
    public static void main(String[] args) {
        getCurrentMonth();
        System.out.println("Xpath Year ="+monthBtn);
    }

当我运行这个代码变量的值monthBtn return空值,但我期望的条件是//*[@text='07']

像下面这样更新您的代码。您正在创建同名的局部变量,而不是为静态变量赋值。此外,如果您期望它 Calender.MONTH 会提供电流,则情况并非如此。由于月份从 0 开始。所以如果当前月份是 7 月,您将得到 6 而不是 7

private static String monthBtn;

public static String getCurrentMonth() {
    int month = Calendar.getInstance().get(Calendar.MONTH);
    monthBtn= "//*[@text='"+month+"']";
    return monthBtn;
}
public static void main(String[] args) {
    getCurrentMonth();
    System.out.println("Xpath Year ="+monthBtn);
}
private static String monthBtn;

public static String getCurrentMonth() {
    int month = Calendar.getInstance().get(Calendar.MONTH);
    monthBtn= "//*[@text='"+month+"']"; //you should assign value to the class member, in your code you were declaring local variable.
    System.out.println(yearBtn);
    return monthBtn;
}
public static void main(String[] args) {
    String str = getCurrentMonth(); //you should store the value returned in some variable
    System.out.println("Xpath Year ="+str); //here you were referring to the class member `monthBtn` variable, which is null, and now you take the local str value.
}

我希望您现在明白为什么会得到 null。您有局部变量,getCurrentMonth() 的 return 值未存储在任何地方。

我发现你的代码有 3 个问题。

  1. Calendar.get(MONTH)returns的“月份”不是数字月份,而是Calendarclass中定义的常量之一。例如,对于 7 月,它 returns 6。理想情况下,您应该迁移到使用 java.time 中定义的现代 classes,例如 LocalDate,它们不会以令人惊讶的方式运行。
  2. 正在格式化。 int 没有前导零。但是您可以使用 String.format 对其进行零填充。
  3. 可见性可变。您正在声明一个本地 monthBtn 变量,它隐藏了同名的静态变量。

您可以通过将方法中的代码更改为以下内容来解决这些问题:

    int month = LocalDate.now().getMonthValue();
    monthBtn = String.format("//*[@text='%02d']", month);