大多數過程型語言都有作用域(scope)的概念。作用域決定了在其內定義的變量名的可見性和生命周期。在C、C++和Java中,作用去由花括號的位置決定。在定義域中定義的變量只可用于作用域結束之前。可以正常輸出,但是如果我們交換順序,就會報錯。
實際上以上代碼在C和C++中是合法的,但是在Java中卻不可以這樣寫,編譯器會報告變量x已經定義過。所以,在C和C++里將一個較大的作用域的變量“隱藏”起來的做法,在Java中是不允許的。因為Java設計者認為這樣會導致程序混亂。
Java中:
第一種寫法:先定義了代碼塊局部變量后定義方法局部變量,代碼塊局部變量x只能作用于定義它的代碼塊,也就是說出了代碼塊該x就被銷毀了,所以后來再定義一個方法局部變量是可以的。
第二種寫法:先定義了方法局部變量后定義了代碼塊局部變量,方法局部變量的作用域是整個方法,出了該方法后這個方法局部變量才被銷毀,此例中,在方法局部變量還未被銷毀時就定義了相同名字的代碼塊局部變量,所以被視為重復定義。引用s在作用域的終點就消失了,然而,s指向的String對象仍繼續占據內存空間。Java神奇之處在于有一個垃圾回收器,用來監視new創建的所有對象,并辨別那些不會再被引用的對象。隨后,釋放這些對象的內存空間,以便提供其他對象使用。
上一篇關于linux多進程?
下一篇技術部與研發部有區別嗎?