1.static修饰的范围
使用范围:在Java类中,可用static修饰属性、方法、代码块、内部类
被修饰后的成员具备以下特点:
随着类的加载而加载
优先于对象存在
修饰的成员,被所有对象所共享
访问权限允许时,可不创建对象,直接被类调用
2.类变量(class Variable)
当static修饰属性时,叫类变量(类属性(class Variable))由该类的所有实例对象共享
3.类方法(class Method)
static修饰方法,是类方法(class Method)
1.没有对象的实例时,可以用类名.方法名()的形式访问由static标记的类方法。
2.在static方法内部只能访问类变量与类方法(类的static属性和静态方法),不能访问类的实例变量和
成员方法(非static属性和方法).
3.因为不需要实例就可以访问static方法,因此static方法内部不能有this。(也不能有super ? YES!)
4.重载的方法需要同时为static的或者非static的。
5.static修饰的方法不能被重写
(重写方法的目的是为了多态,或者说:重写是实现多态的前提,即重写是发生在继承中且是针对非static方法的,多态针对于父子
对象之间的方法调用,而static是类名调用)
bstract修饰方法,子类需要重写去实现,主要用于各个子类的实例对象;
static修饰方法,则方法不属于某个对象,属于class,可用class名.方法名(),进行调用
4.静态与非静态的访问原则(☆)
同一个类中:
(1)直接访问
(2)静态成员中不能访问非静态的成员
非静态成员中可以访问静态成员
不同类中:
(1)访问其他类的静态成员使用“类名.静态成员”的格式
(2)访问其他类的非静态成员使用“对象.非静态成员”的格式
5.类的成员之四:代码块
初始代码块:一般来说是用于类或实例成员变量的初始化,分为静态代码块和非静态代码块(构造代码块)。
构造块
非静态代码块:
随着对象的创建而加载,每创建一个对象,就执行一次
优先于构造器执行
(2)可以为实例变量(非静态的属性)初始化
当多个构造器中共同的初始化部分会提取到构造块中
静态代码块
随着类的加载而加载,只执行一次
静态代码块优先于构造块执行
可以为类变量(静态的属性)初始化
在静态代码块中不能访问非静态成员
加载时机: