修饰变量
类加载后就会为静态变量在内存中分配唯一的一块存储空间,程序跑起来变量已经可以直接被用了,而普通变量依赖对象,有了对象才可以访问
类比为澡堂子和肥皂,静态变量属于澡堂子,普通变量属于每个人。静态的肥皂有澡堂子就可以用了,而要用普通肥皂需要先创造一个人
静态变量在内存中唯一,所以需要注意修改它的时候考虑其他地方会不会用到
修饰方法
可以直接用类名访问
类方法中不许对象相关的关键字,比如this、super;类方法只能访问静态变量或者方法
修饰代码块
代码块运行时间:
static修饰的变量、代码块不跟随对象的创建而创建,而是在项目启动后就已经创建和运行好,也说明创建对象时不会执行static代码块
普通代码块跟随对象,需要创建对象时才运行,而且在构造函数前运行
每次创建对象都会依次运行代码块和构造函数,而静态代码块只运行一次
执行顺序:
static修饰的代码块、变量 -> 代码块 -> 构造函数
当类中有多个static修饰的变量、代码块时,按代码编写的顺序执行
应用举例:
项目启动后需要线程池处于可用状态,可以用static代码块初始化线程池
想在项目启动的时候做一些事情,比如起个线程,用static修饰
想要在其他类中直接使用某对象,用static创建对象
修饰类
只有一种情况:静态内部类,表现了一种从属关系,可读性高一些
可以访问外部类的静态成员和静态方法,包括了私有的静态成员和方法
静态导入
import处使用static关键字可以将其他类的静态资源直接使用,不用使用类名.资源名的方式
当前类和导入类同时含有某同名资源时,优先用当前类的资源
静态导入的内容在编译的时候填充到了代码中,class文件的头部是没有import的那一行的