Topic: JAVA编程思想中的程序,有些问题

  Print this page

1.JAVA编程思想中的程序,有些问题 Copy to clipboard
Posted by: king_wjb
Posted on: 2005-12-26 10:50

在JAVA编程思想第四章有这么一段代码:

class Chair {
static boolean gcrun = false;
static boolean f = false;
static int created = 0;
static int finalized = 0;
int i;
Chair() {
i = ++created;
//%%%%%%System.out.println(created);
if(created == 47)
System.out.println("Created 47");
}
protected void finalize() {
if(!gcrun) {
gcrun = true;
System.out.println(
"Beginning to finalize after " +
created + " Chairs have been created");
}
if(i == 47) {
System.out.println(
"Finalizing Chair #47, " +
"Setting flag to stop Chair creation");
f = true;
}
finalized++;
if(finalized >= created)
System.out.println(
"All " + finalized + " finalized");
}
}

public class Garbage {
public static void main(String[] args) {
if(args.length == 0) {
System.err.println("Usage: \n" +
"java Garbage before\n or:\n" +
"java Garbage after");
return;
}
while(!Chair.f) {
new Chair();
new String("To take up space");
}

System.out.println(
"After all Chairs have been created:\n" +
"total created = " + Chair.created +
", total finalized = " + Chair.finalized);
if(args[0].equals("before")) {
System.out.println("gc():");
System.gc();
System.out.println("runFinalization():");
System.runFinalization();
}
System.out.println("bye!");
if(args[0].equals("after"))
System.runFinalizersOnExit(true);
}
}

正常情况下输出为:
Created 47
Beginning to finalize after 3957 Chairs have been created
Finalizing Chair #47, Setting flag to stop Chair creation
All 32882 finalized
After all Chairs have been created:
total created = 32883, total finalized = 32882
gc():
All 32883 finalized
runFinalization():
bye!

但是我在打%的地方增加一行代码后(去掉注释),出现如下结果:
...
61781
61782
61783
61784
61785
Finalizing Chair #47, Setting flag to stop Chair creation
All 61785 finalized
61786
After all Chairs have been created:
total created = 61786, total finalized = 61785
gc():
All 61786 finalized
runFinalization():
bye!

请问这是怎么回事?


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923