Java非静态字段默认值?
我最近遇到了一段代码:Java非静态字段默认值?,java,Java,我最近遇到了一段代码: public class SomeClass { private Logger logger = LoggerFactory.getInstance().getLogger(SomeClass.class); private int whatever; // .. Rest of the class definition } 被风吹走了!这段代码编译和运行得非常漂亮!我只见过对类变量(静态)执行这种赋值。我的印象是,为了给实例变量赋值,必须在方
public class SomeClass
{
private Logger logger = LoggerFactory.getInstance().getLogger(SomeClass.class);
private int whatever;
// .. Rest of the class definition
}
被风吹走了!这段代码编译和运行得非常漂亮!我只见过对类变量(静态)执行这种赋值。我的印象是,为了给实例变量赋值,必须在方法内部这样做。错了
我的问题:这是覆盖Java类型默认值的一种方式吗?例如,在上面的示例中,1ogger
字段通常会被分配一个null
值,直到构造函数/setter生成一个值。其他类型(如原语)都有自己的内置默认值,如默认值为false的booleans
这只是Java让您覆盖内置默认值的方式吗?否则,这到底是什么?为什么
提前谢谢 我看不出有什么问题。声明可以包括赋值,这就是您正在做的事情——为字段赋值
您可以通过多种方式为字段提供初始值:通过构造函数、通过初始值设定项块({..}
)或直接赋值,就像您所做的那样
请参阅本教程的一节。我看不出有什么问题。声明可以包括赋值,这就是您正在做的事情——为字段赋值
您可以通过多种方式为字段提供初始值:通过构造函数、通过初始值设定项块({..}
)或直接赋值,就像您所做的那样
请参阅本教程的一节。您不能更改类型的默认值,但可以在中写入实例变量:
- 字段声明:
private int x = 10;
- 建造商:
private int x;
public Foo() {
x = 10;
}
- 实例初始值设定项:
private int x;
void someOtherMethod() {}
// These are relatively rare
{
x = 10;
}
- 常规方法:
private int x;
void someMethod() {
x = 10;
}
有关实例变量初始值设定项的更多信息,请参阅JLS,有关字段声明的更通用语法,请参阅JLS。您不能更改类型的默认值,但可以在以下位置写入实例变量:
- 字段声明:
private int x = 10;
- 建造商:
private int x;
public Foo() {
x = 10;
}
- 实例初始值设定项:
private int x;
void someOtherMethod() {}
// These are relatively rare
{
x = 10;
}
- 常规方法:
private int x;
void someMethod() {
x = 10;
}
有关实例变量初始值设定项的更多信息,请参阅JLS,有关字段声明的更通用语法,请参阅JLS。内置默认值无法覆盖,例如int字段初始化为零。您对此无能为力(除了自己将字段初始化为其他值)内置默认值不能被覆盖,例如int字段被初始化为零。对此您无能为力(除了自己将字段初始化为其他值)