在1中,I只能在MAIN方法内部用,而且每次调用它都等于十
在2中,I是静态变量,这种静态变量只初始化一次,如果虚拟机或者服务器不关闭,你改变一次它的值,它就保存这个值,如果在1中,你改变后,再调用I,它的初始值还是十.同时,如果你这个类中有别的方法,那么它中也可以调用这个类,而I的值由于是静态的,所以每个方法都会改变它的值,他们可以互相影响.

解决方案 »

  1.   

    你说的是。
    不过我再在I。II后面分别加一句
    Ststem.out.println(i);
    而结果都是一样的
    都为10
    ???????
      

  2.   

    1和2结果都为:
    i:10
    i+10:1010
    这里看不出静态成员字段和非静态成员字段的区别
    把程序的main函数改动一下:
    1、
    public class Class
    {
        static int i=10;
        void f()
        {
         i++;
         }
        public static void main(String[] args)
      {
        Class one,two;
        one = new Class();
        two = new Class();
        one.f();
        System.out.println("two.i:"+two.i);
        
      }
    }
    2、
    public class Class
    {
        int i=10;
        void f()
        {
         i++;
         }
        public static void main(String[] args)
      {
        Class one,two;
        one = new Class();
        two = new Class();
        one.f();
        System.out.println("two.i:"+two.i);
        
      }
    }
    1的结果为two.i:11
    2的结果为two.i:10
    可见,static关键字使成员字段和类联系起来和不是和对象联系起来,对static成员字段的修改会影响到整个类的所有成员。
    还要注意的一点就是:
    System.out.println("i+10:"+i+10);
    中"i+10:"+i+10
    由从左到右的结合性,10也要先转换成字符串,然后形成字符串的相加。