Java面向对象前言
—— static关键字详解
一、 Static关键字的概念
static为“全局”或者“静态”的意思,用来修饰成员变量(类的属性)和成员方法(类的方法),也可以用来修饰代码块。但是在java中没有全局变量的概念,所以在java中static翻译为静态
二、 使用static修饰的特点
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。
当声明多个同一类型的对象时(由同一个类创建的不同对象),并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量,所以说在类中使用static修饰的成员(属性和方法)都是所有对象共享的,也是唯一的。
三、 动态加载和静态加载简介
程序绑定的概念
绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来
动态绑定和静态绑定
静态绑定
在程序执行前方法已经被绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法),此时由编译器或其它连接程序实现。
动态绑定
1.在运行时根据具体对象的类型进行绑定
2. 动态绑定的过程
a) 虚拟机提取对象的实际类型的方法表;
b) 虚拟机搜索方法签名;
c) 调用方法。
四、 Static关键字使用详解
a) 作为修饰符, static可以用来修饰变量、方法、代码块(但绝对不能修饰类)。
修饰变量:
类的所有对象共同拥有的一个属性,也称为类变量。这类似于C语言中的全局变量。类变量在类加载的时候初始化,而且只被初始化一次。在程序中任何对象对静态变量做修改,其他对象看到的是修改后的值。因此类变量可以用作计数器。另外,Java Static变量可以用类名直接访问,而不必需要对象。
修饰方法:
类的所有对象共同拥有的一个功能,称为静态方法。静态方法也可以用类名直接访问,而不必需要对象。所以在静态方法里不能直接访问非静态变量和非静态方法,在Static方法里不能出现this或者super等关键字。
修饰Java代码块:
用static去修饰类里面的一个独立的代码块,称为静态代码块。静态代码块在类第一次被加载的时候执行,而且只执行一次。静态代码块没有名字,因此不能显式调用,而只有在类加载的时候由虚拟机来调用。它主要用来完成一些初始化操作。
五、 Static在使用时的限制
a) 它们仅能调用其他的static 方法。
b) 它们只能访问static数据。
c) 它们不能以任何方式引用this 或super。
六、 总结
a) static成员是不能被其所在class创建的实例访问的。
b) 如果不加static修饰的成员是对象成员,也就是归每个对象所有的。
c) 加static修饰的成员是类成员,就是可以由一个类直接调用,为所有对象共有的。