打字猴:1.70044133e+09
1700441330
1700441331 }
1700441332
1700441333 }
1700441334
1700441335 class Base{
1700441336
1700441337 //对象计数器
1700441338
1700441339 private static int numOfObjects=0;
1700441340
1700441341 {
1700441342
1700441343 //构造代码块,计算产生对象数量
1700441344
1700441345 numOfObjects++;
1700441346
1700441347 }
1700441348
1700441349 public Base(){
1700441350
1700441351 }
1700441352
1700441353 //有参构造调用无参构造
1700441354
1700441355 public Base(String_str){
1700441356
1700441357 this();
1700441358
1700441359 }
1700441360
1700441361 //有参构造不调用其他构造
1700441362
1700441363 public Base(int_i){
1700441364
1700441365 }
1700441366
1700441367 //返回在一个JVM中,创建了多少个实例对象
1700441368
1700441369 public static int getNumOfObjects(){
1700441370
1700441371 return numOfObjects;
1700441372
1700441373 }
1700441374
1700441375 }
1700441376
1700441377 这段代码是可行的吗?能计算出实例对象的数量吗?哎,好像不对呀,如果编译器把构造代码块插入到各个构造函数中,那带有String形参的构造函数可就有问题,它会调用无参构造,那通过它生成Base对象时就会执行两次构造代码块:一次是由无参构造函数调用构造代码块,一次是执行自身的构造代码块,这样的话计算可就不准确了,main函数实际在内存中产生了3个对象,但结果却会是4。不过真是这样的吗?Are you sure?我们运行一下看看结果:
1700441378
1700441379 实例对象数量:3
[ 上一页 ]  [ :1.70044133e+09 ]  [ 下一页 ]