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