如何找回物件

时间:2019-05-10 09:11:21

标签: java

Class2中,我想检索在init类内部传递的objects(obj1,2)方法变量。但是我总是在0中获得Class2的价值。请建议如何在obj1,2中获取Class2变量。谢谢!

public class Class1 {
    public int Value;

    public void setMethod(int val) {
        this.Value = val;
    }

    public int getMethod() {
        return Value;
    }
}

//initialization class
import Class1;

public class init {
    Class1 obj1 = new Class1();
    Class1 obj2 = new Class1();
    obj1.setMethod(10);
    obj2.setMethod(20);
    System.out.println("obj1 value is" + obj1.getMethod()); // it will print 10
    System.out.println("obj2 value is" + obj2.getMethod()); // it will print 20
}

//another class where I want my obj1, obj2 method variables to retrieve
import Class1;

private class Class2 {
    Class1 obj1 = new Class1();
    System.out.println("obj1 value is" + obj1.getMethod()); // it is printing 0           
}

2 个答案:

答案 0 :(得分:0)

您正在尝试从init类读取对象1和2,但是您已经用Class1代码创建了Class2的对象。

您的代码中存在编译错误,并且您未遵循有关类和方法的正确命名约定。

请参见下面的代码,您需要使用公共访问修饰符定义三个单独的类。所有对象初始化都可以在类构造函数中完成,也可以定义任何公共方法

public class Class1{
  public int value;
  /*public void setMethod(int val){this.Value=val; -- here variable name is in small letter so compiler error}
  public int getMethod(){return Value;  -- here variable name is in small letter so compiler error}  -- getter setter name is not correct*/

 public void setValue(int val) {this.value=val;}
 public int getValue(){return this.value;}
}    

public class Init{
    Class1 obj1 = new Class1();
    Class1 obj2 = new Class1();

    public Init() {
        obj1.setValue(10);
        obj2.setValue(20);
        System.out.println("obj1 value is"+obj1.getValue()); // it will print 10
        System.out.println("obj2 value is"+obj2.getValue()); // it will print 20        
    }
}

public class Class2{
/*  Class1 obj1 = new Class1(); -- here obj1 will not refer to object in Init class
System.out.println("obj1 value is"+obj1.getMethod()); // it is printing 0           */
    public static void main(String[] args) {
        Init init = new Init();
        Class1 obj1 = init.obj1;  
        System.out.println("obj1 value is"+obj1.getValue());// this will print 10       
    }
}

答案 1 :(得分:0)

请确保您首先了解类和对象(类的实例)之间的区别。

对于我的其余回答,我假定您具有包含语句的方法或构造函数

您的代码创建三个对象:

  • init1类中的obj1,Class1类的实例
  • obj2也在init类中,它是Class2类的实例
  • Class2中的obj1

Class2中的实例永远不会初始化。因此,值为0。

如果您需要将Class1的实例传递给Class2,则可以在构造函数中这样做:

class Class1 {
...
}

class Class2 {
  // an instance of Class2 holds a reference to an instance of Class1
  private Class1 obj1;

  Class2(Class1 obj1) {
    this.obj1 = obj1;
  }
}

public class Main {
  public static final void main(String... args) {
    Class1 obj1 = new Class1();
    Class2 obj2 = new Class2(obj1);
  }
}