Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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,将类变量作为参数传递给私有方法与简单地引用它们相比,有什么优点/缺点吗?随着我的类越来越长,我担心未来的程序员需要向上滚动到类的顶部,以了解“foo”是什么,所以我考虑在调用方法时将它们作为参数传递,但我不确定这是否会导致我没有考虑的其他问题 简言之;这是: public class Foo { private int number = 0; public Foo(int startingNumber) { this.number = startingNumb

将类变量作为参数传递给私有方法与简单地引用它们相比,有什么优点/缺点吗?随着我的类越来越长,我担心未来的程序员需要向上滚动到类的顶部,以了解“foo”是什么,所以我考虑在调用方法时将它们作为参数传递,但我不确定这是否会导致我没有考虑的其他问题

简言之;这是:

public class Foo {

    private int number = 0;

    public Foo(int startingNumber) {
        this.number = startingNumber;
    }

    public int biggerNumber() {
        return embiggenIt(number);
    }

    // ... Many lines of code ...

    private int embiggenIt(int aNumber) {
        return aNumber++;
    }
}
比这更好或更糟的是:

public class Foo {

    private int number = 0;

    public Foo(int startingNumber) {
        this.number = startingNumber;
    }

    public int biggerNumber() {
        return embiggenIt();
    }

    // ... Many lines of code ...

    private int embiggenIt() {
        return this.number++;
    }
}
。。。如果是,为什么

编辑

好的,显然我应该在这里说明,我不关心更改类变量,我不确定为什么每个人都会得出这样的结论;我没有意识到我的例子有那么糟糕(尽管我很快就把它拼凑起来了)。在这个示例中,我所关心的是运行该方法后的返回值(想想函数式编程)

也许这是我所说的一个更好的例子:

public class Foo {

    private static final int number = 0;

    public Foo() {
    }

    public int biggerNumber() {
        return embiggenIt(number);
    }

    // ... Many lines of code ...

    private int embiggenIt(int aNumber) {
        return aNumber +1;
    }
}
v、 美国

我要强调的是,变量不必是常数,但我补充说,只是为了说明我对修改变量不感兴趣(我理解通过引用传递还是通过值传递,谢谢)


现在我们有点清楚了,这两种方法有区别吗?你喜欢读哪一本?这会让你打小程序员的指关节吗?

在第一种情况下,你是在传递值。因此,永远不会修改类的成员变量。在第二种情况下,您引用的是类变量本身

我认为情况更糟,因为跟踪示波器只会让你头疼。例如,在您的第一个代码中,类变量
number
的值不会增加,因为您只增加了本地字段
aNumber
的值,该字段指向的变量与
aNumber

不同。首先,您的所有代码示例将产生不同的结果-第一个示例不起任何作用,而第二个实际上是递增的
number
。但是,两者都返回变量的旧值(即没有添加1),因为您使用后减量运算符
x++
(而不是
++x

其次,如果使用自解释名称,即使在大型类文件中使用字段也没有问题


第三,如果您想给字段赋值,通常不可能省略使用该字段。

在java中,本机类型如int、double、,。。。是通过值传递的

任何类对象都是通过引用传递的


所以在代码中可以使用Integer类而不是int,所以我终于找到了问题的答案。似乎其他人阅读我的代码时没有理解这个问题,但我自己却意外地找到了正确的答案


将变量传递给方法比简单地引用类变量更可取,因为它允许我们在测试时执行依赖项注入。明显的例外是类常量。

您知道这两个代码有不同的行为吗?请注意,原语类型将作为值传递,而不是通过引用传递的
对象。您的第一个示例不会增加类成员。@XaviLópez甚至对象引用都是按值传递的。@RohitJain确实如此。我被纠正了:-)我确实理解每个方法如何影响类变量之间的差异,我这样做是为了从函数中获得返回值。对不起,这个坏例子。
public class Foo {

    private static final int number = 0;

    public Foo() {
    }

    public int biggerNumber() {
        return embiggenIt();
    }

    // ... Many lines of code ...

    private int embiggenIt() {
        return this.number +1;
    }
}