Инициализация члена происходит перед телом конструктора.
Поэтому, когда вы создаете экземпляр StackOverFlowSampleMain
, первое, что он делает, - это инициализирует его член oomeSampleMain
. Он, в свою очередь, пытается инициализировать свой собственный элемент oomeSampleMain
и т. Д. До тех пор, пока не произойдет сбой программы с помощью StackOverflowError
, поэтому приращение x
просто никогда не будет достигнуто.
Если вы хотите измерить, когда происходит StackOverflowError
, вы можете переместить код, вызывающий его, в конец конструктора:
public class StackOverFlowSampleMain {
StackOverFlowSampleMain oomeSampleMain;
static int x = 0;
StackOverFlowSampleMain() {
x++;
System.out.println(x);
oomeSampleMain = new StackOverFlowSampleMain(); // Here, after x is printed
}
}