以下代码执行后输出结果的第三行是什么? public class Counter { static int count = 0; int id; public Counter() { count++; id = count; } public static void reset() { count = 0; } public static void main(String[] args) { Counter c1 = new Counter(); Counter c2 = new Counter(); Counter.reset(); Counter c3 = new Counter(); System.out.println(c1.id); System.out.println(c2.id); System.out.println(c3.id); } }
答案解析
核心考点:static变量的共享特性与构造函数调用顺序。
解题思路分析:
1. static变量count被所有实例共享
2. 创建c1时count从0→1,id=1
3. 创建c2时count从1→2,id=2
4. 调用reset()将count重置为0
5. 创建c3时count从0→1,id=1
6. 输出顺序:c1.id=1, c2.id=2, c3.id=1
选项分析:
A. 错误:误认为reset()会影响已存在的实例
B. 正确:c3构造时count从0开始累加
C. 错误:未考虑reset()后的重新计数
D. 错误:错误累加所有实例
易错点:容易忽略static变量重置后新建实例的计数会重新开始,而非继续之前的累计值。
正确答案:B