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修饰的成员变量,不管类的实例有多少个,这个变量永远只有一个,对变量的操作永远都属于同一块内存资源。