A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄玉昆 黑马帝   /  2013-2-28 09:42  /  1949 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

不知道大家有没有过这样的问题,就是你在获取时间的时候,会少写get方法,而直接获取的是Calendar.DAY_OF_MONTH,结果发现不是自己想要的值,为什么呢?
今天我翻阅了api文档,查看了一下关于Calendar中的DAY_OF_MONTH字段数字,没错,它被称为get 和 set 的字段数字,而且你细心一点就会发现,它是这样被定义的:
public static final int DAY_OF_MONTH你会不会有些疑问呢?这些字段数字都是静态的常量值,那为什么还能对其修改呢?还可以使用add,set等方法对其设置呢?
我对这个问题开始也很迷惑,百度了之后,才大概有些明白,我的理解是这样的:
你可以把这个Calendar中的YEAR的常量值理解为它的小名,打个比方说,一个人大名叫张三,你可以叫他的小名为小张,这个张三就相当于YEAR,而这个小张就是YEAR的常量值,为什么要这么设置呢?
这就要和字段值相联系了。其实,这些设置的操作是对具体的时间的修改,而不是对这些字段值的修改,获取的也是修改后的时间值。之所以称之为字段值,就是应为方便设置:简单地说就是将日期分为几段,如图所示:
YEAR   MONTH   DAY_OF_MONTH  ...
  1          2                   5   ...
(相应的字段值请看Calendar的常量值)
那么要是对某一部分进行修改的话,如设置年份为2013年,则为set(1,2013)
  1. set(int code,int value){
  2. switch(code){
  3. case 1:
  4.   修改年代
  5. }
  6. }
复制代码
其中的code就相当于字段值,而value就是所要设置的时间值,那么字段值是常量就不会改变的。而是将字段值(键)这个常量所对应的要修改的时间值(值)进行修改。所以并没有改变这个常量,为何还要写成YEAR这样的单词呢,而不是用1表示呢?当然,这就是静态常量的好处了,设为静态static就是为了加载Calendar这个类的时候就存在了,直接可以用了;而设为常量final就是为了方便识别,用起来方便,名字好记,而不用记那么多数字。(其实就可以理解为相应的数字代表相应的时间名称)。
说到这里,不知道大家明白了没有。简单地说,就是你修改的是Calenda中某个字段值的属性,改变的是它的状态,而不是它的时间这个名字。如,不是将YEAR的字段值1改变为2013,而是将这个字段值为1的YEAR所对应的时间值2012年改为2013这个数值。一个是数字(字段值),一个是数值(时间值或称为时间信息)。

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
占个座  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马