java - 在构造函数中调用未初始化的变量

标签 java

在下面的构造函数中,我只初始化了两个变量,留下一些未显式初始化的变量。

正如我所读到的,如果构造函数由我们提供,则编译器不会创建参数构造函数。在这种情况下,因为我有自己的构造函数,所以没有默认构造函数来初始化变量 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/

相关文章:

java - 插件GMF

java - 在OOP中,写子类的时候是不是要改掉原来的main方法代码?什么代替?

java - Spring + EntityManagerFactory +Hibernate 监听器 + 注入(inject)

java - 尽管它是父类(super class) android.support.v4.app.ActivityCompat 下的抽象方法,但无法覆盖 onRequestPermissionsResult 函数

java - Robot().createScreenCapture() 如此缓慢背后的技术和根本原因是什么?

java - 获取库的路径 - Java

使用计数器的 Java 数据竞争示例

java - 位移位操作 java - 输出到 8 位而不是 9 位

java - 无法使用 Apache Ivy 获取 Hibernate Core 和 Hibernate Annotations(但它也与 Maven2 相关。)

java - 从代码中解析 OSGi 包