2012-08-12 68 views
2

如何在我的应用程序中公开使用下面的两个变量(星期一,星期三,星期三等)?比如说,如果我在最后一个大括号之后去,mon变量就不能被接受。有任何想法吗?我如何让这些双打公开?

finalize.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent ae){ 

       double mon = Double.parseDouble(monday.getText()); 
       double tues = Double.parseDouble(tuesday.getText()); 
       double wed = Double.parseDouble(wednesday.getText()); 
       double thurs = Double.parseDouble(thursday.getText()); 
       double fri = Double.parseDouble(friday.getText()); 
       double sat = Double.parseDouble(saturday.getText()); 
       double sun = Double.parseDouble(sunday.getText()); 

       double sum = mon + tues + wed + thurs + fri + sat + sun; 



      } 
    }); 

回答

2

你必须在课堂级别声明他们作为字段。

内部类可以访问封闭方法的最终局部变量,但在您更改值时,这不适用于您的情况。

class MyClass { 

    double mon = 0.; // <- declare it as a field 

    void myMethod() { 
     finalize.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent ae){ 
       mon = Double.parseDouble(monday.getText()); // <- accessible 
      } 
     }); 
     System.out.println(mon); // <- accessible 
    } 
} 
+0

非常感谢你为这样一个很好的例子和描述! – 2012-08-12 14:34:41

3

一种方法是创建类的成员变量,像这样:

private double mon = 0.0; 
private double tues = 0.0; 
// etc. 

,如果你想从外部访问它们创建公共getter方法:

public double getMon() { 
    return mon; 
} 

getSum可以单一方法表示:

public double getSum() { 
    return mon + tues + wed + thurs + fri + sat + sun; 
} 

不要忘记删除本地声明在actionPerformed方法则:

mon = Double.parseDouble(monday.getText()); 
+0

从技术上讲,您正在创建类成员而不是全局变量。此外,这种方法允许你不定义一个字段的总和,并简单地把它作为一个方法调用'public double getSum(){return sun + mon + ...; }' – 2012-08-12 14:21:09

+0

好评,更新 – Reimeus 2012-08-12 14:35:38

2

定义他们一流水平。例如,如果你的类被命名为MyClass这样做以下:

class MyClass { 
    public mon; 
    //...... 
    public void actionPerformed(ActionEvent ae) { 
    mon = Double.parseDouble(monday.getText()); 
    //...... 
    } 
} 

,但从来没有定义公共变量。使用豆符号来代替:

class MyClass { 
    private mon; 
    //...... 
    public void actionPerformed(ActionEvent ae) { 
    mon = Double.parseDouble(monday.getText()); 
    //...... 
    } 

    public double getMon() { 
     return mon; 
    } 
} 
1

您可以尝试在侦听器外部创建变量,并且只能在侦听器中对其进行修改。