静态属性
- 语法定义
- 权限修饰符 static 数据类型 属性名称
- public static int age;
- 使用方法
- 引入静态属性的意义
- 静态属性特点
- 声明为static的属性也被成为类属性
- 当创建一个对象时,并不产生static属性的拷贝
- 该类所有的实例共享一个static属性
- 在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间
- 静态属性属于类而不属于对象,为不同的对象所共用
- 静态属性值一旦改变,所有类的对象均共享改变
- 对静态属性的初始化不用构造方法
静态方法
- 语法
权限修饰符 static 返回值类型 方法名 (参数列表){ }
public static void main(String[] args) { } - 使用方法 类名.方法名(实参列表)
- 作用:访问静态属性(属性一般为私有)
- 规则:
- 仅能直接调用其他的static类型的方法
- 只能访问static类型的属性
- 不能以任何方式使用this 或 super
- 特点:不调用就不执行(static方法独立于任何实例,因此static方法必须被实现,而不是抽象的)
- java的类库中大量的静态方法(Math等)
静态代码块
- 静态属性的初始化比较简单时,可以在属性定义时进行。如果初始化过程相对比较复杂时,需要用到静态代码块
- 语法
static {
代码块
} - 功能:初始化静态变量(显式的静态变量初始化)
- 特点:仅在该类被加载时执行一次(只执行一次)
- 涉及到继承的时候,会先初始化父类的static代码块,然后是子类 代码块
- 顺序
- 父类的静态代码块
- 子类的静态代码块
- 父类的构造方法
- 子类的构造方法
扩展
- 对比
- 静态代码块
static {
方法体
} - 非静态代码块
{
方法体
}
- 执行顺序
- 静态属性和静态代码块(按照定义顺序,在类被加载的时候只执行一次)
- 非静态属性和非静态代码块(按照定义顺序,在类被实例化的时候执行)
- 构造方法
静态类
- 通常一个普通类是不允许声明为静态的,只有一个内部类才可以
- 声明为静态的内部类可以直接作为一个普通类来使用,不需要实例化一个外部类(可以直接在声明的类里面实例化内容,不用实例化外层的类)
枚举(enum)
- 枚举的本质就是一个class
public enum Color {
RED,GREEN,BLUE,YELLOW;
}
- 枚举的成员就是枚举对象,只不过他们是静态常量(也是变量)
- 枚举可以添加构造方法
- 枚举不可以实例化(编译器会自动为其构造放啊加上private)
- 通只为枚举提供get方法,而不提供set方法
- 枚举中不允许用 = 赋值
- 可以继承接口,不能继承类
- 枚举特点:数值稳定,个数有限