問:靜態變量和實例變量的區別?
在語法定義上的區別:靜態變量前要加static關鍵字,而實例變量前則不加。
在程序運行時的區別:實例變量屬於某個對象的屬性,必須創建了實例對象,其中的實例變量纔會被分配空間,才能使用這個實例變量。
靜態變量不屬於某個實例對象,而是屬於類的,所以也成爲類變量,只要程序加載了類的字節碼,不用創建任何實例對象,靜態變量就會被分配空間,靜態變量也就可以被使用了。
總之,實例變量必須創建實例對象纔可以通過這個對象來使用,靜態變量則可以直接使用類名來引用。
public class VariantTest{
public static int staticVar=0;
public int instanceVar=0;
public VarianTest(){
staticVar++;
instanceVar++;
}
}
對於上面這個程序,無論VariantTest類創建多少個實例對象,靜態變量staticVar只有一份存儲空間,並且每創建一個實例對象,staticVar變量就會加1;但是沒創建一個實例對象,就會創建一個instanceVar變量併爲其分配存儲空間,並且每個instanceVar的值都會加1。
問:是否可以從一個static方法內部發出對非static方法的調用?
不可以
因爲非static方法是要與對象連在一起的,必須創建一個對象之後,纔可以在該對象上進行調用,而static方法調用時不需要創建對象,可以直接調用。
也就是說,當一個static方法被調用時,可能沒有創建任何實例對象,如果從一個static方法中發出對非static方法的調用,那個非static方法是要關聯到哪個對象上呢?