java - 为什么在java中输出这个

标签 java oop

我有以下java代码段,

class A{
    int a=100;
    A(){
        //Compiler inserts "a=100;"
        System.out.println("A() : "+a);
    }
    A(int i){
        //Compiler inserts "a=100;"
        System.out.println("A(int) : "+a);
        a=i;
    }
}
class Demo{
    public static void main(String args[]){
        A a1=new A();
        System.out.println("a1.a : "+a1.a);  //100

        A a2=new A(200);
        System.out.println("a2.a : "+a2.a);  //200
    }
}

我使用此代码有以下输出

A<> :100
a1.a :100
A<> :100 //why this print after a1.a :100
a1.a :200

我有以下问题。为什么这是a1.a :100打印前A<> :100

最佳答案

假设您的示例相当于您的帖子并且输出为

A() : 100
a1.a : 100
A(int) : 100
a2.a : 200

这是因为 A 中的构造函数首先打印出 a,然后将 a 的值更改为 i:

class A {
int a = 100;

A() {
    // a is containing it's initial value (100)
    System.out.println("A() : " + a);

}

A(int i) {
    // a is containing its initial value (100)
    System.out.println("A(int) : " + a);
    a = i;
    //a is containing now its new value (i or in your example 200)
}

如果你想要这样的输出

A() : 100
a1.a : 100
A(int) : 200
a2.a : 200

您必须将代码更改为:

A(int i) {
    // a is containing its initial value (100)
    a = i;
    //a is containing now its new value (i or in your example 200)
    System.out.println("A(int) : " + a);
}

这是因为 Java 首先根据其定义构造对象变量,然后运行构造函数的代码。

关于java - 为什么在java中输出这个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60490070/

相关文章:

java - Mylyn 任务 - 在代码中使用 TODO 分配任务?

java - 在 Chrome 中打开 JNLP - 阻止文件下载对话框?

java - 如何使用 Spring Data Rest 在 GET 调用中获取自引用对象

php - 如何在类中包含定义常量的文件(及其范围)

java - 使用Java包时编译错误?

java - 回显 TextView 的内容?

c# - 需要有关 OOP 哲学的建议

java - 使用多线程的面向对象矩阵乘法

javascript - Mootools 类中的私有(private)方法

java - JScrollBar:最大值较小时旋钮不可见