Java 局部变量未在TimerTask内使用
我每开始一个小时运行一次代码,但是下面这行代码没有执行Java 局部变量未在TimerTask内使用,java,timertask,Java,Timertask,我每开始一个小时运行一次代码,但是下面这行代码没有执行 int lastcyclehour=hour; 我无法解释这是为什么。我得到的错误是“局部变量lastcyclehour的值为” “未使用”代码: 您正在声明两个同名的变量。排队 int lastcyclehour=0; int lastcyclehour=hour; 您可以声明一个永远不会更改的main方法的局部变量。请注意,当您希望从内部类访问它时,甚至禁止更改它 我同意你的说法 if(!(hour==lastcyclehour)
int lastcyclehour=hour;
我无法解释这是为什么。我得到的错误是“局部变量lastcyclehour的值为”
“未使用”代码:
您正在声明两个同名的变量。排队
int lastcyclehour=0;
int lastcyclehour=hour;
您可以声明一个永远不会更改的main
方法的局部变量。请注意,当您希望从内部类访问它时,甚至禁止更改它
我同意你的说法
if(!(hour==lastcyclehour)) {
将该常数与小时
进行比较
排队
int lastcyclehour=0;
int lastcyclehour=hour;
在内部类的run
方法中声明了另一个名为lastcyclehour
的变量,该变量从未使用过,因此没有任何效果。若要为现有变量赋值,您不能声明它,即不指定类型,只需编写lastcyclehour=hour代码>。但是如上所述,您不能从内部类修改周围方法的局部变量。要创建一个可变变量,在run()
方法的不同调用之间记住其值,必须将其声明为内部类的实例内变量:
public static void main(String[] args) {
//TIMER, runs the code immediately once in the beginning of each hour
Timer timer = new Timer();
TimerTask tt = new TimerTask() {
int lastcyclehour = 0;
public void run() {
Calendar cal = Calendar.getInstance(); //read Calendar
int hour = cal.get(Calendar.HOUR_OF_DAY);//get the hour
if(hour!=lastcyclehour) {
//code
System.out.println(hour);
System.out.println(lastcyclehour);
//code
lastcyclehour=hour;
}
}
};
timer.schedule(tt, 1000, 1000*2);//
}
进一步注意,赋值lastcyclehour=hour
必须位于if
语句的条件代码内,以确保将当前小时与执行操作的最后一小时进行比较
此外,条件!(a==b)
可以简化为a!=b
您正在声明两个同名变量。排队
int lastcyclehour=0;
int lastcyclehour=hour;
您可以声明一个永远不会更改的main
方法的局部变量。请注意,当您希望从内部类访问它时,甚至禁止更改它
我同意你的说法
if(!(hour==lastcyclehour)) {
将该常数与小时
进行比较
排队
int lastcyclehour=0;
int lastcyclehour=hour;
在内部类的run
方法中声明了另一个名为lastcyclehour
的变量,该变量从未使用过,因此没有任何效果。若要为现有变量赋值,您不能声明它,即不指定类型,只需编写lastcyclehour=hour代码>。但是如上所述,您不能从内部类修改周围方法的局部变量。要创建一个可变变量,在run()
方法的不同调用之间记住其值,必须将其声明为内部类的实例内变量:
public static void main(String[] args) {
//TIMER, runs the code immediately once in the beginning of each hour
Timer timer = new Timer();
TimerTask tt = new TimerTask() {
int lastcyclehour = 0;
public void run() {
Calendar cal = Calendar.getInstance(); //read Calendar
int hour = cal.get(Calendar.HOUR_OF_DAY);//get the hour
if(hour!=lastcyclehour) {
//code
System.out.println(hour);
System.out.println(lastcyclehour);
//code
lastcyclehour=hour;
}
}
};
timer.schedule(tt, 1000, 1000*2);//
}
进一步注意,赋值lastcyclehour=hour
必须位于if
语句的条件代码内,以确保将当前小时与执行操作的最后一小时进行比较
此外,条件!(a==b)
可以简化为a!=b
在您的跑步方法中,尝试更改int lastcyclehour=hour;到lastcyclehour=小时;也就是说去掉“int”,你怎么知道int lastcyclehour=hour;这不是执行吗?您没有打印或使用它;到lastcyclehour=小时;也就是说去掉“int”,你怎么知道int lastcyclehour=hour;这不是执行吗?您没有打印或使用它。谢谢您的帮助。由于主要熟悉Matlab和VBA,不可变变量的概念对我来说相当陌生。您提供的这个答案仍然给了我“在封闭范围内定义的局部变量lastcyclehour必须是final或有效final”,而final int不是我想要的。我在答案中提供的代码不能让您得到这个错误。如果您遇到该错误,您的代码将不同。感谢您提供的有用答案。由于主要熟悉Matlab和VBA,不可变变量的概念对我来说相当陌生。您提供的这个答案仍然给了我“在封闭范围内定义的局部变量lastcyclehour必须是final或有效final”,而final int不是我想要的。我在答案中提供的代码不能让您得到这个错误。如果你得到了那个错误,你的代码是不同的。