Java类加载和static修饰符

时间:2021-05-01 21:08:50

Java类加载和static修饰符

类加载和几个常见关键字

也许你经常使用static,可是你是否思考过它的意义。

1. static关键字

顾名思义,static(静态的)修饰符。
被static修饰的变量和方法是不会被实例化的,在类加载的时候,只在内存中保留一份,以后再调用,还是会拿到这个内存地址,永远不会产生新的了。

static在安卓中常被用在内部类上,内部类会持有外部类的强引用,导致外部类不能被释放,对于android的各大组件,会出现内存泄露的。

2. final关键字

顾名思义,final(最终的)修饰符。
被final修饰的类不能被继承,被修饰的方法不能override,被修饰的变量只能初始化一起。

总之就是常量的意思,感觉是为了防止手滑。

3. new关键字

实例化,在内存中为被实例化的类分配内存,返回引用地址(指针),然后一个对象就产生了,然后就要面向对象了。被static关键字修饰的变量不会被实例化指的是在这个过程中,类中被static修饰的变量不会产生新的引用地址,是一个安静的美女子。

有些地方也许理解的不到位。

4. 类加载

public class Demo{
  //①
  public static int a = 1;
  //②
  public static int b;
  //③
  static{
    a = b;
  }
  //④
  public Demo(){
    b = 2;
    System.out.println("a = " + a);
  }

}

结果: a = 0 ;
类加载时初始化顺序是①②初始化静态变量,③静态代码初始化,④构造方法。所以b被赋值为2之前就被赋值给了a,而当时b的值为0,所以最后控制台输出结果为0;