Java 如何检测某物是形式参数还是实例数据?
How does Java detect if something is a formal parameter or instance data?
我正在尝试弄清楚 Java 如何决定(如果这听起来像是我在拟人化 Java,请原谅)哪些变量被视为实例数据,哪些变量被视为正式数据参数。我知道采用适当的编码技术可以避免这种混淆,但我只是对其背后的逻辑感到好奇。在以下示例中:
public Foo{
int a, b, c;
//this assigns the formal parameters' values to the instance data's values
public Foo(int x, int y, int c){
a = x; //makes sense
this.b = y; //makes sense
c = c; //how?
}
//how can you tell which value is being dealt with
public int getBar(int a, int b, int c){
if(b < (b - b))
a += 5;
else
a += a;
b = b;
b += c;
return b;
}
}
构造函数,Foo()
,形参都被复制到实例数据中。这对于前两个作业来说很明显,但是第三个作业是我开始有一些问题的地方。 Java 如何知道要使用哪个 "c"?存储实例数据的那个还是表示形参的那个?在第二个函数中(对不起,如果这个例子太极端了),你 know/how 将如何 Java 决定哪些变量代表实例数据,哪些变量代表形式参数。
基本上参数和局部变量只是优先于字段。这叫做shadowing of the variable or name。所以 c=c
在你的代码中什么都不做;它将 c
的值分配给自己。
this 关键字告诉 Java 你想引用一个实例变量。大多数时候,这是可选的。问题是有时会有两个同名的变量。在构造函数中,一个是参数,一个是实例变量。不说的话,Java给你的是范围最细的一个,也就是参数。
我正在尝试弄清楚 Java 如何决定(如果这听起来像是我在拟人化 Java,请原谅)哪些变量被视为实例数据,哪些变量被视为正式数据参数。我知道采用适当的编码技术可以避免这种混淆,但我只是对其背后的逻辑感到好奇。在以下示例中:
public Foo{
int a, b, c;
//this assigns the formal parameters' values to the instance data's values
public Foo(int x, int y, int c){
a = x; //makes sense
this.b = y; //makes sense
c = c; //how?
}
//how can you tell which value is being dealt with
public int getBar(int a, int b, int c){
if(b < (b - b))
a += 5;
else
a += a;
b = b;
b += c;
return b;
}
}
构造函数,Foo()
,形参都被复制到实例数据中。这对于前两个作业来说很明显,但是第三个作业是我开始有一些问题的地方。 Java 如何知道要使用哪个 "c"?存储实例数据的那个还是表示形参的那个?在第二个函数中(对不起,如果这个例子太极端了),你 know/how 将如何 Java 决定哪些变量代表实例数据,哪些变量代表形式参数。
基本上参数和局部变量只是优先于字段。这叫做shadowing of the variable or name。所以 c=c
在你的代码中什么都不做;它将 c
的值分配给自己。
this 关键字告诉 Java 你想引用一个实例变量。大多数时候,这是可选的。问题是有时会有两个同名的变量。在构造函数中,一个是参数,一个是实例变量。不说的话,Java给你的是范围最细的一个,也就是参数。