Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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 如何在两个不同的类中使用getter和setter_Java_Getter Setter - Fatal编程技术网

Java 如何在两个不同的类中使用getter和setter

Java 如何在两个不同的类中使用getter和setter,java,getter-setter,Java,Getter Setter,如何在两个不同的类中使用getter setter Class A{ int a = 10; GetterAndSetter gs = new GetterAndSetter(); gs.setValue(a); } Class GetterAndSetter { int a ; public void setValue(int a){ this.a = a; } public int getValue(){ return a;

如何在两个不同的类中使用getter setter

Class A{

    int a = 10;
    GetterAndSetter gs = new GetterAndSetter();
    gs.setValue(a);
}


Class GetterAndSetter {
    int a ;
    public void setValue(int a){
    this.a = a;
}

public int getValue(){

return a;

   }

}


class B {

    int c;
    GetterAndSetter gs = new GetterAndSetter();
    c = gs.getValue();
}

当打印c时,它给出null。并告诉我它是否有效。

您使用了不同的引用。您应该使用相同的引用,以便只有您可以访问该值。

在类
A
中,您的代码创建了
GetterAndSetter
的一个新实例,并为属性设置一个值。但是,在类
B
中,您的代码再次创建另一个
GetterAndSetter
的新实例,然后获取值

您的代码在类
A
B
中使用的实例不相同-因此,在尝试在
B
中获取时,无法获取
A
中设置的值。在
B
中创建的
GetterAndSetter
实例在
B
中的代码退出后不再使用

要解决此问题,需要将对
GetterAndSetter
实例的引用从类
a
传递到
B
。您可以这样做,例如将其作为参数传递给
B
的方法,或者在
B
中创建
a
的新实例,并调用提供
GetterAndSetter
实例的方法

第一个选项(作为参数传递)的示例:

为了连接实例,我们当然还需要另一段代码(假设
A
B
的实例已经存在):


每当你写这篇文章的时候

GetterAndSetter gs = new GetterAndSetter();
您要做的是创建一个新的
GetterAndSetter
实例。您创建的两个实例之间没有任何连接

在类
A
中,创建一个新实例,并设置其值。在类
C
中,创建一个新实例,并读取其值。但是因为有两个不同的实例,所以读取的值与设置的值没有关联

这大致如下:

  • 我买了一个信封,在里面放了一些钱
  • 后来,我想把钱拿回来,所以我买了一个新信封,寻找里面的钱

  • 如果你想找到它,你必须在你放钱的同一个信封里寻找

    它是有效的,下面是发生的情况:

    在类A中创建对象gs

    然后将该对象的a值设置为10

    然后在类B中创建另一个对象gs

    最后但并非最不重要的一点是,您可以询问类B中的对象gs其a的值是多少


    猜怎么着,它是空的,因为您没有在任何地方设置它的值,所以它不会返回值。

    您需要了解oops的基本知识,您已经在类A中创建了一个实例,并且您正在尝试在类B中访问该实例,这只有在您将该对象的引用从类A传递到类B时才可能。在这种情况下,您必须在类B中拥有在类A中创建的GetterAndSetter实例,相反,您创建了另一个新实例,它将在内存中创建新引用,类变量
    a
    将为null。

    在您的代码中,类a和B都为GetterAndSetter创建新对象。因此,它们不在这些类之间共享。这就是为什么你会得到空值


    我想知道你的代码如何为C打印null。我想它应该是“0”。

    如果它无效,那么你为什么要声明它打印
    null
    ??请至少提供编译的代码。您粘贴的内容甚至不符合伪代码的条件……您是否在尝试编写getter/setter?使用了很好的类比--+1。谢谢,这是一个很好的示例。请告诉我如何使用B中的A信封取钱您需要取您在
    A
    中创建的
    gs
    ,并将其传递给
    B
    。您可以通过将其在构造函数中传递到
    B
    ,或者使用类型为
    GetterAndSetter
    B
    字段,然后使用
    B
    的s.5星(例如信封)的单独方法将实例传递到
    B
    )代码中有什么是无效的?它是有效的Java,除了一个小的打字错误('class'vs'class')。缩进是扭曲的,所以很难阅读。显然,我没有发布完整的代码。您需要确保A和B的thrat实例都已正确初始化,并且GetterAndSetter实例已正确传递。
    ...
            b.getValueFromGetterAndSetter(a.createAndSet());
    ...
    
    GetterAndSetter gs = new GetterAndSetter();