to wangsheng1028(java菜) 堆栈到底是指堆还是栈?这个说法应该是指stack就是栈了,我觉得类的实例变量和方法的局部变量都是放在栈也就是stack中的,只有动态的内存分配,比如new一个对象是在heap上的.类的实例变量之所以会被赋值是因为类有一个初始化过程<init>,这个方法将实例变量初始化,而方法的局部变量是不会被初始化的
我怎么觉得那个 int b;应该放在puts方法前面啊,难道可以在还没声明变量前就使用变量吗? 我是初学,请大虾不要见怪,请多多指教。。
to magicfire 我刚看完关于初始化的章节。生成一个对象后先要完成对基本类型数据的初始化,有静态变量的要现对静态变量赋值初始化。在调用方法时,一些类成员变量都已经初始化完了。
这些东西都是原理,Think in java里面讲的好像太详细,不知道初学是不是适合。我觉得初学得看几编才行吧?第一次看到这个我基本不知道有什么用,后来才知道一点点。
我的理解,对初学者,最好不要碰这些.在C/C++里这些概念很重要,但JAVA是想把它们屏蔽掉.
但学到后来,需要知道这些,因为在做堆栈操作要快得多,尤其在考虑一些耗时较多的算法时.
类变量放在堆栈中,jvm会将他初始化为默认的值;
而局部变量存放在栈中,方法执行完毕立刻回收,而jvm不做初始化动作,故需要你自己赋值初始化,
不然编译要报错的。
堆栈到底是指堆还是栈?这个说法应该是指stack就是栈了,我觉得类的实例变量和方法的局部变量都是放在栈也就是stack中的,只有动态的内存分配,比如new一个对象是在heap上的.类的实例变量之所以会被赋值是因为类有一个初始化过程<init>,这个方法将实例变量初始化,而方法的局部变量是不会被初始化的
我是初学,请大虾不要见怪,请多多指教。。
我刚看完关于初始化的章节。生成一个对象后先要完成对基本类型数据的初始化,有静态变量的要现对静态变量赋值初始化。在调用方法时,一些类成员变量都已经初始化完了。
值。
主类型默认值
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 里却是错误。
也就是说当你用了这条语句的时候,已经初始化了:test d=new test();