Java關鍵字之static的典型用法分析

static關鍵字是java中很是重要的一個關鍵字,用的好的話能夠提升程序的運行性能,優化程序結構。接下來咱們來總結
一下static關鍵字及其用法。
1.static變量
static變量也稱做靜態變量,靜態變量爲所屬類的成員所共享,靜態變量只會有一份,而不是每一個實例都有本身的一份。
在靜態方法中和非靜態方法中均可以直接引用靜態變量,而非靜態變量則不可能在靜態方法中直接引用,好比咱們最多見的
main()方法,咱們來看一下如下的code:java

package com.ab.main;

/**
 * @author 
 *
 */
public class StaticTest {

    private int m = 0;
    private static int Count = 0;
    
    public StaticTest() {
        Count++;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println("Count: "+Count);
        //System.out.println("m value is: "+m);
        //error:不能對非靜態字段 m 進行靜態引用
        
        StaticTest Static1 = new StaticTest();
        System.out.println("這是第"+Static1.Count+"次初始化");
        
        StaticTest Static2 = new StaticTest();
        System.out.println("這是第"+Static2.Count+"次初始化");
                
        Static1.testStatic1();
        
        testStatic2();

    }
    
    public void testStatic1(){
        System.out.println("m value is: "+m);
        System.out.println("count value is: "+Count);
    }
    
    public static void testStatic2(){
        //System.out.println("m value is: "+m);
        //error:不能對非靜態字段 m 進行靜態引用
        System.out.println("count value is: "+Count);
    }

}

其中在靜態的main()方法中能夠直接引用靜態變量Count,可是不能引用非靜態變量m,要否則會報error:
不能對非靜態字段 m 進行靜態引用
靜態變量每一個類一個,而實例變量爲每一個對象一個,靜態變量能夠節約內存。
靜態變量是在類被加載的時初始化,如以上代碼所示,Count只在加載時候初始化一次,new對象後Count加1,
再次new對象的時候,Count不在初始化,就在1的基礎上再加1變爲2,以上代碼的count部分輸出爲:
這是第1次初始化
這是第2次初始化
而若是把private static int Count = 0;改成private int Count = 0;的話輸出結果爲:
這是第1次初始化
這是第1次初始化
每次new的時候從新初始化爲0,而後再加1
此外還有一個經常使用的用法是和final配合使用,好比public static final double PI = 3.141592653589793;
咱們知道final變量表明你不能改變它的值,就是常數的定義,通常都是大寫字母。函數

2.static方法
靜態的方法能夠直接調用而不須要堆上的實例,也就是能夠直接用類的名稱調用,而不是用對象引用變量,好比在
最多見的入口函數main()就是典型的public static void main(String[] args)靜態方法,若是還有定義爲static
的方法,好比code中的public static void testStatic2()咱們就能夠在main中直接testStatic2();調用,而要
調用public void testStatic1()這個非靜態方法的話,則須要new一個實例出來StaticTest Static1 = new StaticTest();
靜態方法不能直接存取非靜態的變量,能夠直接調用靜態變量性能

3.static代碼塊
static還有一個做用就是用來造成靜態代碼塊以優化程序性能。static塊能夠置於類中的任何地方,
類中能夠有多個static塊。
在類初次被加載的時候,會按照static塊的順序來執行每一個static塊,而且只會執行一次。
爲何說static塊能夠用來優化程序性能,是由於它的特性:只會在類加載的時候執行一次。
4.static import
這是Java 5.0的新功能,import static ...以後調用的時候直接使用方法名調用,就好像是該類本身的方法同樣。優化

總結
static是java中很是重要的一個關鍵字,主要有四種用法:spa

用來修飾成員變量,將其變爲類的成員,從而實現全部對象對於該成員的共享;
用來修飾成員方法,將其變爲類方法,能夠直接使用「類名.方法名」的方式調用;
靜態塊用法,將多個類成員放在一塊兒初始化;
靜態導包用法,將類的方法直接導入到當前類中,更加方便。code

相關文章
相關標籤/搜索