JAVA:帮助理解类的字段和构造函数之间的相关性

JAVA:帮助理解类的字段和构造函数之间的相关性,java,Java,所以我基本上还是一个初学者,我花了很多时间试图真正理解Java中的数据结构和操作顺序,用非常小的看似简单的程序进行分解。我很难理解编译器为什么会在下面的代码中呈现结果,我已经创建了许多使用Jframes面板和ActionListener实例的迷你程序,但现在我发现自己不理解这一点,只有很少几行代码: public class Classname{ static Classname object = new Classname(); static String word = (

所以我基本上还是一个初学者,我花了很多时间试图真正理解Java中的数据结构和操作顺序,用非常小的看似简单的程序进行分解。我很难理解编译器为什么会在下面的代码中呈现结果,我已经创建了许多使用Jframes面板和ActionListener实例的迷你程序,但现在我发现自己不理解这一点,只有很少几行代码:

public class Classname{

    static Classname object = new Classname(); 
    static String word = ("Word's Literal"); 

    public Classname(){
        System.out.println(word);
    }

    public static void main (String args[]){
    }
}
就像我说的,一个很小的看似简单的程序,我不明白的是字段,单词。我知道,虽然main方法中没有任何内容,但编译器将读取字段中的内容,在字段中,我们有object,它是类的一个新实例,并且也在调用构造函数,因此我们得到构造函数体的执行。
然而,我很清楚,我不明白的是,当运行这段代码时,fieldletter的执行值等于null。但是当你从字段word中删除静态调用时,它突然在构造函数调用中有了一个值,并愉快地打印出word的文本,这对我来说没有意义。我理解静态与静态之间的区别,静态中存在一个元素的实例,而不向字段声明静态会使其成为非静态的,因此它可以有许多单独的实例..但这仍然不能解释为什么Word在字段中为静态时等于null,当它在场中是非静态的时,我给它的值听起来是真的。谁能给我解释一下这个语法吗?谢谢大家!

静态字段的初始化取决于它们的声明顺序。什么时候

static Classname object = new Classname(); 
执行时,字尚未初始化,因此为空。试一试

static String word = ("Word's Literal");
static Classname object = new Classname();
看看会发生什么

从静态字符串字中删除static使其成为一个实例变量,它将在构造函数体执行之前实例化


清楚吗?

您提到了fieldletter,因为在fieldletter中,它的执行等于null。这是什么意思?静态字段是按顺序初始化的。在初始化对象并调用构造函数时,word的值为null,因为它尚未初始化。如果您从word中删除static,它将成为一个实例字段,在执行构造函数主体之前初始化。谢谢!一开始我没看到你的答案,但你补充了fortytwo所说的内容,并且解释得很好!!g关于fieldletter,对不起,我在IDE中已经写过的内容之间来回切换,在这个论坛上,field word最初被命名为fieldletter,但为了在这篇文章中更具意义,我将它改为word。你能详细解释一下吗?@四十二:非常!因此,我现在了解到,静态字段取决于顺序,其中,作为实例字段,如果在字段中初始化,将使用您定义为随处可见的内容进行读取。。当然,我也注意到,这些规则并不适用于方法。无论是静态的还是实例的,方法都会读取字段变量的值,因为显然不能在字段中调用方法,因此方法总是在字段初始化之后。非常感谢你!!