变量绑定到对象而无需自定义构造函数?

时间:2020-05-25 05:40:52

标签: java object constructor

我对此感到困惑。这是我的意思:

public class minMax {

    private int min = Integer.MAX_VALUE;

    public void changeMin() {
        min = 10;
    }

    public static void main (String args[]) {
        minMax ob1 = new minMax();
        ob1.changeMin();
        System.out.println(ob1.min); // outputs 10 <<<<
    }
}

因此它输出10,甚至以为我们没有将min变量显式绑定到minMax构造函数。我认为您必须具有一个构造函数,该构造函数使用变量来初始化该对象才能起作用。例如:

    private int min;

    public minMax() {
        min = Integer.MAX_VALUE;
    }

我想念什么?希望得到一些解释,谢谢!

编辑:

为了进一步说明我的观点,为什么我们需要执行以下操作:

private int min;

public minMax() {
    min = Integer.MAX_VALUE;
}

与其保留默认构造函数,而不仅仅是:

private int min = Integer.MAX_VALUE;

public minMax() {
}

3 个答案:

答案 0 :(得分:2)

无需在构造函数中更改实例变量(例如min变量)的状态(即值)。它可以在任何可以访问这些变量的方法中进行,例如您的changeMin()方法。

编辑:您的编辑使问题与changeMin()方法无关。现在是关于构造函数中实例变量的初始化与实例变量初始化器中的初始化的关系。两种都是初始化实例变量的有效方法。但是,构造函数中的初始化功能更强大,因为它允许您将实例变量的值设置为传递给构造函数的值(作为构造函数参数)。

答案 1 :(得分:1)

以下是在Java中初始化类变量的可能性:

随时随地进行初始化,可以将其称为默认值

  • 如果有多个构造函数,则不必重复初始化
  • 易于阅读和理解如何实例化变量以及在何处实例化
private int min = Integer.MAX_VALUE;

构造函数中的初始化

  • 如果变量值在不同的构造函数中不同,则应使用构造函数初始化
  • 我首选的变量声明方式,构造函数是按其设计方式使用的
private int min;

public minMax() {
    this.min = Integer.MAX_VALUE;
}

public minMax(int min) {
    this.min = min;
}

静态块

  • 基于类的复杂初始化
  • 在加载了一个类之后,在创建任何该类实例之前,
private static int min;

static {
    min = Integer.MAX_VALUE;
}

答案 2 :(得分:0)

您正在从minMax类调用main方法。 在公共changeMin()方法内,您将10分配给私有min变量。changeMin()可以访问私有min,因为它是从同一类中调用的

可以从已初始化的同一类访问该私有变量。 如果您在另一个类中有main方法,并尝试复制这种情况 您将得到Error:(15, 31) java: min has private access in minMax

这意味着,如果changeMin()方法从其他类中调用私有min变量,则将导致编译错误

阅读this,以更好地了解访问修饰符。

相关问题