一、static关键字
在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对
象,是所有对象所共享的。
(一)static修饰成员变量
被static修饰的成员变量叫做静态成员变量,静态的成员变量不属于对象。
静态成员变量特性:
- 不属于某个具体的对象,是类的属性,所有对象所共享的
- 既可以通过对象访问,也可以通过类名访问,更推荐后者
- 生命周期伴随类的一生(随类的加载而创建,随类的卸载而销毁)
(二)static修饰成员方法
Java中,被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的。
如果在静态成员方法中调用了非静态的成员变量就会报错,原因是非静态成员变量需要通过对象的引用来调用,而静态成员方法只需要类名就能调用,不依赖于对象。所以结论就是:静态方法中不能调用非静态成员变量或非静态的成员方法!
静态方法中不包含this!
二、代码块
使用 {} 定义的一段代码称为代码块。
(一)代码块分类
根据代码块定义的位置以及关键字,可以分为四种:
- 普通代码块
- 静态代码块
- 构造块
- 同步代码块(此处不讲,后续再谈)
普通代码块
定义在方法中的代码块。用法比较少见
静态代码块
使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量。
class Person{
//成员变量, 定义在方法外部,类内部的变量
public String name;
public int age;
public static String classroom;
//静态代码块
static {
classroom="bit";
System.out.println("这是一个静态代码块!");
}
}
public class Test {
public static void main(String[] args) {
System.out.println(Person.classroom);
}
}
注意事项:
- 静态代码块不管生成多少个对象,其只会执行一次
- 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
- 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
- 实例代码块只有在创建对象时才会执行
构造代码块/实例代码块
构造块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。
它们被执行的顺序是:
静态的先执行,再执行构造块,然后执行对应的构造方法。静态的只执行一次!