【问题标题】:In Java, Variable got initialize without constructor, How it come possible? [duplicate]在 Java 中,变量在没有构造函数的情况下进行了初始化,这怎么可能? [复制]
【发布时间】:2016-10-07 07:18:27
【问题描述】:

我了解,构造函数用于初始化实例变量。 默认构造函数将由编译器自己创建,如果我们没有创建相同的。 如果我们正在创建参数化构造函数,那么编译器将不会创建默认构造函数。 我写了一个代码,忽略构造函数要处理的实例变量。但它在没有构造函数的情况下被初始化。如何在没有构造函数的情况下初始化变量? 请在下面找到代码sn-p以便更好地理解

public class ClassWithoutDefault {
int number;
String name;

//Intailizing name variable alone by using parameterized constructor
ClassWithoutDefault(String name){
    this.name = name
}
void show(){
    System.out.println("Name is"+name+"Number is"+number );

}
}

//Main class
public class ConstructorTest {

public static void main(String[] args) {
    ClassWithoutDefault classWithoutDefault = new ClassWithoutDefault("Hari");
    classWithoutDefault.show();
}

}

输出

Name is Hari
Number is 0

在没有构造函数的情况下,变量 number 是如何被初始化为 0 的?谁能帮我理解一下?

【问题讨论】:

标签: java constructor


【解决方案1】:

每个成员变量都被分配了一个默认值(当一个类的实例被创建时),如果你没有给它分配任何东西,它会保留这个默认值。原始数值类型的默认值为0

【讨论】:

  • 感谢您的回复。根据我的理解,将变量设置为默认值称为初始化,它将由构造函数完成。如果我错了,请纠正我。在我跳过的代码中,由构造函数处理的变量。那么怎么设置为0,甚至不被构造函数处理呢?
  • @Hari 不,将实例变量初始化为其默认值是在执行构造函数之前执行的。如果可以跳过默认值的分配,那么访问可能尚未初始化的实例变量将是编译错误。
  • 感谢您的回复....如果它在没有构造函数的情况下初始化。那你能告诉我构造函数的目的是什么吗?
  • @Hari 构造函数允许您为实例变量分配非默认值。
  • 构造函数的目的是,准备实例变量由用户定义的值进行初始化。我说的对吗?
【解决方案2】:

每当创建一个类的新对象时,:

  • 字符串由null初始化。
  • 数字由0(整数)或0.0(浮点数)初始化。
  • booleans 由 false 初始化。
  • chars 由 \u0000 初始化
  • 数组由其组件的默认值初始化。
  • 其他对象由null初始化。

因此,您的号码被初始化为 0。

【讨论】:

  • 感谢您的回复。根据我的理解,变量的初始化是在创建对象时由构造函数完成的。如果我错了,请纠正我。在我跳过的代码中,由构造函数处理的变量。那么怎么设置为0,甚至不被构造函数处理呢?
【解决方案3】:

创建对象时,首先编译器将该类文件复制到内存中,并在内存中创建对象的模板。然后它会根据该模板创建一个副本并将其添加到您的引用变量中。 如果你声明了一个静态变量,那么这个变量是用模板创建的,这就是为什么静态变量每次都有最后更新的值。因为对于所有对象来说,内存中只有一个同名的公共变量。 但是当您创建实例变量时,它是由每个对象创建的。 所以每次创建对象时,都会初始化为默认值。

//byte  0
//short 0
//int   0
//long  0
//float 0.0
//double 0.0
//char null
//boolean false
//Reference Type, class type - null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多