这个是java,和c的变量分配机制不一样,c中如果没有分配值给变量而直接使用会出错,在java中,如果没有初始化,每个定义的变量都有一个literal(字面值,默认),这样即使没有初始化再使用也不会出错!
但最好不要这样做,在使用这些变量之前最好初始化!

解决方案 »

  1.   

    a和b是成员变量,在类生成时自动初始化为0,而c是当地变量,没有自动初始化,在使用前需要赋值.
      

  2.   

    楼上说的对,建议看看thinking in java
      

  3.   

    请问helpall:成员变量和当地变量的主要区别在哪里,学好JAVA是不是要把变量在内存的分布弄清楚一点。是不是当地变量放在stack里,成员变量放在heap里,
      

  4.   

    是不是当地变量放在stack里,成员变量放在heap里
    这些东西都是原理,Think in java里面讲的好像太详细,不知道初学是不是适合。我觉得初学得看几编才行吧?第一次看到这个我基本不知道有什么用,后来才知道一点点。
      

  5.   

    当地变量放在stack里,成员变量放在heap里------->
    我的理解,对初学者,最好不要碰这些.在C/C++里这些概念很重要,但JAVA是想把它们屏蔽掉.
    但学到后来,需要知道这些,因为在做堆栈操作要快得多,尤其在考虑一些耗时较多的算法时.
      

  6.   

    类变量和局部变量的内存地址是不一样的;
    类变量放在堆栈中,jvm会将他初始化为默认的值;
    而局部变量存放在栈中,方法执行完毕立刻回收,而jvm不做初始化动作,故需要你自己赋值初始化,
    不然编译要报错的。
      

  7.   

    to wangsheng1028(java菜) 
    堆栈到底是指堆还是栈?这个说法应该是指stack就是栈了,我觉得类的实例变量和方法的局部变量都是放在栈也就是stack中的,只有动态的内存分配,比如new一个对象是在heap上的.类的实例变量之所以会被赋值是因为类有一个初始化过程<init>,这个方法将实例变量初始化,而方法的局部变量是不会被初始化的
      

  8.   

    我怎么觉得那个 int b;应该放在puts方法前面啊,难道可以在还没声明变量前就使用变量吗?
    我是初学,请大虾不要见怪,请多多指教。。
      

  9.   

    to magicfire
    我刚看完关于初始化的章节。生成一个对象后先要完成对基本类型数据的初始化,有静态变量的要现对静态变量赋值初始化。在调用方法时,一些类成员变量都已经初始化完了。
      

  10.   

    为什么我在sun网站下载的j2se jdk不能安装?请众位高手指教!
      

  11.   

    类变量会被默认初始化,故类变量可以不做初始化处理(例如假设int b;b被定义成类变量,那么它将被初始化为0),而局部变量必须做初始化处理,否则compile error
      

  12.   

    基本上应该是类成员变量和局部变量的区别了吧,不知还有何异议。我还是想请教各位高手内存存储问题,是否对初学者学好JAVA有所帮助。
      

  13.   

    若某个主数据类型属于一个类成员,那么即使不明确(显式)进行初始化,也可以保证它们获得一个默认
    值。
    主类型默认值
    boolean false
    char '\u0000'(null)
    byte (byte)0
    short (short)0
    int 0
    long 0L
    float 0.0f
    double 0.0d
    一旦将变量作为类成员使用,就要特别注意由Java 分配的默认值。这样做可保证主类型的成员变量肯定得到
    了初始化(C++不具备这一功能),可有效遏止多种相关的编程错误。
    然而,这种保证却并不适用于“局部”变量——那些变量并非一个类的字段。所以,假若在一个函数定义中
    写入下述代码:
    int x;
    那么x 会得到一些随机值(这与C 和C++是一样的),不会自动初始化成零。我们责任是在正式使用x 前分
    配一个适当的值。如果忘记,就会得到一条编译期错误,告诉我们变量可能尚未初始化。这种处理正是Java
    优于C++的表现之一。许多C++编译器会对变量未初始化发出警告,但在Java 里却是错误。
      

  14.   

    实例化一个对象后,自动对其属性进行初始化了吧。
    也就是说当你用了这条语句的时候,已经初始化了:test d=new test();
      

  15.   

    java中 局部变量 必须 初始化