static 关键字表示“全局”和“静态”的概念。用来修饰成员变量和成员方法,也可以形成静态static代码块,但是在java语言中没有全局变量的概念。
被static修饰的成员变量和成员方法独立于该类的任何对象,不依赖类特定的实例。被类的所有实例共享、static对象可以在任何对象创建之前访问吗,无需任何对象。用public修饰的static成员变量和成员方法本质上是全局变量和全局方法,生成类的对象时,不生成static变量的副本,而是类的所有实例共享一个上static变量(这里是不是就有关线程问题了)。
(2)static变量可以由private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用,但是不能在其他类中通过类名来直接引用。
(3)static修饰的成员变量或者成员方法习惯上被称为静态变量和静态方法,可以直接通过类名来访问。访问语法如下:
*类名.静态成员方法();
  *类名.静态成员变量 
(4)用static修饰的代码块表示静态代码块,当java虚拟机(jvm)加载类时,就会执行该代码块。
下面我们分别来说明:
静态成员变量:
静态成员变量将成为类本身的资源,这是一种特殊的成员变量,即类变量;与之相比通常的成员变量可称为实例变量,让我们看一个例子。【这里大家注意一下我红色标记的地方,它是特殊的成员变量。(这句话的隐含意思,大家想得通吗?反正我想通了哦)】
public class ClassInfo
{
    /*
       成员变量的特性,它都具有
       声明成员变量的时候,若没有初始化,那么会自动赋值;
    */
    public static int number;//类成员变量
    public ClassInfo(){
      number ++;//更新数量
    }
    public void showNumber(){
      System.out.println(number);
    }
}
class ClassInfoDemo
{
    public static void main(String args[]){
      ClassInfo  info1 ;
       info1= new ClassInfo();//生成班级信息实例1
       info1.showNumber();
       System.out.println("**********************");
       System.out.println(ClassInfo.number);//类变量,可以用类名加变量访问
        System.out.println("**********************");
       //生成班级信息实例2
       ClassInfo info2;
       info2 = new ClassInfo();
       info1.showNumber();
       info2.showNumber();
       ClassInfo info3;
       info3 = new ClassInfo();//生成班级信息实例3
       info1.showNumber();
       info2.showNumber();
       info3.showNumber();
    }
}
所以:大家可以看到被static修饰的成员变量,不管类的实例有多少个,这个变量永远只有一个,对变量的操作永远都属于同一块内存资源。
 
原文地址:http://8991120.blog.51cto.com/8981120/1665609