static关键字概述
static关键字的概述
* 是一个修饰符。
* 一般用来修饰成员变量,成员方法以及代码块
* static修饰的成员变量和成员方法不再属于对象,而是属于类。可以被该类的所有对象共享。
成员变量的分类
* 静态成员变量或类变量:被static修饰的成员变量
* 非静态成员变量或实例变量:没被static修饰的成员变量
静态成员变量和非静态成员变量的区别
* 语法的区别
* 静态成员变量:被static修饰的成员变量
* 非静态成员变量:没被static修饰的成员变量
* 数量的区别
* 静态成员变量:在内存中只有一份,被类的所有对象共享。
* 非静态成员变量:每创建一个对象都会为该成员变量分配内存空间,每一个对象都有自己的一份,互补干扰。
* 访问方式的区别
* 静态成员变量:可以通过对象名访问,也可以通过类名访问(强烈推荐使用)
* 非静态成员变量:只能通过对象名方法。
* 生命周期的区别
* 静态成员变量:跟随类的加载而创建并初始化,跟随类的销毁而销毁。
* 非静态成员变量:跟随对象的创建而创建并初始化,跟随对象的销毁而销毁。
什么时候可以使用static修饰成员变量?
* 当该成员变量的值需要在该类的所有对象之间共享时,则应该定义为静态成员变量。
静态方法和非静态方法的区别
* 静态方法:可以通过对象名访问,可以通过类名调用(推荐使用)
* 非静态方法:只能通过对象名调用
静态方法的注意事项
* 静态方法中不能使用this和super关键字。
* 静态方法中不能访问非静态成员:非静态成员变量和非静态成员方法
* 非静态方法中可以访问静态方法:静态成员变量和静态成员方法。
什么时候应该将该方法定义为静态方法?
* 当该方法内部不需要访问任何的非静态成员:非静态成员变量和非静态成员方法,就可以考虑定义为静态方法。
* 定义工具类时,工具类中的方法一般都是静态方法。