当前位置: 首页 > 知识库问答 >
问题:

在Java中,变量在没有构造函数的情况下被初始化,这怎么可能呢?[副本]

诸经略
2023-03-14

我知道,构造函数用于初始化实例变量。默认构造函数将由编译器自己创建,如果我们没有创建相同的构造函数。如果我们正在创建参数化构造函数,那么编译器将不会创建默认构造函数。我已经编写了一段代码,用来忽略构造函数要处理的实例变量。但它在没有构造函数的情况下得到了初始化。如何在没有构造函数的情况下初始化变量?为了更好地理解,请查找下面的代码片段

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

没有构造函数,变量号是如何初始化为0的?。谁能帮我理解一下这一点?

共有3个答案

上官自明
2023-03-14

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

//byte  0
//short 0
//int   0
//long  0
//float 0.0
//double 0.0
//char null
//boolean false
//Reference Type, class type - null
曾鸿振
2023-03-14

每当创建类的新对象时:

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

因此,您的数字初始化为0。

邴宏大
2023-03-14

每个成员变量都被分配了一个默认值(当创建一个类的实例时),如果您不给它分配任何其他值,它将保留该默认值。基元数字类型的默认值是0

 类似资料:
  • 问题内容: 我有两个班,第一个是我的主班,第二个是我的编辑框架班。 我的第二个类(UpdateGUI)在其构造函数中提供oldName,并对其进行编辑,当我单击时,它将newName发送给我的第一个类。 我的第二堂课: 我的问题是,为什么newName为null? 更新: UpdateGUIDialog类: 输出: 我需要打印而不是null。 问题答案: Java对象有点像真实对象。并顾名思义:它

  • 问题内容: 有没有在Java构造函数中使用最终变量的解决方案?问题是,如果我初始化一个最终字段,例如: 那么我就不能在构造函数中使用它。Java首先运行构造函数,然后运行字段。有没有一种解决方案可以让我访问构造函数中的final字段? 问题答案: 我不太明白你的问题。那 执行如下:

  • 问题内容: 我有以下这段代码: 现在在控制台中,构造函数要在的构造函数之前执行。 我想知道为什么会这样。 问题答案: 这是因为在编译时,编译器会将在声明位置完成的每个初始化都移到类的每个构造函数中。因此,类的构造函数可以有效地编译为: 因此,显然构造函数是在类的语句之前执行的。同样,如果您的类中还有其他构造函数,则初始化将移至所有它们。 让我们看一个简单类的字节码: 编译该类,并执行命令- 。您将

  • 问题内容: import React, { Component } from ‘react’; 通常我看到的是,如果他使用es6类,人们会在构造函数中执行this.state。如果不是,他可能会使用getinitialstatestate函数放置状态。但是上面的代码(是的,这是一个有效的代码),两者都没有使用。我有2个问题,这里的状态是什么?那是局部变量吗?如果是,为什么没有?prevState来

  • 问题内容: 当我尝试编译时: 我得到这些错误: 在我看来,我在方法的顶部初始化了它们。怎么了 问题答案: 你声明了它们,但没有初始化它们。初始化它们是将它们设置为等于一个值: 因为未初始化变量,但在循环中增加了变量(例如),所以会收到错误消息。 Java原语具有默认值,但如下一位用户所述 当声明为类成员时,它们的默认值为零。局部变量没有默认值

  • 我的编译器不会有它(现在怎么办?我必须完全重写整个应用程序吗? 要查看编译器拒绝的行,请执行系统搜索。出来println(celsius输出“C”); 当试图编译时,编译器告诉我,“变量celsiusOutput可能尚未初始化。”编译器对另外两个输出项中的任何一个都不说同样的话:华氏输出和开尔文输出。