Java中,變量分為靜態(tài)變量和非靜態(tài)變量。它們不僅聲明方式不同,而且在使用上也有一些差別。
首先讓我們來(lái)看看靜態(tài)變量,也叫做類變量。靜態(tài)變量定義在類中,但不在方法中,它在整個(gè)程序執(zhí)行期間只存在一份。靜態(tài)變量可以被靜態(tài)方法訪問(wèn),也可以通過(guò)類名直接訪問(wèn)。
public class StaticDemo { static int count = 0; // 靜態(tài)變量 public StaticDemo() { count++; // 每次創(chuàng)建對(duì)象時(shí),計(jì)數(shù)器加1 } public static void main(String[] args) { StaticDemo s1 = new StaticDemo(); StaticDemo s2 = new StaticDemo(); System.out.println(StaticDemo.count); // 2 System.out.println(s1.count); // 2 System.out.println(s2.count); // 2 } }
從上面的例子可以看出,count變量是靜態(tài)變量,每次創(chuàng)建對(duì)象時(shí)都會(huì)自增1,因此最后輸出的count值為2,而s1和s2的count值也都是2。這就是靜態(tài)變量的特點(diǎn),它在整個(gè)程序執(zhí)行期間只存在一份。
下面來(lái)看一下非靜態(tài)變量,也叫做實(shí)例變量。非靜態(tài)變量是定義在類中,但在方法中和靜態(tài)變量一樣,非靜態(tài)變量可以被實(shí)例方法訪問(wèn),而且每創(chuàng)建一個(gè)對(duì)象就會(huì)有一個(gè)新的拷貝。
public class InstanceDemo { int count = 0; // 實(shí)例變量 public InstanceDemo() { count++; // 每次創(chuàng)建對(duì)象時(shí),計(jì)數(shù)器加1 } public static void main(String[] args) { InstanceDemo s1 = new InstanceDemo(); InstanceDemo s2 = new InstanceDemo(); System.out.println(s1.count); // 1 System.out.println(s2.count); // 1 } }
從上面的例子可以看出,每次創(chuàng)建對(duì)象時(shí),實(shí)例變量的值都會(huì)自增1,而s1和s2實(shí)例變量的值是分別獨(dú)立的,所以最終輸出的值是1.
總體來(lái)說(shuō),靜態(tài)變量是與類關(guān)聯(lián)的變量,而非靜態(tài)變量是與實(shí)例關(guān)聯(lián)的變量。在使用上,靜態(tài)變量可以通過(guò)類名直接訪問(wèn),而非靜態(tài)變量必須先生成一個(gè)實(shí)例對(duì)象,才能通過(guò)實(shí)例訪問(wèn)它,這就是兩者的最大差別。