static和类变量与对象初始化加载时机

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)可以为实例变量(非静态的属性)初始化

    当多个构造器中共同的初始化部分会提取到构造块中

静态代码块

   

随着类的加载而加载,只执行一次
静态代码块优先于构造块执行
可以为类变量(静态的属性)初始化
在静态代码块中不能访问非静态成员

加载时机:

猜你喜欢

转载自blog.csdn.net/weixin_43549578/article/details/83904180