Java关键字static

static表示静态的或者全局的,只能用来修饰变量、方法或方法块。它表示被修饰的内容在一定范围内是可以共享的。

  1. static修饰变量
    static修饰的变量如果权限为public,表示该变量是所有类共享的,不用初始化该类就能被其他类访问(类名.变量名)。静态变量只会初始化一次,一旦初始化完成无论该类被new出多少对象,静态变量都不会再进行初始化。
    static修饰的变量如果被多个线程同时访问就有可能会出现线程安全问题,如果遇到线程安全问题,可以通过加锁的方式解决。如果静态变量是ArrayList这种非线程安全的集合类型,也可以通过使用线程安全的集合类型代替的方式来解决如:CopyOnWriteArrayList。
  2. static修饰方法
    static修饰方法经常见于各种工具类中,表示该方法可以被其他类直接调用(类名.方法名),调用起来十分方便。
    static修饰的方法只能调用同样被static修饰的方法,使用共享的变量时变量也必须由static来修饰。否则编译报错。
    static方法内部变量是线程安全的,因为方法的数据存储于栈内,方法栈是线程隔离的,所以不会出现线程安全问题。
  3. static修饰方法块
    static修饰的方法块又叫静态块,静态块常用来做一些类加载前的准备工作,如一些变量的初始化,再例如Long中缓存的初始化就是静态块来完成的。静态块中使用的共享变量也同样是要用static来修饰并且必须位于静态块定义之前,否则编译报错。
  4. static修饰内容的初始化 顺序:
1.  父类静态变量——>父类静态块——>子类静态变量——>子类静态块——>父类构造器——>子类构造器