考虑这个例子:
public class FirstClass {
public static int x;
public static void main(String[] args){
x = 5;
SecondClass sc = new SecondClass();
}
public int getX(){
return x;
}
}
//assume class SecondClass is in another File
public class SecondClass{}
我想从类SecondClass访问变量x,据我所知,有两种方法可以做到这一点。
在SecondClass类中我可以简单地做FirstClass.x --->做东西。 IntelliJ允许我这样做,因为x具有公共可见性。
我使SecondClass的构造函数将FirstClass fc作为参数然后执行此操作.fc = fc;在类声明后将其声明为成员变量。然后,在主要的我将SecondClass的实例更改为SecondClass sc = new SecondClass(this);现在我可以通过fc.getX();
两者有什么区别,因为我在这种情况下从未见过解释?
道歉,如果我的例子不够抽象,但我尽量做到尽可能多。
提前致谢。
答案 0 :(得分:0)
您可以通过x
访问Second Class中的变量FirstClass.x
,因为我认为您已将x
声明为静态。否则,你不能这样访问。然后你必须创建First Class的对象,然后你必须访问该变量x
。
不要在Second Class的构造函数中传递该类。只需传递变量x
即可。这会更好。如果我们通过课程,那么我们可以从Second Class做很多事情。因此,我们将提供第二类所需的数据。
SecondClass sc = new SecondClass(x);
答案 1 :(得分:0)
public class FirstClass {
int x;
......
public int getX(){
return x;
}
}
没有魔法。它是由java规范。 Controlling Access to Members of a Class
四个访问级别是 -
- 可见包,默认。不需要修饰符。
- 仅对班级(私人)可见
- 世界可见(公众)
- 对包和所有子类(受保护的)
可见
您的案例int x;
具有默认访问权限。某个包中的所有类都可以访问它。
public int getX()
你可以在你的项目中随处获得x变量。
FirstClass fc = new FirstClass(); int value = fc.getX();
你应该在你班级以外的90%的情况下使用这种(调用方法而不是直接x)方法,并且在课堂内使用10%getX()。可能存在测试的情况,getX()的一些额外逻辑 - 但这是通常的做法,而不是在你的情况下