意思就是,如果i不是static,那么调用应该是new B().i
如果i是static,那么B.i就可以。

解决方案 »

  1.   

    static分配的内存和non static分配的内存是不一样的
    看TIJ最好搭配看Inside C++ Object Model
    比较容易知其所以然
      

  2.   

    楼主要再回去好好看看书了,
    在TIJ中谈这个地方也比较详细,
    在java中一般用户定义的类系统分配的内存在堆中(heap),
    而static的变量分配的内存在静态内存区,
    这个是不同的,
     zhonghua2003(爱我中华)说的很对。
      

  3.   

    但访问static成员和方法是直接访问的,不是通过对象的,请解释一下好吗?我还没看tij,以后会看的
    static 是静态类型的,注意这点就可以了
      

  4.   

    如果把‘=’读做属于的话,则以下是正确的;
    static成员=类,
    非static成员=具体对象;
    你可以通过类来访问static成员;like this:
        Integer.valueOf("1");
    也可以象这样:
        new Integer.valueOf("1");
    但后者其实只是一种语法上的计巧;
    每个具体对象并不能看见该类的static成员,因为它只属于类;这种情况下仍是通过其类来访问的。
      

  5.   

    后来又看下去,发现后来又补充了一句,它说“static 成员的初始化发生在第一次创建这个类的对象时,或是第一次访问这个类的static 的成员的时候(即便没有创建过那个类的对象)。所以他前面说的”如果没有创建B对象,你就永远不可能用到B.i和B.a1“是不正确的,因为他忽略了后一种情况。(对吗?)
      

  6.   

    上面说的基本都函盖了。基本可以如下总结:
      static 的意义:
      1。该声明变量是类变量而不是实例变量。
      2。static声明的静态类变量是在第一次创建类或者第一次直接引用时进行初始化的,
        而且只初始化一次。
      3。static 和static final的区别。static在初始化后还可以修改值。
      

  7.   

    如果没有创建B对象,你就永远不可能用到B.i和B.a1...”。
    -->照它这么说,B.i这种形式会创建B的对象,对吗?如果对,(那有对象就有该对象的this指针),但访问static成员和方法是直接访问的,不是通过对象的,请解释一下好吗?A:
    在这个程序中没有创建类B,类B中的静态变量在程序运行前(类加载器)创建,
    所以a1对象(类B中的静态变量)先创建
    然后才是Test创建
    然后才是Test.main
      

  8.   

    static变量和方法,不需要创建对象。static变量和方法不以该类是否实例化而存在。比如Integer.parseInt()这样的方法。也许方法你能理解,那变量一样。static变量还有这个特性,不管你创建了多少实例,这些实例的static变量用的是同样的地址。可以做以下试验:
    class A{
     static int i=1;
     int count=3;
    }
    public class Test{
          public static void main(String args[])
          {
             A testA1 = new A();
             A testA2 = new A();
             System.out.println("TestOne:"testA1.i+"!"+testA2.i+"!"+A.i); //
             System.out.println("Test:"testA1.count+"!"+testA2.count+"!"+A.count); //应该会报错的!
             testA1.i = 520;
             System.out.println("TestTwo:"testA1.i+"!"+testA2.i+"!"+A.i+"!"); //
             testA1.count = 1313;
             System.out.println("Test:"testA1.count+"!"+testA2.count+"!"); 
             
           }
    }最主要要多做试验,牛人都是这样出来的
      

  9.   

    楼主考试完了吧,考的如何撒,
    应该明白了吧,
    所谓的创建对象和不创建对象的区别就是
    如果是non-static的函数,如果此对象没有new一个出来,(注意是在heap中)
    则在内存中就不存在这个函数的入口,
    所以你没有办法执行它,
    而static类型的就会在静态存储区当中存在。
    这就是最跟本的区别。