Java 变量可见性
Java variable visibitlity
我有以下代码:
public class Java0102
{
public static void main(String[] args)
{
int x = 2;
int y = 10;
if (x == 2)
{
x = 5;
int w = y * x;
}
System.out.println("W="+w);
int W = x*y*w;
y = x;
System.out.println("New W="+w);
System.out.println("X="+x);
System.out.println("Y="+y);
}
}
当我尝试在 bluej 上编译它时,它说找不到符号 - 变量 w
但是由于 if 语句运行是因为 x == 2 不应该 java 假定变量 w 已初始化并且存在?
变量w
在if
块代码内声明,这意味着它只能在该范围内访问:if
语句的块代码。在该块之后,变量 w
不再存在,因此编译器错误有效。
要解决这个问题,只需在if
语句之前声明并初始化变量即可。
int w = 1;
if (x == 2) {
x = 5;
w = y * x;
}
来自您对问题的评论:
I tought that the scope changes if a method is called and inside the method a declared variable is local so not visible outside. Is it the same thing with if statements? it changes scope?
您混淆了 class 变量的概念,即字段和局部方法变量(通常称为变量)。当您创建 class 的实例时,class 中的字段将被初始化,而方法中的变量具有特定范围,具体范围取决于它们声明的块代码。
这意味着,您可以编译此代码并且运行(并不意味着您必须像这样编写代码):
public class SomeClass {
int x; //field
public void someMethod(int a, int b) {
int x = a + b;
//this refers to the variable in the method
System.out.println(x);
//this refers to the variable in the class i.e. the field
//recognizable by the usage of this keyword
System.out.println(this.x);
}
}
您的 w
变量需要在 if 语句之外声明。否则它就出Scope。
public class Java0102
{
public static void main(String[] args)
{
int x = 2;
int y = 10;
int w = 1; //declare and initialize your lowercase-w variable
if (x == 2)
{
x = 5;
w = y * x; //perform your arithmetic
}
System.out.println("W="+w);
int W = x*y*w;
y = x;
System.out.println("New W="+w);
System.out.println("X="+x);
System.out.println("Y="+y);
}
}
你的w只在这个区块可见:
{
x = 5;
int w = y * x;
}
因此,在它之外,您无法访问它。
如果你想 ,
您可以在 {} 块外定义 w。
比如
int w = 0;
{
x = 5;
w = y * x;
}
我有以下代码:
public class Java0102
{
public static void main(String[] args)
{
int x = 2;
int y = 10;
if (x == 2)
{
x = 5;
int w = y * x;
}
System.out.println("W="+w);
int W = x*y*w;
y = x;
System.out.println("New W="+w);
System.out.println("X="+x);
System.out.println("Y="+y);
}
}
当我尝试在 bluej 上编译它时,它说找不到符号 - 变量 w 但是由于 if 语句运行是因为 x == 2 不应该 java 假定变量 w 已初始化并且存在?
变量w
在if
块代码内声明,这意味着它只能在该范围内访问:if
语句的块代码。在该块之后,变量 w
不再存在,因此编译器错误有效。
要解决这个问题,只需在if
语句之前声明并初始化变量即可。
int w = 1;
if (x == 2) {
x = 5;
w = y * x;
}
来自您对问题的评论:
I tought that the scope changes if a method is called and inside the method a declared variable is local so not visible outside. Is it the same thing with if statements? it changes scope?
您混淆了 class 变量的概念,即字段和局部方法变量(通常称为变量)。当您创建 class 的实例时,class 中的字段将被初始化,而方法中的变量具有特定范围,具体范围取决于它们声明的块代码。
这意味着,您可以编译此代码并且运行(并不意味着您必须像这样编写代码):
public class SomeClass {
int x; //field
public void someMethod(int a, int b) {
int x = a + b;
//this refers to the variable in the method
System.out.println(x);
//this refers to the variable in the class i.e. the field
//recognizable by the usage of this keyword
System.out.println(this.x);
}
}
您的 w
变量需要在 if 语句之外声明。否则它就出Scope。
public class Java0102
{
public static void main(String[] args)
{
int x = 2;
int y = 10;
int w = 1; //declare and initialize your lowercase-w variable
if (x == 2)
{
x = 5;
w = y * x; //perform your arithmetic
}
System.out.println("W="+w);
int W = x*y*w;
y = x;
System.out.println("New W="+w);
System.out.println("X="+x);
System.out.println("Y="+y);
}
}
你的w只在这个区块可见:
{ x = 5; int w = y * x; }
因此,在它之外,您无法访问它。 如果你想 , 您可以在 {} 块外定义 w。
比如
int w = 0;
{
x = 5;
w = y * x;
}