有時你希望定義一個類成員,使它的使用完全獨立於該類的任何對象。通常情況下,類成員必須通過它的類的對象訪問,但是可以創建這樣一個成員,它能夠被它自己使用,而不必引用特定的實例。在成員的聲明前面加上關鍵字static(靜態的)就能創建這樣的成員。如果一個成員被聲明爲static,它就能夠在它的類的任何對象創建之前被訪問,而不必引用任何對象。你可以將方法和變量都聲明爲static。static
成員的最常見的例子是main( ) 。因爲在程序開始執行時必須調用main() ,所以它被聲明爲static。
聲明爲static的變量實質上就是全局變量。當聲明一個對象時,並不產生static變量的拷貝,而是該類所有的實例變量共用同一個static變量。聲明爲static的方法有以下幾條限制:
◆它們僅能調用其他的static 方法。
◆它們只能訪問static數據。
◆它們不能以任何方式引用this 或super
package com.birdme; public class UseStatic { /** * @param args */ private static int s; public UseStatic(){ System.out.println("Create new Class"); } static { System.out.println("static block initialized"); } public int getStatic(){ return s; } public void setStatic(int i){ s=i; }
public static void main(String[] args) { // TODO Auto-generated method stub UseStatic classA= new UseStatic(); UseStatic classB= new UseStatic(); System.out.println("classA.s="+classA.getStatic()+";classB.s= "+classB.getStatic()); classA.setStatic(10); System.out.println("classA.s="+classA.getStatic()+";classB.s= "+classB.getStatic()); classB.setStatic(classB.getStatic()+10); System.out.println("classA.s="+classA.getStatic()+";classB.s= "+classB.getStatic()); } }
|
下面是該程序的輸出:
static block initialized Create new Class Create new Class classA.s=0;classB.s=0 classA.s=10;classB.s=10 classA.s=20;classB.s=20
|
從結果可以看出類中static塊程序是在類被裝載的時候開始執行。而不是在創建對象的時候執行。
本文轉載自http://developer.51cto.com/art/200611/35011.htm