java读书笔记----关于java中的static

静态成员是一组比较特殊的成员,它不属于某个特定的类实例。它独立于该类。也就是说它不依赖类特定的实例,而被类的所有实例共享。

       类的静态成员一般可以分为3种:静态成员变量,静态方法,静态代码块。它们都具有以下几个特点:

            1、在类加载的时候,就进行创建和初始化或执行代码;

            2、它们对于一个类来说,都只有一份;

            3、类的所有实例都可以访问到它们;

     1)、静态成员变量

          按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫做静态变量;另一种是没有被static修饰的变量,叫做实例变量。两者的区别在于:

           静态变量在内存中只有一个拷贝,JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配。在访问中一般都是直接通过类名来访问,不建议通过对象来访问。因为静态成员是属于类所有。静态成员变量会在类加载以后进行创建和初始化操作。

         对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。         

     2)、静态方法

           静态方法指的是用static关键字修饰的方法,他可以被对象访问,也可以直接由类名来访问。对于静态方法,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法,只能访问所属类的静态成员变量和静态方法。因为static方法独立于任何实例,因此static方法必须要被实现,而不能是抽象的abstract。

      3)、静态代码块

          静态代码块,是采用static修饰,用大括号“{......}”围起来的代码,这些代码可以使用静态成员变量和静态方法,它们也是在类加载的时候被调用。如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。    

public class StaticTest {

 static int a ;                       //静态成员变量
 static void testMethod(){            //静态方法
  System.out.println("static method.....");
 }
 
 static{                               //静态代码段
  System.out.println("static code");
 }
 public static void main(String[] args) {
  System.out.println(a);
  StaticTest sTest = new StaticTest();
  sTest.testMethod();                   //通过对象来访问静态方法
 }
}


     执行得结果如下:

   static code
   0
   static method.....


    分析:

      在StaticTest类中,包含一个静态成员变量a,一个testMethod()静态方法以及一段静态代码块。当执行以上代码的时候,JVM会加载StaticTest类到内存中,然后创建a变量并进行初始化,再执行static代码块。在main()方法中,创建一个staticTest类的实例对象。通过该实例对象来访问静态方法testMethod()。

 

     对于static和final一块用表示什么
     static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
     对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
     对于方法,表示不可覆盖,并且可以通过类名直接访问。


 

         

posted @ 2012-02-13 20:37  IT专业户  阅读(140)  评论(0编辑  收藏  举报