我已经知道在类中你可以声明变量和方法.如果首选,它们都可以声明为静态.
现在我遇到了一个我不太懂的程序示例.在类中的一些变量声明之后,有一个声明为static的字段,里面有程序代码.
这段代码什么时候执行?我的猜测是,在创建新对象时,代码执行如下:
如果我执行
Run Code Online (Sandbox Code Playgroud)MyCars myCars = new MyCars();
以下将按此顺序发生?
Run Code Online (Sandbox Code Playgroud)public class MyCars { private Car volvo = new Car() // (1) (2) static { volvo.setNumberOfWheels = 4; // (3) } public MyCars() { volvo.setBrand = "Volvo"; volvo.setModel = "XC70"; (4) }
这是原始代码:
Run Code Online (Sandbox Code Playgroud)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是一个实例(非静态)变量,静态块无法访问它.重温你的例子:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |