首页 > 代码库 > static关键字用法

static关键字用法

java中static关键字可用于修饰:

1.属性:表示该属性变量在类被加载时即被创建并初始化,类加载过程只进行一次,因此静态变量也只被创建一次

2.方法:静态方法为类的公有方法,可直接用‘类名.方法名‘访问,静态方法不可访问本类中的非静态成员,子类不可

将父类的静态方法覆盖为非静态的,反之亦然。此外,静态方法中不能使用this关键字

3.代码块:静态初始化代码块,在类被加载时执行一次,可用于类的初始化

具体实例:

1)下面的例子中,静态变量staticVar,只在类第一次加载时被创建并初始化,以后无论创建多少类对象,该变量都不再

加载,因此每次都在原有基础上增加1,而实例变量instanceVar,只有当创建类对象时才对其进行创建并在构造函数中

加1,每创建一个对象,就对应创建一个instanceVar实例变量。注意:在静态方法中访问instanceVar将报错。

2)UseStatic类中,类加载时初始化顺序为:静态变量-->静态代码块

  1 package com.pattywgm.a_fundamental;  2   3 import org.junit.Test;  4   5 /**  6  *   7  * @author patty  8  * @time 2014-12-4  9  * @todo 考查static关键字的用法 10  */ 11 public class StaticTest { 12       //默认为0 ,可不指定初始值 13      static int staticVar; //静态变量,在类初始化时加载,只加载一次 14      int instanceVar;  //实例变量 15  16      public StaticTest() { 17           staticVar++; 18           instanceVar++; 19           System.out.println("staticVAr= "+staticVar+" instanceVar= "+instanceVar); 20            21     } 22       23      public void doSth(){ 24          System.out.println("Do something..."); 25      } 26       27      public static void doSthStatic(){ 28 //         System.out.println(instanceVar); //不能对非静态字段 instanceVar 进行静态引用 29          System.out.println("Do something static..."); 30      } 31      32     @Test 33     public void testStatic(){ 34           //单元测试会首先创建一个类的对象,然后再调用该测试方法 35           new StaticTest(); 36      } 37      38     public static void main(String[] args){ 39         // StaticTest staticTest;   40          System.out.println(staticVar); //此时还未创建对象,staticVar值未增加,仍为0 41          //每创建一个StaticTest对象,staticVar值增加1,instanceVAr值由0加1 42          StaticTest staticTest1=new StaticTest(); // 43          StaticTest staticTest2=new StaticTest(); 44          StaticTest staticTest3=new StaticTest(); 45          System.out.println("instanceVar(whole) is:"+staticTest3.instanceVar); 46          int instanceVar=200; //局部变量优先 47          System.out.println("instanceVar(local) is:"+instanceVar); 48          System.out.println("staticVar(whole) is:"+staticVar); 49          int staticVar=500; //局部变量优先 50          System.out.println("staticVar(local) is:"+staticVar); 51           52      } 53 } //end StaticTest 54 /** 55  *  56  * @author patty 57  * @time 2014-12-4 58  * @todo 考查static变量/方法/代码块 59  *  类加载时加载顺序为:静态变量,静态代码块,然后才调用静态方法 60  */ 61 class UseStatic{ 62     public static int a=3; 63     static int b; 64      65     static void method(int c){ 66         System.out.println("C: "+c); 67         System.out.println("A: "+a); 68         System.out.println("B: "+b); 69     } 70     //代码块 71     static{ 72         System.out.println("Static block..."); 73         System.out.println("a= "+a+" b= "+b);// 3 0 74         b=a*5; 75         System.out.println("a= "+a+" b= "+b);// 3 15 76     } 77      78     public static void main(String[] args){ 79         method(24); 80         System.out.println(StaticTest.staticVar); //0 81     } 82 }//end UseStatic 83  84 class StaticDemo extends StaticTest{ 85     static int sta; 86     int stb; 87     public StaticDemo() { 88         //super(); 89         sta++; 90         stb++; 91         System.out.println("sta= "+sta+" stb= "+stb); 92     } 93     //此处不可将doSth声明为静态方法,即子类不能以static覆盖父类的非静态方法 94     public void doSth(){ 95         super.doSth(); 96         System.out.println("Sub do something"); 97     } 98     //此处必须加上static修饰符,因为实例方法不能覆盖 StaticTest 中的静态方法 99     public static void doSthStatic(){100         StaticTest.doSthStatic(); //静态方法不可用super关键字,用父类名直接访问101         System.out.println("Sub do something static");102     }103     104     public static void main(String[] args){105         System.out.println("sta= "+sta);106         new StaticDemo().doSth();107         doSthStatic();108     }109 }110 111 ///:output:112 /* StaticTEst113    * testStatic114      staticVAr= 1 instanceVar= 1115      staticVAr= 2 instanceVar= 1116    * main117        0118      staticVAr= 1 instanceVar= 1119      staticVAr= 2 instanceVar= 1120      staticVAr= 3 instanceVar= 1121      instanceVar(whole) is:1122      instanceVar(local) is:200123      staticVar(whole) is:3124      staticVar(local) is:500125      126  *StaticDemo127      sta= 0128      staticVAr= 1 instanceVar= 1129      sta= 1 stb= 1130      Do something...131      Sub do something132      Do something static...133      Sub do something static134  */135 //:~~~
View Code

 

static关键字用法