-static

本篇淺析java中static的用法,主要五個方面:靜態成員變量,靜態方法,靜態塊,靜態內部類,靜態導包。java

 

1 靜態變量,靜態方法,靜態塊

   靜態對象,靜態方法都是在原對象和方法上加上static關鍵字修飾,表示類能夠直接調用這些,而不須要實例化後再調用。具備的好處是:
     1--靜態對象的數據是全局惟一的,一改都改,能夠保證數據的惟一性
     2--引用方便,直接用類名.方法(屬性)就能夠了,不用再get和set
  固然靜態方法(變量,塊)也有相應的限制:
    1--不能調用其餘非靜態方法(只能調用static方法)
    2--只能訪問static數據
    3--不能以任何方式引用this或super
  示例代碼:

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public  class  StaticExercise {
     
     public  static  String sky= "jeyson" ;
     
     public  static  String getMySky(String sky){
         return  sky;
     }
     static  {
         System.out.println( "這是靜態塊中的內容--" );
         System.out.println( "靜態塊:" +getMySky(sky));
     }
     /**
      * ***靜態對象好處:
      *    1--靜態對象的數據是全局惟一的,一改都改,能夠保證數據惟一。
      *    2--引用方便,直接類名.方法就好了,不用set和get
      * ***分配空間順序:
      *    先分配靜態對象空間再分配非靜態。初始化順序也是這樣
      * ***static final 修飾的成員變量和成員方法能夠理解爲全局變量(java中沒有全局變量概念)
      * ***靜態對象,方法,塊的限制:
      *    1--只能調用其餘的static方法
      *    2--只能訪問static數據
      *    3--不能以任何方式引用this或super
      * 靜態對象測試
      */
     @Test
     public  void  testStatic1(){
         System.out.println(sky);
         System.out.println( "-----------------" );
         System.out.println(getMySky(sky));
         System.out.println( "-----------------" );
         System.out.println(StaticTest.getSms());
         
     }
}

 2 靜態內部類

     當一個類跟另外一個類(外部類)有緊密的聯繫,通常只有用到外部類的時候纔會用該類的話,能夠將該類做爲靜態的內部類。這樣就能夠隨着類的加載而直接產生。不用再能夠實例化。
     使用方法:隨類一同被加載,調用直接外部類.內部類.靜態對象(方法)
    示例代碼:
 
   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class  StaticTest{
     public  static  String sms= "to my sky" ;
     public  static  String getSms(){
         return  sms;
     }
     /**
      * 靜態內部類
      * ***使用場景:
      *    內部類跟外部類聯繫緊密,通常只有用到外部類的時候纔會用到這個類
      * ***使用
      *    隨類一同被加載,直接外部類.內部類.靜態對象(方法)
      */
     static   class  InnerStatic{
         public  static  final  String MYSKY= "MY FINAL SKY" ;
     }
}

 

1
2
3
4
    @Test
public   void  testStatic2(){
     System.out.println(StaticTest.InnerStatic.MYSKY);
}

  

 2 靜態導包

    若是要用的靜態方法所在的類跟當前類不在同一個包下,能夠使用靜態導包。這樣你想要用的靜態方法或變量就至關於在該類中直接可見,無需再類名.靜態變量的方式調用。
    使用方法:
      import static 包名.類名.靜態成員變量(方法)
    好處:
       被導入的靜態變量和方法在該類中直接可見,直接用
    壞處:
       必定程度上下降了代碼的可讀性
    代碼示例:
1
2
3
4
5
6
public  class  MyStaticImportTest {
     public  static  final  int  number= 55 ;
     public  static  void  getMyWords(){
         System.out.println( "hello ,這是一個靜態導包的測試" );
     }
}

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import  static  com.generic.MyStaticImportTest.number;
import  static  com.generic.MyStaticImportTest.getMyWords;
 
/**
  * @Description:
  *  靜態
  */
public  class  StaticExercise {
     
     /**
      * 靜態導包
      * ***使用方法:
      *   直接靜態導入相應的變量和方法:(import static 包名.類名.靜態成員變量(方法)
      *       import static com.generic.MyStaticImportTest.number;
      *       import static com.generic.MyStaticImportTest.getMyWords;
      * *** 好處:
      *     被導入的靜態方法和變量在這個類中直接可見,無需再給出類名
      * *** 壞處
      *     必定程度上下降了代碼的可讀性
      */
     @Test
     public  void  testStatic3(){
         //靜態導入後能夠直接用
         int  myNumber=number;
         getMyWords();
     }
     
}
相關文章
相關標籤/搜索