gpt4 book ai didi

java - 带有程序代码的静态字段

转载 作者:行者123 更新时间:2023-11-30 06:32:37 25 4
gpt4 key购买 nike

我了解到在类中可以声明变量和方法。如果愿意,它们都可以声明为静态。

现在我遇到了一个我不太懂的程序例子。在类中的一些变量声明之后,有一个声明为静态的字段,里面有程序代码。

这段代码什么时候执行?我的猜测是,当创建一个新对象时,代码的执行方式如下:

  1. 实例变量的内存分配。
  2. 执行连接到实例变量的构造函数。
  3. 静态字段的执行
  4. 构造函数的执行(如果“=创建对象时使用了new Constructor())

如果我执行

MyCars myCars = new MyCars();

以下会按这个顺序发生吗?

public class MyCars
{
private Car volvo = new Car()
// (1) (2)
static
{
volvo.setNumberOfWheels = 4;
// (3)
}

public MyCars()
{
volvo.setBrand = "Volvo";
volvo.setModel = "XC70";
(4)
}

原代码如下:

public class SettingsSetter extends ListActivity
{
private static Map<Integer,String> menuActivities=new HashMap<Integer,String>();
private static List<BooleanSetting> settings=new ArrayList<BooleanSetting>();

static
{
menuActivities.put(R.id.app,
Settings.ACTION_APPLICATION_SETTINGS);
menuActivities.put(R.id.security, Settings.ACTION_SECURITY_SETTINGS);
menuActivities.put(R.id.wireless,
Settings.ACTION_WIRELESS_SETTINGS);
menuActivities.put(R.id.all,
Settings.ACTION_SETTINGS);

settings.add(new BooleanSetting(Settings.System.INSTALL_NON_MARKET_APPS,
"Allow non-Market app installs", true));
settings.add(new BooleanSetting(Settings.System.HAPTIC_FEEDBACK_ENABLED,
"Use haptic feedback", false));
settings.add(new BooleanSetting(Settings.System.ACCELEROMETER_ROTATION,
"Rotate based on accelerometer", false));
}

最佳答案

静态初始化器在加载类时执行,因此在创建任何实例之前执行。你的第一个代码是错误的,因为 volvo 是一个实例(非静态)变量,静态 block 无法访问它。重温您的示例:

public class MyCars
{
private static Car audi = new Car()
// (2)
private Car volvo = new Car()
// (5) (6)
static
{
audi.setNumberOfWheels = 4;
// (3)
}
public MyCars()
{
volvo.setBrand = "Volvo";
volvo.setModel = "XC70";
// (7)
}
}

MyCars myCars = new MyCars();
// (1) (4)

关于java - 带有程序代码的静态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8709829/

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