日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

谜题61:日期游戏

發布時間:2023/12/2 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谜题61:日期游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面的程序演練了Date和Calendar類的某些基本特性,它會打印出什么呢?

import java.util.*;public class DatingGame {public static void main(String[ ] args) { Calendar cal = Calendar.getInstance(); cal.set(1999, 12, 31); // Year, Month, Day System.out.print(cal.get(Calendar.YEAR) + " "); Date d = cal.getTime(); System.out.println(d.getDay()); } }

該程序創建了一個Calendar實例,它應該表示的是1999年的除夕夜,然后該程序打印年份和日??雌饋碓摮绦驊摯蛴?999 31,但是它沒有;它打印的是2000 1。難道這是致命的Y2K(千年蟲)問題嗎?

不,事情比我們想象的要糟糕得多:這是致命的Date/Calendar問題。在Java平臺首次發布時,它唯一支持日歷計算類的就是Date類。這個類在能力方面是受限的,特別是當需要支持國際化時,它就暴露出了一個基本的設計缺陷:Date實例是易變的。在1.1版中,Calendar類被添加到了Java平臺中,以矯正Date的缺點,由此大部分的Date方法就都被棄用了。遺憾的是,這么做只能使情況更糟。我們的程序說明Date和Calendar API有許多問題。

該程序的第一個bug就位于方法調用cal.set(1999,12,31)中。當月份以數字來表示時,習慣上我們將第一個月被賦值為1。遺憾的是,Date將一月表示為0,而Calendar延續了這個錯誤。因此,這個方法調用將日歷設置到了1999年第13個月的第31天。但是標準的(西歷)日歷只有12個月,該方法調用肯定應該拋出一個IllegalArgumentException異常,對嗎?它是應該這么做,但是它并沒有這么做。Calendar類直接將其替換為下一年,在本例中即2000年的第一個月。這也就解釋了我們的程序為什么打印出的第一個數字是2000。

有兩種方法可以訂正這個問題。你可以將cal.set調用的第二個參數由12改為11,但是這么做容易引起混淆,因為數字11會讓讀者誤以為是11月。更好的方式是使用Calendar專為此目的而定義的常量,即Calendar.DECEMBER。

該程序打印出的第二個數字又是怎么回事呢?cal.set調用很明顯是要把日歷設置到這個月的第31天,Date實例d表示的是與Calendar相同的時間點,因此它的getDay方法應該返回31,但是程序打印的卻是1,這是怎么搞得呢?

為了找出原因,你必須先閱讀一下文檔,它敘述道Date.getDay返回的是Date實例所表示的星期日期,而不是月份日期。這個返回值是基于0的,從星期天開始計算。因此程序所打印的1表示2000年1月31日是星期一。請注意,相應的Calendar方法get(Calendar.DAY_OF_WEEK) 不知為什么返回的是基于1的星期日期值,而不是像Date的對應方法那樣返回基于0的星期日期值。

有兩種方法可以訂正這個問題。你可以調用Date.date這一名字極易讓人混淆的方法,它返回的是月份日期。然而,與大多數Date方法一樣,它已經被棄用了,因此你最好是將Date徹底拋棄,直接調用Calendar的get(Calendar.DAY_OF_MONTH)方法。用這兩種方法,該程序都可以打印出我們想要的1999 31:

public class DatingGame {public static void main(String[] args) { Calendar cal = Calendar.getInstance(); cal.set(1999, Calendar.DECEMBER, 31); System.out.print(cal.get(Calendar.YEAR) + " "); System.out.println(cal.get(Calendar.DAY_OF_MONTH)); } }

本謎題只是掀開了Calendar和Date缺陷的冰山一角。這些API簡直就是雷區。Calendar其他的嚴重問題包括弱類型(幾乎每樣事物都是一個int)、過于復雜的狀態空間、拙劣的結構、不一致的命名以及不一致的雨衣等。在使用Calendar和Date的時候一定要當心,千萬要記著查閱API文檔。

對API設計者來說,其教訓是:如果你不能在第一次設計時就使它正確,那么至少應該在第二次設計時應該使它正確,絕對不能留到第三次設計時去處理。如果你對某個API的首次嘗試出現了嚴重問題,那么你的客戶可能會原諒你,并且會再給你一次機會。如果你第二次嘗試又有問題,你可能會永遠堅持這些錯誤了。

轉載于:https://www.cnblogs.com/yuyu666/p/9840996.html

總結

以上是生活随笔為你收集整理的谜题61:日期游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色秀av| 二十四小时在线更新观看 | 欧美午夜不卡 | 日本韩国在线播放 | 6080黄色| 朋友的姐姐2在线观看 | 日本xxxxxxxxx18| 日本高清视频www | 欧美日韩久久精品 | 色噜av | 91精品91久久久中77777老牛 | 日本a√在线观看 | 免费在线看黄网站 | 绯色av蜜臀vs少妇 | 亚洲人成网站999久久久综合 | 91精品国产乱码久久久久久久久 | 在线观看中文字幕亚洲 | 欧美日韩免费网站 | 亚州av综合色区无码一区 | 高跟肉丝丝袜呻吟啪啪网站av | 欧美夜夜 | 欧洲久久久 | 国产精品高潮呻吟av | 国产精品传媒麻豆hd | 精品二区视频 | 亚洲午夜国产 | 国产一区二区三区视频网站 | 在线观看亚洲大片短视频 | 女性高潮视频 | 国产免费av一区二区 | 亚洲欧美一区二区三区 | 欧美日韩亚洲一区二区 | 麻豆一区在线 | 91成人精品 | 午夜精品99 | 国内自拍偷拍视频 | 国产一二三精品 | 91人人爽 | 少妇高潮惨叫久久久久 | 国产wwwwww| 日韩午夜| 午夜福利电影一区二区 | 成人av色 | 999国产精品 | 黄色观看网站 | 国产精品一区二区无码免费看片 | 在线免费a视频 | 亚洲午夜色 | 国产高清一区在线观看 | 日韩怡春院| 亚洲视频一区在线观看 | 亚洲天堂免费视频 | 国产精品无码av在线播放 | 中文字幕+乱码+中文乱码www | 一区二区三区四区免费观看 | 黄色国产在线播放 | 国产小视频免费观看 | 操bbbbb| 永久免费国产 | 亚洲另类网站 | 国产美女福利视频 | 久久精品视频在线观看 | 三上悠亚激情av一区二区三区 | 久久久久国产精 | 日本欧美一区二区三区不卡视频 | 成人小视频免费观看 | 在线观看你懂的网址 | 国产精品久久免费视频 | 国产人妻久久精品一区二区三区 | 欧美人与动性xxxxx杂性 | 特淫毛片 | 奇米影视第四色7777 | 麻豆一区二区三区四区 | 深爱激情综合 | 国产精品久久久久久久成人午夜 | 中文在线日韩 | 久久久久久久 | 熟妇人妻中文字幕无码老熟妇 | 91蜜桃婷婷狠狠久久综合9色 | 伊人影院视频 | 我要操婊 | 六月丁香综合网 | 爱爱视频在线播放 | 国产欧美日韩久久 | 女十八毛片 | 成人人人人人欧美片做爰 | 校园激情亚洲 | 色哟哟黄色 | 国产精品久久久久久久免费大片 | 免费又黄又爽又色的视频 | 操极品少妇 | 久久一级黄色片 | 91口爆一区二区三区在线 | 欧美动态色图 | 国产精品日日摸夜夜爽 | 黑人与日本少妇 | 国产成人精品国内自产拍免费看 | 亚洲成人第一页 | 午夜一二区 |