1、static
1-1 引入
有一个学生类,字段包括姓名,性别,年龄,所属班级;假设有一组同学在同一个班,那么在实例化对象时,每个对象中改字段的值都是一样的,难免会浪费,因为班级是该组同学共享的。
在java中,有static关键字,被static修饰的成员,成为静态成员,也可以成为类成员,其不属于某个具体的对象,而是所有对象所共享的。
1-2 static修饰成员变量
被static修饰的成员变量,称为静态成员变量。
静态成员变量:
-> 不属于某个具体的对象,是类的属性,所有对象共享的,不存在于某个对象的空间中
-> 类变量存储在方法区当中
-> 一般使用类名来访问
1-3 static修饰成员方法
同样的,静态方法不依赖与对象,是类的方法,不是某个对象特有的。
静态方法:
-> 不属于某个具体的对象,是类的方法
-> 一般通过 类名.静态方法名 来调用
-> 静态方法中,不能直接访问非静态的数据。
在类方法中可以提供对象的引用来访问非静态成员,实例化对象或者参数传递均可。
1-4 static成员变量初始化
【一般不放在构造方法中,因为构造方法中初始化的是与对象相关的实例属性】
-> 就地初始化:在定义时直接给出初始值
-> 静态代码块初始化
2、代码块
2-1 普通代码块
也称本地代码块,定义在方法中的代码块
2-2 构造代码块
也称实例代码块。定义在类中的代码块(无修饰符)。一般用于初始化实例成员变量。
类内部,方法的外部。
2-3 静态代码块
![](https://img-blog.csdnimg.cn/369d2310e87042a688d2387551b09482.png)
代码块的执行顺序:静态 -> 实例 -> 构造
-> 静态代码块,不论生成多少个对象,都只会执行一次;
-> 如果有多个静态的,看定义的先后次序;
-> 没有实例化对象只会执行静态的;
-> 实例代码块在创建对象时才会执行;
-> 最后执行构造代码块