&引用;在java中,变量是在调用任何方法之前初始化的,即使是构造函数也是如此–;有人能举个例子吗?

&引用;在java中,变量是在调用任何方法之前初始化的,即使是构造函数也是如此–;有人能举个例子吗?,java,Java,“在java中,变量在调用任何方法之前初始化,甚至在调用构造函数之前。”。也就是说,类的构造函数体在变量初始化之后运行有人能提供一个详细解释的例子吗 任何帮助都将不胜感激。这不是事实。也许您在静态变量的上下文中听到过,因为: 它是属于类而不是对象(实例)的变量 静态变量只在执行开始时初始化一次 在初始化任何实例变量之前,将首先初始化这些变量 类的所有实例共享的单个副本 静态变量可以通过类名直接访问,不需要任何对象 示例1: public class Test { private fin

“在java中,变量在调用任何方法之前初始化,甚至在调用构造函数之前。”。也就是说,类的构造函数体在变量初始化之后运行有人能提供一个详细解释的例子吗


任何帮助都将不胜感激。

这不是事实。也许您在
静态
变量的上下文中听到过,因为:

  • 它是属于类而不是对象(实例)的变量
  • 静态变量只在执行开始时初始化一次
  • 在初始化任何实例变量之前,将首先初始化这些变量
  • 类的所有实例共享的单个副本
  • 静态变量可以通过类名直接访问,不需要任何对象

示例1:

public class Test {
    private final String s = "123";

    public static void main(String[] args) {
       Test t = new Test();     
    }

    Test() {
       System.out.println(s);
    }
}
public class Test {
    private static final String s = "123";

    public static void main(String[] args) {
       System.out.println("In main:" + s);
       Test t = new Test();     
    }

    Test() {
       System.out.println(s);
    }
}
这里s是一个类变量,只能由类的实例(对象)访问。如果您尝试在main方法中打印它的值,您将无法访问该变量,因为它只属于类对象和对象

示例2:

public class Test {
    private final String s = "123";

    public static void main(String[] args) {
       Test t = new Test();     
    }

    Test() {
       System.out.println(s);
    }
}
public class Test {
    private static final String s = "123";

    public static void main(String[] args) {
       System.out.println("In main:" + s);
       Test t = new Test();     
    }

    Test() {
       System.out.println(s);
    }
}
在这种情况下,类变量是静态的,这意味着可以直接访问它,而无需创建类的任何实例;也就是说,变量不属于对象


这就是为什么main方法是静态的,因为它需要在创建任何类对象之前被调用。

我不认为这是真的(除非我有误解)。您在哪里读到的?实例成员在调用构造函数之前初始化。此问题不符合StackOverflow规则。请阅读并回答。@sayantandey我希望这有帮助。这怎么不是真的?让它看起来确实是真的。@EmilLundberg仔细看看他的例子。在示例一中,它不是静态的,这就是为什么必须首先调用类的构造函数来访问
字符串s
。在示例2中,
字符串s
被声明为
static
,在调用
Test
的构造函数之前可以访问它。好的,我想我理解这个误解。您的观点是,必须在初始化成员之前调用构造函数。我的观点是,在构造函数体开始执行之前,成员已经初始化。都是真的。啊,现在我明白你的意思了。是的,的确如此