почему этот вывод в java - PullRequest
0 голосов
/ 02 марта 2020

У меня следующий 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?

1 Ответ

1 голос
/ 02 марта 2020

Предполагая, что ваш пример эквивалентен вам Post и Output равен

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 сначала создает ваши переменные объектов на основе его определение, а затем запускает код конструктора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...