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字段被初始化为零。对此您无能为力(除了自己将字段初始化为其他值)