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