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