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;