改变静态变量的值
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 个问题。
- Calendar.get(MONTH)returns的“月份”不是数字月份,而是Calendarclass中定义的常量之一。例如,对于 7 月,它 returns
6
。理想情况下,您应该迁移到使用 java.time
中定义的现代 classes,例如 LocalDate,它们不会以令人惊讶的方式运行。
- 正在格式化。
int
没有前导零。但是您可以使用 String.format
对其进行零填充。
- 可见性可变。您正在声明一个本地
monthBtn
变量,它隐藏了同名的静态变量。
您可以通过将方法中的代码更改为以下内容来解决这些问题:
int month = LocalDate.now().getMonthValue();
monthBtn = String.format("//*[@text='%02d']", month);
我想设置 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 个问题。
- Calendar.get(MONTH)returns的“月份”不是数字月份,而是Calendarclass中定义的常量之一。例如,对于 7 月,它 returns
6
。理想情况下,您应该迁移到使用java.time
中定义的现代 classes,例如 LocalDate,它们不会以令人惊讶的方式运行。 - 正在格式化。
int
没有前导零。但是您可以使用String.format
对其进行零填充。 - 可见性可变。您正在声明一个本地
monthBtn
变量,它隐藏了同名的静态变量。
您可以通过将方法中的代码更改为以下内容来解决这些问题:
int month = LocalDate.now().getMonthValue();
monthBtn = String.format("//*[@text='%02d']", month);