我对此感到困惑。这是我的意思:
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() {
}
答案 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,以更好地了解访问修饰符。