我正在尝试访问函数内部的变量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未被声明。
答案 0 :(得分:1)
在Java(和大多数其他语言)中有所谓的“范围”,我们在这里限制为“块”。
块基本上是{
和}
中包含的单个表达式的集合。
看看这个伪示例:
{ // outer block
int a = 1;
{ // inner block
int b = 1;
}
}
在内部区块中,您可以同时访问a
和b
,而在外部区块中,您无法看到 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
将无法在方法范围之外访问。