這一節我們看一看成員變量與靜態變量的區別所在。
什么是靜態變量呢?我們上節用static關鍵字時就提到了靜態變量。也就是說用static關鍵字修飾的變量就是靜態變量。
我們在6.4節學習了成員變量與局部變量的區別,這一節我們重點看看成員變量與靜態變量之間的區別。
我們看代碼:
~~~
class Person
{
String name;//姓名,這是一個成員變量
static String country = "中國";//國籍,這是一個靜態變量
public void printInfo()
{
System.out.println(name+":"+country);
}
}
~~~
上面的代碼中我們可以看到變量name是一個成員變量,而country是一個靜態變量,用static關鍵字修飾。
這里我們通過上一節static關鍵字的特點和成員變量的特點我們總結四個方面的區別:
**1.兩個變量的生命周期不同:**
成員變量:隨著對象的創建而存在,隨著對象的被回收而釋放。
靜態變量:隨著類的加載而存在,隨著類的消失而消失。
那么類什么時候消失呢?一般情況下,虛擬機結束了,類就結束了,當然這只是說一般情況下。
**2.兩個變量的調用方式不同:**
我們來看一個上面代碼的測試:
~~~
class StaticTest
{
public static void main(String[] args)
{
Person p = new Person();
p.name = "小強";
String name = Person.name;
System.out.println(p.country+"--"+Person.country);
}
}
~~~
結果:

我們可以看到直接用類名來調用成員變量就會出現“無法從靜態上下文中訪問非靜態變量”的錯誤。
當我們把這名話注釋之后再來運行:
~~~
class StaticTest
{
public static void main(String[] args)
{
Person p = new Person();
p.name = "小強";
//String name = Person.name;
System.out.println(p.country+"--"+Person.country);
}
}
~~~
結果:

程序正常運行并合法訪問,所以我們可以總結出下面的區別:
成員變量:只能被對象調用。
靜態變量:既可被對象調用,也可被類調用。上一節我們就已經學習了static修飾的成員可以直接用類名調用。
**3.兩個變量的別名不同:**
成員變量:又稱為實例變量。
靜態變量:又稱為類變量。
**4.兩個變量的存儲位置不同:**
成員變量:存儲在堆內存中的對象中,所以也叫對象的特有數據。
靜態變量:存儲在方法區(共享數據區)的靜態區中,所以也叫類的共享數據。
- 前言
- 1.1 基本常識
- 1.2 Java語言概述
- 1.3 Java語言的環境搭建
- 1.4 Java程序開發之初體驗--Hello World
- 2.1 關鍵字
- 2.2 標識符
- 2.3 注釋
- 2.4 常量
- 2.5 進制掃盲
- 2.6 變量和數據類型(1)
- 2.7 變量和數據類型(2)
- 2.8 運算符
- 3.1 if語句
- 3.2 switch語句
- 3.3 while和do-while語句
- 3.4 for語句
- 3.5 for循環的嵌套
- 3.6 break語句與continue語句
- 4.1 函數的定義
- 4.2 定義函數的兩個明確
- 4.3 函數的內存加載過程
- 4.4 函數的重載
- 5.1 數組的定義
- 5.2 數組的內存分配及特點
- 5.3 數組操作中常見問題
- 5.4 數組常用操作(1)
- 5.5 數組常用操作(2)
- 5.6 二維數組
- 6.1 面向對象的概述
- 6.2 類與對象的關系
- 6.3 對象的內存體現
- 6.4 成員變量與局部變量
- 6.5 類類型參數與匿名對象
- 6.6 基本數據類型參數與引用數據類型參數的傳遞過程
- 6.7 封裝
- 7.1 構造函數概述與默認構造函數
- 7.2 構造函數與一般函數的區別
- 7.3 構造函數的重載
- 7.4 構造函數的內存加載
- 7.5 構造函數需要注意的幾個細節
- 7.6 this關鍵字的原理
- 7.7 this關鍵字的細節與應用
- 8.1 static關鍵字之特點
- 8.2 成員變量與靜態變量的區別
- 8.3 static關鍵字使用的注意細節
- 8.4 main函數的解析與細節
- 8.5 static關鍵字的使用場景
- 8.6 靜態的內存加載
- 8.7 靜態代碼塊
- 8.8 構造代碼塊
- 9.1 繼承
- 9.2 單繼承與多重繼承
- 9.3 子父類中成員變量特征體現