-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();
     }
     
}
相关文章
相关标签/搜索