Java中对静态只读变量的初始化

 
Java中对静态只读变量的初始化
2009-04-11 22:22
在几乎所有的编程语言里,都能看到只读变量的应用。就来BASH、KSH这样的脚本语言,都有只读变量。
在程序运行期间已知的、一成不变的资源、信息,我们都可以使用静态只读的变量来保存它。

在Java中,对只读变量的初始化也很灵活。我们可以使用传统的初始化方法,在声明后紧跟着值。比如:
public class A {
      public static final String RESOURCE_A = "aaa.png";
......
}

另外,对于数组型的变量,我们可以使用大括号来括住要初始化的所有值:
......
      public static final String[] RESOURCES = {"aaa.png","bbb.png","aaa.txt"};
......

对于其它类型的数据,如List、Map以及其它一些类的对象的初始化,就不是这样简单地使用等号“=”来完成的了。
在java中,我们可以在类中使用static{...}来执行类中静态成员的初始化,这里面的代码会最先被执行到。因此,就可以在static{...}中对静态只读的变量进行初始化了:
......
      public static final String RES_A = "aaa.png";
      public static final String RES_B = "bbb.png";
......
      public static final Map<String, String> RES_MAP = new HashMap<String, String>();
......
      static {
            RES_MAP.put("res_a", RES_A);
            RES_MAP.put("res_b", RES_B);
            ......
      }
......

至于非静态的只读变量(不使用static,只用final声明的变量……貌似用的情况比较少),就可以直接在类的构造函数中执行初始化。这样的话,在类的对象出生之前,这个只读变量就是未知的,但是对象一但生成,就不能再改变它的值了。
因为Java中这种“只读”变量似乎还是可变的,所以 .NET 设计者将真正“只读”的和Java中的这种“只读”做了区分,分别以const和readonly关键字来指代。
下面,我给出一个可以直接运行的,非常简单的例子,来说明一下java中对只读变量的初始化:
public class Hello {
        public static final String CLASS_FINAL;
        public final String OBJ_FINAL;

        public Hello() {
                OBJ_FINAL = "non-static final String.";
        }
        static {
                CLASS_FINAL = "static String for class.";
        }
        public static void main(String[] args){
                Hello h = new Hello();
                System.out.println("Hello! " + h.OBJ_FINAL);
                System.out.println("Hello! " + CLASS_FINAL);
        }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值