static关键字

Static称为静态修饰符,他可以修饰类中的成员。被static修饰的成员被称为静态成员,也称为类成员,而不用static修饰的成员称为实例成员。

  实例成员都有自己保存成员的存储空间,而不与其他对象共享,如图

 

如图,所创建的volu1volu2均有各自的存储空间来保存自己的值,而不与其他对象共享。因此若修改了volu1的某个成员变量的值,volu2的成员变量并不受影响,因为这些成员变量各自独立,且存在于不同的内存中。具有此特性的成员变量,java称为实例变量(instance variable)。在以前我们自己所写的代码中,我们想用一个类中的某个方法,都是先创建这个类的对象,再利用对象来调用方法,而无法不通过对象直接去调用方法。具有此特性的方法,java称为实例方法(instance method)。由此可知,实例成员属个别对象所有,彼此之间不能共享。

 

  一.静态变量

   用static修饰的成员变量称为静态变量,静态变量也称类变量。静态变量是隶属于类的变量,而不是属于任何一个类的具体对象。静态变量是一个公共的存储单元,而不保存在某个对象实例的内存空间中,而是保存在类的内存空间的公共存储单元。任何一个类的对象去访问他时,取到的都是同一个相同的数值。同样,任何一个类的对象去修改他时,也都是在对同一个内存单元做操作。静态变量的使用格式有两种:

            类名.静态变量名; (推荐使用)

  对象名.静态变量名;

类中若含有静态变量,则静态变量必须独立于方法之外。

静态变量的所有公共存储空间,所以使用静态变量的一个优点是可以节省大量的内存空间,尤其是大量创建对象时。

二.静态方法

   与静态变量相似,用static修饰符修饰的方法是属于类的静态方法,又称为类方法。而不加static修饰符的方法,是属于某个具体对象的方法。将一个方法声明为static方法有以下几重含义:

     1.它在内存中的代码段将被所有对象所公用,而不是被任何一个对象所专用

     2.由于static方法是属于整个类的,所以他不能操纵和处理某个对象的成员,而只能处理属于整个类的成员,即static方法只能访问static成员变量或者调用static成员方法。或说在静态方法中不能访问实例变量和实例方法。

  3.在静态方法中不能使用this或者super。因为this是代表调用该方法的对象,但现在“静态方法”既然不需要对象来调用,this也自然不应存在在“静态方法”内部。

 静态方法的使用有两种:
    类名.静态方法名();  (推荐使用)

  对象名.静态方法名();

 

如果一个类在被java虚拟机装载运行时,这个类中必须有main()方法。现在有了静态方法的知识后,读者可以理解main()方法的定义了。由于java虚拟机需要在类外调用main(),所以该方法的访问权限必须是public,又因为java虚拟机运行时系统在开始执行一个程序之前,并没有创建main()方法所在类的一个实例对象,所以他只能通过类名来调用main()方法作为程序的入口,因而方法必须是static的。

 

三.静态初始化器

   静态初始化器是由关键字static修饰的一对花括号“{}”括起来的语句组,他的作用与类的构造方法有些相似,都是用来初始化工作的,但静态初始化器与构造方法有几点根本的不同。

 (1)构造方法对每个新创建的对象初始化,而静态初始化器是对类自身进行初始化。

 (2)构造方法是在用new运算符创建新对象时由系统自动执行,而静态初始化器一般不能由程序来调用,他是在所属的类被加载入内存时由系统调用执行。

 (3)用new运算符创建多少个新对象,构造方法就被调用多少次,但静态初始化器则在类被加载入内存时只执行一次,与创建多少个对象无关。

 (4)不同于构造方法,静态初始化器不是方法,因而没有方法名、返回值和参数

 

  如下图

   Static        //类初始化器

{

   Num=100;

   System.out,println(静态初始化器被调用了,num的初值为+Num);

}

 

总之,静态初始化器的作用是对整个类完成初始化操作,包括给static成员变量赋初值,它在系统向内存加载时自动完成。

你可能感兴趣的:(Java)