类变量和类方法(static)
- 什么时候需要用类变量
当我们需要让某个类共享同一个变量时,可以考虑将变量设置为类变量 - 类变量和实例变量的区别
类变量是该类的所有对象共享的,而实例变量是每个对象独享的 - 类变量可以通过,类名.类变量 或者 对象.类变量【类变量的访问也需要满足访问权限】
- 实例变量不能通过 类名.变量名 访问
访问修饰符 static 数据返回类型 方法名(){}
static 访问修饰符 数据返回类型 方法名(){}
- 静态方法不允许有this关键词
- 静态方法只能访问静态变量或静态方法
- 普通成员方法可以访问静态变量和静态方法
代码块
- 通过{}两个大括号来包括,修饰符只能为static或者默认。
- 代码块在调用类的时候会隐性执行,先调用代码块的内容再调用构造器
- 是一种对构造器的补充机制
- static 标记的代码块为静态代码块,在类加载时默认执行,只会执行一次。未标注static则表示普通代码块,如果是普通代码块则会在每次创建类的时候就执行,但是使用类的静态成员时,普通代码块不会执行。
- 类什么时候会被加载?
- 创建对象实例的时候(new)
- 创建子子类对象实例,父类也会被加载
- 使用类的静态成员的时候(静态属性,静态方法)也会进行加载
- 创建一个对象时,在一个类调用的顺序
- 调用静态代码块和静态属性初始化(静态代码块和静态属性初始化调用的优先级相等,如果有多个静态代码块和多个静态属性则按照定义的顺序进行调用)
- 调用普通代码块和普通属性的初始化(优先级相同)
- 调用构造方法
- 如果一个子类继承父类,创建一个子类实例时执行顺序为
- 父类的静态代码块和属性初始化
- 子类的静态代码块和属性初始化
- 父类的普通代码块和属性初始化
- 父类的构造方法
- 子类的普通代码块和属性初始化
- 子类的构造方法