何时在另一个类中实际运行变量声明?

时间:2019-05-28 03:04:07

标签: java

我从来没有真正发现一个变量声明实际上是在程序中实际运行的,而变量位于另一个类中。

例如:

  public static void main(String[] args) {
        int x = 1;
        System.out.println(x);
    } 

就声明何时运行而言,该程序似乎相当简单。

但是请考虑以下问题:

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

    public Test() {
        Test2 test2 = new Test2();
        System.out.println(test2.y);
    }
}
public class Test2 {
    public int y = 1;
}

和:

public class Test {
    public static void main(String[] args) {
        System.out.println(Test2.y);
    }
}
public class Test2 {
    public static int y = 1;
}

什么时候

public int y = 1; 

声明是否曾在此程序中运行?它只能直接调用,但实际上并不像第一个示例那样顺序运行。我们将对此进行一些澄清。

2 个答案:

答案 0 :(得分:0)

在内存中创建了一个引用为test2的对象时,您写此Test2 test2 = new Test2();时,该对象的一个​​属性为y,其值分配为1。因此,在创建对象“ test2”的过程中,执行了行public int y = 1;

答案 1 :(得分:0)

您正在研究的概念是变量绑定(基本上将变量与其数据类型和值相关联)。

此外,我将在此处重点介绍另外两件事。

第一: System.out.println(Test2.y);是错误的,因为您不能以静态方式打印或访问任何非静态变量。

第二:在下面的代码中:

public Test() { Test2 test2 = new Test2(); System.out.println(test2.y); }

您会看到我们已经在Test类的构造函数中聚合了Test2类对象,因此Test类的任何新对象都将具有Test2实例,因此您的代码将在这方面成功打印1。public int y = 1;是一个声明&在编译时运行的定义,即该变量的绑定发生在编译时。您可以探索更多有关编译时和运行时绑定的知识,以获取有关此概念的更多知识。