在下面的构造函数中,我只初始化了两个变量,留下一些未显式初始化的变量。
正如我所读到的,如果构造函数由我们提供,则编译器不会创建参数构造函数。在这种情况下,因为我有自己的构造函数,所以没有默认构造函数来初始化变量 p 和 q。
所以,逻辑上应该是如果我们试图访问那些未初始化的变量,那么它应该是一个编译时错误。但是,下面的代码运行成功。
输出是 5个 10 0.0 0.0
我们如何解释输出 0.0 和 0.0,因为我没有在构造函数中声明它们?
public class Rectangle {
int l, b;
double p, q;
public Rectangle(int x, int y) {
l = x;
b = y;
}
public static void main(String[] args) {
Rectangle obj1= new Rectangle(5,10);
System.out.println(obj1.l);
System.out.println(obj1.b);
System.out.println(obj1.p);
System.out.println(obj1.q);
}
最佳答案
基元被初始化为默认值,在本例中,整数为 0, float 或 double 为 0.0。对象默认为 null,例如 String 将为 null。
您在构造函数中设置的值通常与默认值不同,因此需要构造函数。
默认初始值是一种语言特性,根本不需要构造函数。
您在这里阅读了默认值:http://www.janeg.ca/scjp/lang/defaults.html
请记住,默认值仅适用于 CLASS 成员,不适用于局部变量。这种差异就是为什么您会因某些未初始化的值而出现编译错误。
关于java - 在构造函数中调用未初始化的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10830643/