我想问下执行完了Class1.Count为什么是2,详细解释下谢谢!class Class1{
public static int Count=0;public Class1(){
  Count++;
}
public static void main(String[] args){
  Class1 o1 = new Class1();
  Class1 o2 = new Class2();
 }
}

解决方案 »

  1.   

    你每new一个Class1的对象出来,就要调用一次Class1的构造方法.在构造方法中对静态变量Count做了++运算.
    你new 了两个Class1的对象,Count的值当然是2.
      

  2.   

    但是 new一个对象应该是对静态变量的操作先于构造方法 对public static int Count=0;又将Count赋为0了
    再加不还是1吗
      

  3.   

    Java 静态变量只在 .class 文件被 ClassLoader 加载进来时执行自动的初始化。以后再创建对象时不再自动初始化,除非你在构造方法里面明确的设置 count = 0,否则它还是保持上次的被改动后的值.Java 程序在碰到一个类第一次使用时,大致会做下面几步:
    1.查找 Class 加载. 如果没找到类就抛出 ClassNotFoundException.
    2.解析这个Class,这时会把所有 static 变量初始化,如果有 static {} 初始化块也执行。这个步骤如果出错,会得到 NoClassDefFoundError.
    3.执行你的程序期望的方法,比如静态方法/构造方法。你调用多次静态方法或创建多个对象不会再执行第1步和第2步的。
      

  4.   

    哎是我糊涂了,记错了 是常量会在类加载的时候先于静态代码块,构造器执行 这里的是静态变量 混淆了
    Class1 o2 = new Class2();
    打错了应该是Class1 o2 = new Class1();
      

  5.   

    谢谢3楼解答的很详细,你的意思也就是在一个main()方法里执行了1 2 步骤 下面再new 同一对象时候不会再执行 12 步了对把