可变内部功能

时间:2013-03-11 17:55:54

标签: java

我正在尝试访问函数内部的变量X,但我似乎无法访问它。 我有一个功能“动作()”

public void Action(){

  ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();

  try {
    String response = null;
    try {
      response = CustomHttpClient.executeHttpPost("http://www.xxxx.com/xxxx.php",
                                                  postParameters);
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    String result = response.toString();  

    //parse json data
    try {
      returnString = "";
      JSONArray jArray = new JSONArray(result);
      for (int i=0; i<jArray.length(); i++) {

        JSONObject json_data = jArray.getJSONObject(i);
        Log.i("log_tag","id: "+json_data.getInt("id")+
              ", name: "+json_data.getString("name")+
              ", sex: "+json_data.getInt("sex")+
              ", birthyear: "+json_data.getInt("birthyear"));
        X = json_data.getInt("birthyear");
        returnString += "\n" + json_data.getString("Time") + " -> "+ json_data.getInt("Value");
      }
    } catch(JSONException e){
      Log.e("log_tag", "Error parsing data "+e.toString());
    } catch(Exception e){
      Log.e("log_tag","Error in Display!" + e.toString());;          
    }   
  }
}

我希望能够访问方法之外的变量“X”,但它一直告诉我X未被声明。

3 个答案:

答案 0 :(得分:1)

在Java(和大多数其他语言)中有所谓的“范围”,我们在这里限制为“块”。 块基本上是{}中包含的单个表达式的集合。

看看这个伪示例:

{ // outer block
    int a = 1;
    { // inner block
        int b = 1;
    }
}

在内部区块中,您可以同时访问ab,而在外部区块中,您无法看到 b,这就是您无法访问的原因也不要改变它(所以你只看到外部区块中的a

答案 1 :(得分:0)

  

根据要求在方法内声明X实例变量或局部变量。

如果要从任何实例方法访问此变量,则声明它为实例变量,或者如果要将范围设置为local,则在方法中声明它。

public class MainActivity extends Activity {
   ....
   private int X;   //Way to declare the instance variable.
  ....

  private void methodName() {
  {
        private int X;   //Way to declare the local variable.
  }
}

在Java中,您需要在使用之前声明变量。您正在初始化它而不声明它。

答案 2 :(得分:0)

void method(){

   int foo; //this is called variable declaration

   //some where else in code
   foo = 12; //this is called initialization of the variable

   int fooBar = foo + bar;

}

上面的例子显示了METHOD LEVEL SCOPE。变量foo将无法在方法范围之外访问。

  • 班级范围
  • 循环范围
  • 方法范围

Vairable scopes in Java