首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java static final成员变量,初始化,存不存在线程安全有关问题

2013-12-26 
java static final成员变量,初始化,存不存在线程安全问题?先说 class Test{static final String strName

java static final成员变量,初始化,存不存在线程安全问题?
先说 


class Test{
static final String strName="abc";
}

这种赋值,听人说,是只有在第一个对象实例化的时候会赋值,是吗?


class Test{
static final HashMap<String, String> hm = new HashMap<String, String>();
Test()
{
hm.put("abc","123");
}
}


这种类型,只能在构造函数里初始化,要怎么只初始化一次呢?(只从语言角度讲,先不考虑hashTable了)
[解决办法]
把?HashMap提到类外边,做个单例
[解决办法]
class base
{
public base()
{
System.out.println("base");
}
}

class useBase
{
static final base b=new base();

public useBase()
{

}
}

public class classTest {
public static void main(String args[])
{
useBase ub1=new useBase();
useBase ub2=new useBase();
}
}

[解决办法]
第一种是不是在第一个对象实例化的时候赋值的,是在jvm启动的时候被赋值的;
第二种也不是只能在构造函数里初始化,你可以做个测试,调用的时候你一样可以对他进行put进对象,我的理解是,用final修饰的变量,它指向的内存地址就是固定死了,但里面存放的内容可以发生变化。

热点排行