面試題:java實例變量,局部變量,類變量
一、實例變量
也叫對象變量、類成員變量;從屬於類由類生成對象時,才分配存儲空間,各對象間的實例變量互不幹擾,能通過對象的引用來訪問實例變量。但在Java多線程中,實例變量是多個線程共享資源,要註意同步訪問時可能出現的問題。
[java] view plain copy
- <span style="font-size:14px;">public class Demo {
- //以下都是實例變量(成員變量、對象變量)
- private String nameString;
- public int age;
- protected int priority;
- //實例方法
- public String getNameString(){
- return this.nameString;
- }
- }</span>
二、類變量
也叫靜態變量,是一種比較特殊的實例變量,用static關鍵字修飾;一個類的靜態變量,所有由這類生成的對象都共用這個類變量,類裝載時就分配存儲空間。一個對象修改了變量,則所以對象中這個變量的值都會發生改變。
[java] view plain copy
- <span style="font-size:14px;">public class Demo {
- //類變量(靜態變量)
- public static int a = 0;
- //實例變量
- private String nameString;
- }</span>
三、局部變量
方法中或者某局部塊中聲明定義的變量或方法的參數被稱為局部變量,他們只存在於創建他們的block裏({}之間)無法在block外進行任何操作,如讀取、賦值。在Java多線程中,每個線程都復制一份局部變量,可防止某些同步問題發生。
[java] view plain copy
- <span style="font-size:14px;"> //類變量(靜態變量)
- public static int a = 0;
- //實例變量
- private String nameString;
- public void test(){
- //局部變量
- int temp = 1;
- System.out.println(temp);
- }</span>
四、他們的區別
成員變量和局部變量的區別
成員變量:
①成員變量定義在類中,在整個類中都可以被訪問。
②成員變量隨著對象的建立而建立,隨著對象的消失而消失,存在於對象所在的堆內存中。
③成員變量有默認初始化值。
局部變量:
①局部變量只定義在局部範圍內,如:函數內,語句內等,只在所屬的區域有效。
②局部變量存在於棧內存中,作用的範圍結束,變量空間會自動釋放。
③局部變量沒有默認初始化值
在使用變量時需要遵循的原則為:就近原則
首先在局部範圍找,有就使用;接著在成員位置找
成員變量和靜態變量的區別
1、兩個變量的生命周期不同
成員變量隨著對象的創建而存在,隨著對象被回收而釋放。
靜態變量隨著類的加載而存在,隨著類的消失而消失。
2、調用方式不同
成員變量只能被對象調用。
靜態變量可以被對象調用,還可以被類名調用。
3、別名不同
成員變量也稱為實例變量。
靜態變量也稱為類變量。
4、數據存儲位置不同
成員變量存儲在堆內存的對象中,所以也叫對象的特有數據。
靜態變量數據存儲在方法區(共享數據區)的靜態區,所以也叫對象的共享數據。
面試題:java實例變量,局部變量,類變量