当我尝试在方法内或大括号中声明变量(如int),然后我想在大括号之外更改变量的值时,它似乎不起作用。我做错了什么?我如何让它工作?我对Java相对较新,很抱歉,如果这看起来像一个非常基本的问题。
Timer t = new Timer();
t.schedule(new TimerTask(){
public void run(){
double od = 0.5;
}
},30000);}
我想稍后在大括号外更改od的值。我该怎么做?
答案 0 :(得分:3)
代码中的变量od
是一个局部变量。就其本质而言,它不能从课外改变。
有几种方法可以达到你想要的效果。一个是使用命名类替换您定义的匿名类(即大括号内的匿名类),并替换od
变量的setter:
class MyTimerTask extends TimerTask {
private double od = 0.5;
public void run(){
System.out.println(od);
}
public double getOd() {return od;}
public void setOd(double val) {od = val;}
}
...
MyTimerTask task = new MyTimerTask();
t.schedule(task, 30000);
...
// At this point you can change od
task.setOd(2.3);
答案 1 :(得分:1)
变量仅在声明的范围内可用。在您的情况下,范围在run()
方法内。如果你想在外面使用它 - 它应该在外面声明。
public static void main(String[] args) {
final MyObj obj = new MyObj();
Timer t = new Timer();
t.schedule(new TimerTask(){
public void run(){
obj.set(0.5);
}
},500);
System.out.println(obj.get());
}
private static class MyObj {
private double od;
public void set(double val) {
od = val;
}
public double get() {
return od;
}
}
<强>注:强>
一个好的经验法则是在较小(最具体)范围内声明变量,以帮助GC处理未使用的对象。