gpt4 book ai didi

java - java中数据字段的初始化顺序

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:13 26 4
gpt4 key购买 nike

在下面的代码中,数据字段的初始化顺序是什么? java对数据成员和成员函数遵循的一般规则是什么?

public class TestClass 
{
int j=10;
static int h=5;

public static void main(String[] args)
{
TestClass obj= new TestClass();
}
}

最佳答案

一般来说:

1) 静态字段成员(一般是静态初始化器)

2) 非静态字段成员

3)构造函数

但是您可以使用如下代码片段对其进行测试:

public class TestClass {
int i = 10;
static int j = 20;
public TestClass() {
// TODO Auto-generated constructor stub
System.out.println(i);
i = 20;
System.out.println(i);
}
public static void main(String[] args) {
new TestClass();
}
}

引自伟大的“Thinking In Java”:

Within a class, the order of initialization is determined by the order that the variables are defined within the class. The variable definitions may be scattered throughout and in between method definitions, but the variables are initialized before any methods can be called—even the constructor. ................................... There’s only a single piece of storage for a static, regardless of how many objects are created. You can’t apply the statickeyword to local variables, so it only applies to fields. If a field is a staticprimitive and you don’t initialize it, it gets the standard initial value for its type. If it’s a reference to an object, the default initialization value is null.


要总结创建对象的过程,请考虑一个名为 Dog 的类:

  1. 虽然它没有显式地使用 static 关键字,但构造函数实际上是一个静态方法。所以第一次创建一个 Dog 类型的对象,或者第一次创建一个访问 Dog 类的静态方法或静态字段,Java 解释器必须找到 Dog.class,它通过搜索类路径来完成。

  2. 加载 Dog.class 时(创建一个 Class 对象,稍后您将了解),所有它的静态初始化程序运行。因此,静态初始化只发生一次,因为第一次加载类对象。

  3. 当你创建一个新的 Dog( ) 时,首先是一个 Dog 对象的构造过程为堆上的 Dog 对象分配足够的存储空间。

  4. 此存储被删除为零,自动设置该 Dog 中的所有基元反对它们的默认值(数字为零, boolean 值和char) 和对 null 的引用。

  5. 任何发生在字段定义点的初始化都会被执行。

  6. 执行构造函数。这实际上可能涉及相当多的 Activity ,尤其是在涉及继承时。

关于java - java中数据字段的初始化顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23028998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com