为什么写static这么详细,因为涉及到的点很多而且我没好好学
static十分重要,与类、方法、变量与内存机制等等息息相关
静态变量
- 显然静态变量是存储于栈中,运行时jvm为其分配一次内存
在加载类时完成内存分配 -
静态方法
静态方法通过类直接调用,无需生成实例,例如:
Collections.reserve(arrayList);
或者同样ServerSocketChannel.open();
- 静态方法无法使用this、super,其与实例相关
- 静态方法能直接访问其他静态方法、静态变量
静态代码块
注意静态方法、构造方法、构造块、静态代码块(以及同步代码块,但是这里不赘述)的区别
只有后三者是未调用时就会触发
①触发顺序为:
静态代码块/变量(父)==> 静态代码块/变量(子)==>
构造代码块(父)==> 构造方法(父)==>
构造代码块(子)==> 构造方法(子)
其中静态变量和静态方法按照正常顺序执行
②触发条件为:
- 静态代码块/变量:类加载时则触发,仅加载时触发一次
- 构造代码块:实例生成一个对象进行一次触发,可多次触发
- 构造方法:同构造代码块
- 父子类:子类的静态代码块加载则触发,构造代码块与方法需生成子类对象才触发(会先构造父类)
静态类
静态类只涉及到静态内部类,见内部类知识点:https://www.yuque.com/u28616837/ygvd76/me11pe