通过不同的方法更改和使用变量

时间:2017-06-19 18:47:43

标签: java android variables global

我有一个小问题因为我不明白的话题。类中有一个变量。在第一种方法中,我想给她一个价值。第二种方法必须再次更改此变量的值。第三种方法需要变量的新值。我想在类的每个点上更改并使用此变量。这可能吗?我希望你知道我的意思。谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

有可能。

public class Test{
  int counter;

  public void initCounter(int initValue){
    counter = initValue;
  }

  public void incCounter(){
    counter++;
  }
  public void decCounter(){
    counter--;
  }
  public void printCounter(){
    System.out.println(counter);
  }
}

答案 1 :(得分:0)

如果我理解正确,您需要将变量发送到方法中,以便他们可以修改它。据我了解,这里可能很难,因为如果你使用包装类型,它们就无法修改。在这种情况下,您可以创建一个包装变量的类,并可以更改它的值,或者您可以使用第三方库中的现成解决方案。

例如,在apache-comons中,他们有一个包:

org.apache.commons.lang3.mutable

包含所有原始类型的可变包装器(例如MutableInt)。 使用您自己的包装器或此类,您可以修改方法内的变量并保持结果,而无需从这些方法返回新值。

答案 2 :(得分:0)

你可以这里做一个例子:

public class PassingV {

    private int i;


    public int getI() {
        return i;
    }


    public void setI(int i) {
        this.i = i;
    }


    public PassingV firsM(PassingV a){
        a.setI(1);
        return a;

    }

    public PassingV secondM(PassingV a){
        a.setI(2);
        return a;

    }

    public PassingV thirdM(PassingV a){
        a.setI(3);
        return a;

    }


    @Override
    public String toString() {
        return "PassingV [i=" + i + "]";
    }


    public static void main(String[] args) {
        // TODO Auto-generated method stub

        PassingV v = new PassingV();

        System.out.println(v.firsM(v).toString());
        System.out.println(v.secondM(v).toString());
        System.out.println(v.thirdM(v).toString());

    }

}

<强>结果:

enter image description here

适用于您正在使用的对象类型,并且在您定义或未在类中定义的方法(例如访问器)方面很有用。

它们可以彻底改变你的物体从外面看到的方式。

让我们修改一下我们的课程,让我们看看会发生什么。

现在我将使用字符串参数代替 int

public class PassingV {

    private String i;



    public String getI() {
        return i;
    }

    public void setI(String i) {
        this.i = i;
    }

    public PassingV firsM(PassingV a){
        a.setI("HEY ");
        //substring but it return the original value :D
        System.out.println(a.getI().substring(2));
        return a;

    }

    public PassingV secondM(PassingV a){
        a.setI("JOE ");
        return a;

    }

    public PassingV thirdM(PassingV a){
        a.setI("LETS GO");
        return a;

    }





    @Override
    public String toString() {
        return this.getI() ;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        PassingV v = new PassingV();

        System.out.println(v.firsM(v).toString());
        System.out.println(v.secondM(v).toString());
        System.out.println(v.thirdM(v).toString());

    }

}

<强>结果:

enter image description here

正如您所看到的那样, String 对象发生了一些变化,因为它发生了 不可变对象

点击此链接,您可以阅读有关Immutable Objects

的更多信息