Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 访问类';来自另一个类的成员变量_Java - Fatal编程技术网

Java 访问类';来自另一个类的成员变量

Java 访问类';来自另一个类的成员变量,java,Java,考虑这个例子: 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 Fi

考虑这个例子:

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,据我所知,有两种方法可以做到这一点

  • 在第二节课上,我可以简单地做第一节课。IntelliJ允许我这样做,因为x具有公共可见性

  • 我让SecondClass的构造函数以一个FirstClass fc作为参数,然后这样做。fc=fc;在类声明之后将其声明为成员变量。然后,大体上我将SecondClass的实例更改为SecondClass sc=newSecondClass(this);现在我可以通过fc.getX()在SecondClass中访问

  • 这两者之间有什么区别,因为我从来没有看到过这种情况下的解释

    如果我的例子不够抽象,我表示歉意,但我尽力做到了

    提前谢谢

  • 您可以通过
    FirstClass.x
    从第二类访问变量
    x
    ,因为我认为您已经声明
    x
    为静态变量。否则,您不能像那样访问。然后您必须创建一个第一类的对象,然后您必须访问该变量
    x

  • 不要在第二个类的构造函数中传递该类。只需传递变量
    x
    。这样会更好。如果我们通过了这门课,那么我们可以在第二节课上做很多事情。因此,我们将提供第二课堂所需的数据

    二级sc=新二级(x)

  • 没有maggic。它是通过java规范实现的。

    这四个访问级别是−

    • 默认情况下,对包可见。不需要修改器
    • 仅对类可见(专用)
    • 世界可见(公众)
    • 对包和所有子类可见(受保护)
    您的案例
    intx具有默认访问权限。某个包中的所有类都可以访问它

    公共int getX()

    您可以在项目中的任何位置获得x变量

    FirstClass fc=新的FirstClass(); int value=fc.getX()


    在类外90%的情况下,以及在类内10%的情况下,应该使用这种方法(调用方法而不是直接x)。可能会有一些测试案例,一些getX()的额外逻辑——但这是常见的做法,而不是在您的案例中

    您是正确的。当从我的程序中抽象出这个例子时,我错过了这个。我已经更正了我原来的帖子。关于你的2。评论,你能详细说明为什么会更好吗?另外,如果我想访问多个变量呢?更好的方法是传递所有变量,而不是传递类本身?如果变量不是常量,则不需要使其成为静态变量;只需编写私有int x;在这种情况下,您将对x变量的访问限制在classvariable之外,x变量是从静态main方法访问的。因此,变量x必须是静态的。@curiosityisblish,如果你想访问多个变量,那么你也可以考虑继承;但是getter属于头等舱!至于可见性,谢谢,我理解了。所以你建议只在main方法中创建一个第一类实例,然后用getter访问x?如果是,当我想从SecondClass访问它时,这对我有什么帮助当您使用静态和公共访问或默认情况下您对变量有直接访问权限时。如果它是一个简单的程序,你可以做到这一点。但是你可以在你的程序中的任何地方改变x变量,它并不能让你访问x,但你不能改变它。这是读访问。要具有写访问权限,应添加set方法
    public class FirstClass {
        int x;
        ...... 
        public int getX(){
            return x;
        }
    }