Java 无法更改变量值
所以,我正在制作一个简单的程序,使用两个类 第一个类包含以下内容:Java 无法更改变量值,java,Java,所以,我正在制作一个简单的程序,使用两个类 第一个类包含以下内容: public class A{ private int x; public A(){ x = changexvalue(x); System.out.println(x); //Check value } private int changexvalue(int x){ x = x + 2; return x; }
public class A{
private int x;
public A(){
x = changexvalue(x);
System.out.println(x); //Check value
}
private int changexvalue(int x){
x = x + 2;
return x;
}
public int getxvalue(){
return x;
}
}
第二类包含以下内容:
public class B{
public static void main(String [] args){
A a = new A();
System.out.println(a.getxvalue());
}
}
所以,问题是这个。第一个输出(在类A中)打印2,但类B输出显示0(我希望类B输出显示2)。这是怎么可能的?我该如何解决
感谢使用
this.x
引用类的成员变量x
x本身指的是局部变量。x
在这里得到。您使用了两个同名的变量,因此只有内部变量(此时方法的输入)是可访问的,并且x
类的属性无法访问
private int changexvalue(int x){
x = x + 2;
return x;
}
换成
private int changexvalue(int y){
x = y + 2;
return x;
}
或者使用this
来明确在何处使用类的x
属性,以及在何处使用方法的x
输入变量:
private int changexvalue(int x){
this.x = x + 2;
return this.x;
}
x=changexvalue(x)的可能重复代码>在您的方法中,您在哪里执行x=x+2代码>令人困惑。您是否认为您正在将变量x
或x
的值传递给changexvalue
方法?你知道Java总是这样吗?如果它不是静态的,你怎么能访问B.main
中的a
?您是否简化了代码并删除了太多内容?您如何可能使用来自静态主函数的(非静态变量)?我尝试了代码,一切正常:2您在谈论哪个局部变量。构造函数中没有局部变量x。详细说明:在changexvalue
中,正在更改/返回的x
是局部x
(参数),而不是实例变量x
。另一种修复方法是为局部变量使用不同的名称。getxvalue()方法或changexvalue方法上的.x是否为?@user3680043:使用不同的名称,而不仅仅是x
y
就足够了,没关系。该方法返回本地x
的值,然后构造函数将该值分配给实例变量x
。或者只返回y+2代码>。并且从构造函数调用成员函数无论如何都是不好的做法。这不是原因,即使x在changexvalue中被隐藏,它也应该在A()中被覆盖,因为没有局部x变量。@Bathsheba为什么不好的做法?如果它是最终的和私有的,则不坏的原则