面向对象编程知识点整理2
一、static关键字
static,译为静态。
一个类的成员包括:变量、方法、构造方法、代码块和内部类,static可以修饰除了构造方法外的所有成员。
使用static修饰的成员称为静态成员,是属于某个类的。而不使用static修饰的成员为实例成员,是属于该类的每个对象的。
1 static变量
static修饰的成员变量为静态变量,也叫类变量。类变量的声明周期和类相同,在整个应用程序执行期间都有效。
-
静态变量的特点
- 为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时显示初始化。
- 对于该类的所有对象来说,static成员变量只有一份,被该类所有对象共享。
- 一般用“类名.类属性/方法”来调用。
- 在static方法中不可直接访问非static的成员。
静态变量和非静态变量的区别
- 份数不同:静态变量只有一份,为该类的所有实例对象共享。非静态变量每个实例对象都有一份。
- 存储的位置不同:静态变量存储在方法区(也叫元空间)内,非静态变量存储在堆内存中。
- 分配内存空间的时间不同:静态变量在类第一次被加载时分配空间,非静态变量在对象创建时分配空间。
- 生命周期不同:静态变量声明周期与类相等,非静态变量声明周期与所属对象相等。
- 调用方式不同:静态变量可以通过“类名.变量名”调用,也可以通过“对象名.变量名”调用。(推荐使用“类名.变量名”,因为静态变量只有一份,为所有该类创建的对象共享。)而非静态变量只能通过“对象名.变量名”调用。
2 static方法
-
static方法的作用
- 访问static变量和static方法 static方法的调用方式
- 可以使用“类名.方法名()”调用,也可以使用“对象名.方法名()”调用。但是推荐使用第一种方式,因为static方法不依赖于对象,所以调用时可能并没有创建对象。 不可以
- 静态方法不可以访问非静态变量
- 静态方法不可以访问非静态方法
- 静态方法不可以使用this关键字
个人理解:因为在静态方法不依赖于对象,所以调用静态方法时也许并没有创建对象,非静态