static的用法分类
static修饰变量
声明为static的变量实质上就是全局变量。
所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间。
一般来说,使用
类名.static变量
来调用或修改该变量。静态变量用的很少,静态常量使用的比较多,一般是public static final 来定义静态常量。
static修饰方法
好处:无需本类的对象即可调用此方法,直接用
类名.static方法
的方式使用。(当然也可以用本类的对象调用,但是不推荐这么做)限制:static方法内部不能调用非static方法,也不能使用非static数据(这里指的是方法内部,形参除外),不能以任何方式引用this或super。
有两种情况需要使用静态方法:
一个方法不需要访问对象状态,其所需参数都是通过显式参数提供;
一个方法只需要访问类的静态域;
static修饰代码块
- 用static修饰的代码块只会在类进行初始化的时候调用一次,而非static修饰的代码块则是在每次生成对象的时候都进行一次调用。
static修饰内部类
- 普通类不可以用static修饰,只有内部类可以。
- 普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。
- 声明为static的内部类,不依赖于外部类实例而被实例化,不持有外部类的引用。
- 声明为static的内部类,访问外部类的非静态成员(包括非静态变量和非静态方法)。
- 静态内部类只在本外部类范围内可见, 若在其它类中引用或初始化, 均是错误的。