空构造函数但实例变量仍然初始化?
Empty constructor but instance variable still initialized?
我是java的新手,我对对象初始化有疑问。
我目前知道的:
构造函数用于初始化实例变量,如果我们不显式编写构造函数,则提供默认构造函数,自动为实例变量提供默认值,例如 0 表示 int 等。
我的问题:
以下代码是如何工作的(我没有初始化实例变量)?
我尝试了如下基本代码:
public class hello{
int i; //Instance variable
public hello()
{
//Constructor is empty!!!
}
public static void main(String args[])
{
System.out.println(new hello().i);
}
}
结果是 0,但是怎么办?我没有在构造函数中做任何事情,因为我明确地编写了构造函数,所以不应该调用默认构造函数(我知道我的想法有误,所以请纠正我)。
上面的代码是如何实现的,请解开我的疑惑。
谢谢!
默认构造函数不初始化任何东西。它是空的。无论构造函数如何,字段级变量都会自动初始化为一些默认值(例如 0
用于 int
类型)。
其他默认值为
boolean -> false
double -> 0.0D
[any object reference incl. String] -> null
您可能混淆了实例变量和局部变量。局部变量是在使用前必须初始化的变量,否则会出现编译错误。 int i
在这种情况下是一个实例变量,它可以保持未初始化状态而不会导致编译器报错。 int
实例变量默认为0。
如果您没有为实例变量提供显式初始化,它们将被授予可预测的默认初始值,这些初始值仅基于变量的类型。
以下是所有类型的默认值:
Type Default Value
boolean false
byte (byte) 0
short (short) 0
int 0
long 0L
char \u0000
float 0.0f
double 0.0d
object reference null
即使您已经显式创建了其中包含空代码的默认构造函数
在您的代码中,以下行将被执行
System.out.println(new hello().i);
如果你没有在你的构造函数中显式地初始化一个实例变量,那么当new returns its object reference.At 那个时候那个变量将保留它的默认初始值,你的实例变量是由 JVM 设置为默认值。
而且每当需要创建对象时,JVM 都会在调用默认构造函数之前调用 Instance Initializer Block[IIB]。
谢谢
我是java的新手,我对对象初始化有疑问。
我目前知道的:
构造函数用于初始化实例变量,如果我们不显式编写构造函数,则提供默认构造函数,自动为实例变量提供默认值,例如 0 表示 int 等。
我的问题: 以下代码是如何工作的(我没有初始化实例变量)?
我尝试了如下基本代码:
public class hello{
int i; //Instance variable
public hello()
{
//Constructor is empty!!!
}
public static void main(String args[])
{
System.out.println(new hello().i);
}
}
结果是 0,但是怎么办?我没有在构造函数中做任何事情,因为我明确地编写了构造函数,所以不应该调用默认构造函数(我知道我的想法有误,所以请纠正我)。
上面的代码是如何实现的,请解开我的疑惑。 谢谢!
默认构造函数不初始化任何东西。它是空的。无论构造函数如何,字段级变量都会自动初始化为一些默认值(例如 0
用于 int
类型)。
其他默认值为
boolean -> false
double -> 0.0D
[any object reference incl. String] -> null
您可能混淆了实例变量和局部变量。局部变量是在使用前必须初始化的变量,否则会出现编译错误。 int i
在这种情况下是一个实例变量,它可以保持未初始化状态而不会导致编译器报错。 int
实例变量默认为0。
如果您没有为实例变量提供显式初始化,它们将被授予可预测的默认初始值,这些初始值仅基于变量的类型。
以下是所有类型的默认值:
Type Default Value
boolean false
byte (byte) 0
short (short) 0
int 0
long 0L
char \u0000
float 0.0f
double 0.0d
object reference null
即使您已经显式创建了其中包含空代码的默认构造函数
在您的代码中,以下行将被执行
System.out.println(new hello().i);
如果你没有在你的构造函数中显式地初始化一个实例变量,那么当new returns its object reference.At 那个时候那个变量将保留它的默认初始值,你的实例变量是由 JVM 设置为默认值。
而且每当需要创建对象时,JVM 都会在调用默认构造函数之前调用 Instance Initializer Block[IIB]。
谢谢