为什么写static这么详细,因为涉及到的点很多而且我没好好学
static十分重要,与类、方法、变量与内存机制等等息息相关

静态变量

  1. 显然静态变量是存储于栈中,运行时jvm为其分配一次内存
    在加载类时完成内存分配
  2. 静态变量可以被类的所有实例共享

    静态方法

  3. 静态方法通过类直接调用,无需生成实例,例如:
    Collections.reserve(arrayList);
    或者同样ServerSocketChannel.open();

  4. 静态方法无法使用this、super,其与实例相关
  5. 静态方法能直接访问其他静态方法、静态变量

    静态代码块

    注意静态方法、构造方法、构造块、静态代码块(以及同步代码块,但是这里不赘述)的区别
    只有后三者是未调用时就会触发
    ①触发顺序为:
    静态代码块/变量(父)==> 静态代码块/变量(子)==>
    构造代码块(父)==> 构造方法(父)==>
    构造代码块(子)==> 构造方法(子)
    其中静态变量和静态方法按照正常顺序执行

    ②触发条件为:
  • 静态代码块/变量:类加载时则触发,仅加载时触发一次
  • 构造代码块:实例生成一个对象进行一次触发,可多次触发
  • 构造方法:同构造代码块
  • 父子类:子类的静态代码块加载则触发,构造代码块与方法需生成子类对象才触发(会先构造父类)

    静态类

    静态类只涉及到静态内部类,见内部类知识点:https://www.yuque.com/u28616837/ygvd76/me11pe