全局變量是一個運行時刻實體,它在程序的整個執行過程中都存在。全局變量占據的存儲區域的使命周期從程序開始在程序終止時結束。 全局變量顯示初始化時,或者未初始化時,在程序映像中有不同的分區:已初始化的全局變量是可執行模塊的一部分。未初始化的全局變量則不是可執行模塊的一部分,只有當定義它們的程序被調用時(即執行時),才分配空間,聲明或定義時並不分配。未初始化的全局變量在運行時被初始化為0。
局部變量也叫自動變量,它聲明在函數快內,作用范圍也在函數快內,不能同一源文件的其它函數使用,也不能其他文件中的函數使用,局部變量存儲在棧中。無論局部變量顯示初始化,或者未初始化,都只有當定義它們的程序快被調用時(及執行時),才分配空間,聲明或定義時並不分配,局部變量不是可執行每模塊的一部分!!除非顯示地局部變量進行初始化,否則,它們的初始值是不確定的。
全局變量沒有聲明在任何一個函數內,作用范圍在程序運行始終存在,能被同一原文件的任何函數使用,
也能被其他文件中的函數使用,但是使用extern關鍵字。方法執行完后,隨之銷毀結束。
全局變量存儲在數據段中。
靜態局部變量用來表示不能被其它文件訪問全局變量和函數。為了限制全局變量/ 函數的作用域,函數或變量前加static使得函數稱為靜態函數。但此處“static”的含義不是指存儲方式,而是只對函數的作用域僅局限於本文件(所以又稱內部函數)。 注意:對於外部(全局)變量,不論是否有static限制,它的存儲區都是在靜態存儲區,生存周期都是全局的。此時static只是起作用域限制作用,限定作用域在本模塊內部。
如果在一個類里面,該類的方法被聲明為靜態的,那么該類就可以直接調用該方法,方法是:(類名).方法( ){ }
例子:
public class change{
public static void changeStr( String str){
System.out.println("a:"+str);
str="welcome";
//this.str = str;
System.out.println("first:"+str);
}
String str = "abc";
public static void main(String[] args) {
String str="1234";
changeStr(str);
System.out.println(str);
}
}
靜態全局變量與全局變量的差別是:前者只能被同一源文件中的函數調用,其它文件中的函數不能調用靜態全局變量。
實例變量是定義在類里面,方法體外邊,包括垃圾回收,只對實例變量起作用。