请求答疑: Java 中 static final 修改常量的加载问题

查看 80|回复 6
作者:shucc   
public static final int FIRST_LINE_HEIGHT = ScreenUtil.dp2px(80);
我们项目中有以上这一段代码,ScreenUtil.dp2px 即获取 80dp 的高度,存在这个 FIRST_LINE_HEIGHT 数值偶现为 0 的情况,是否是因为 static final 加载时间导致的异常呢?

Static, Final, screenutil, dp2px

dqzcwxb   
ScreenUtil.dp2px()的问题
TArysiyehua   
楼上+1
chendy   
默认情况下,静态变量初始化不结束,类加载不结束,外部访问不了这个类
所以更可能发生的情况是,某些地方用反射破了 final 修改了这个值…
Ianchen   
典型的 DCL ( double check lock )问题吧?
lff0305   
遇到过类似的问题,原因是多个类在 init 的时候互相引用 (有多个 public static final 的 property )。
例如下面代码打印出来 A 的值是 0
public class Main {
public static final int FIRST_LINE_HEIGHT = ScreenUtil.dp2px(80);
public static void main(String[] argu) {
}
}
class ScreenUtil {
public static int A = Main.FIRST_LINE_HEIGHT;
static {
System.out.println(A);
}
public static int dp2px(int i) {
return i + 1000;
}
}
winterbells   
可能 static 加载的时候 activity 还没启动,设置为-1 ,在 oncreate 里面设置,或者读取的时候判断一下
您需要登录后才可以回帖 登录 | 立即注册

返回顶部