在我们使用Calender的时候,使用过Calendar.getInstance()来获取一个日期类的对象,这种方式跟单例的获取方式一样,那么它到底是不是单例呢,如果是单例的话,一个对象修改内容之后,另外一个线程中的数据不久乱套了吗?从试验以及源码中可以得出,Calendar不是单例。
测试:
Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); //输出true System.out.println("c1.equals(c2) is : "+c1.equals(c2)); //输出false System.out.println("c1 == c2 is : "+ (c1 == c2));
可以看出,两个实例的值相等,但是引用却不相等。
下面看看jdk的源码中的写法:
public static Calendar getInstance() { Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault()); cal.sharedZone = true; return cal; } private static Calendar createCalendar(TimeZone zone, Locale aLocale) { // If the specified locale is a Thai locale, returns a BuddhistCalendar // instance. //泰国环境 if ("th".equals(aLocale.getLanguage()) && ("TH".equals(aLocale.getCountry()))) { return new sun.util.BuddhistCalendar(zone, aLocale); //日本环境 } else if ("JP".equals(aLocale.getVariant()) && "JP".equals(aLocale.getCountry()) && "ja".equals(aLocale.getLanguage())) { return new JapaneseImperialCalendar(zone, aLocale); } // else create the default calendar //默认环境 return new GregorianCalendar(zone, aLocale); }
可以看出,根据不同的语言环境,创建了不同的日期对象实例,低版本的JDK中,只对泰语做了特殊处于,高版本中又增加了日本的,具体实现有何不同,可以去看一下具体不同日期类的实现。
而至于Calendar为什么用Calendar.getInstance()来获取实例对象,是因为它本身是个抽象类,是各种日期类实现类的父类,提供了Calendar.getInstance()给我们方便调用,根据不同的语言环境采取不同的实现,JDK帮我们封装了这些细节,所以直接使用
GregorianCalendar c1 = new GregorianCalendar();
来创建日期类的实例,其实也是可以的,但无疑破坏了封装性,多态性,我们也得像getInstance()方法里面处理的一样,根据不同的语言环境做不同的处理,所以我们还是不要破坏的好。
相关推荐
采用javascript实现calender
在Android开发中,`Calender`日历组件是构建时间管理类应用不可或缺的一部分。它允许开发者为用户提供直观的日历视图,以便查看、添加和管理日期相关的事件。本篇文章将深入探讨`Calender`组件的核心功能,使用方法...
本文将深入探讨“android calender”官方源码,分析其背后的实现机制、关键类和接口,以及如何利用这些源码来优化和自定义日历功能。 首先,Android Calendar应用的核心组件是`CalendarContract`,它是Android系统...
我们将主要围绕"calender_self_qt.zip"中的内容展开,分析其设计原理、实现方法以及可能的应用场景。 Qt是一个流行的跨平台应用程序开发框架,广泛应用于桌面、移动和嵌入式设备。它提供了丰富的UI控件,包括用于...
这个名为 "js+html Calender 日历" 的项目,很可能是一个实现日历功能的前端代码库或教程,可以帮助开发者在网页上添加互动式的日期选择功能。下面将详细介绍相关的知识点。 1. **HTML**:HTML(超文本标记语言)是...
`ios calender`这个项目提供了一个高质量的示例,展示了如何在iOS应用中集成和操作日历功能。以下将详细介绍iOS日历API的使用,以及在这个`JTCalendar-master`项目中可能涉及到的关键知识点。 首先,我们需要了解...
同步Google Calender 至outlook
《自定义日历展示功能详解》 在日常的软件开发中,日历组件是一个不可或缺的部分,它能够帮助用户直观地查看和管理时间信息。本文将深入探讨如何创建一个自定义的日历展示功能,以实现诸如签到日期和活动日期的显示...
《深入解析JavaScript日历Calender.js文件》 在JavaScript编程领域中,日历功能是一个常见的需求,无论是网页应用、移动应用还是桌面应用,都离不开日期和时间的展示与操作。而今天我们要探讨的是一个名为"calender...
解压后,我们可以看到文件名为"mfc_calender",这通常是一个工程文件,可能包含头文件、源代码文件、资源文件等,用于构建和编译日历应用程序。 "MFC日历"是指使用MFC库创建的日历组件。在MFC中,我们通常会用到...
在本文中,我们将深入探讨日历插件的使用,特别是以"art-calender-test"为例。日历插件是Web开发中的一个重要工具,它能够帮助用户直观地查看和管理日期相关的事件,常用于网站的预约系统、日程管理、时间表展示等...
日历控件,主要可以实现日程安排,根据时间查询
本项目"calender_verilog_"是利用Verilog语言实现的一个万年历功能,具备自动进位功能,可以准确计算400年内的日期。 在Verilog中,万年历的设计通常会涉及到以下几个核心知识点: 1. **模块定义**:在`calender.v...
ASP.NET 编程知识 - ASP.NET 笔记之 Calender 的使用说明 ASP.NET 中的 Calender 控件是开发者常用的一个控件,它可以帮助开发者快速创建一个日期选择器,提高用户体验。但是,如何正确使用 Calender 控件却是一个...
Reminder to Calender.scriptable
Reminder to Calender.js
在Android平台上,开发一款日历应用是常见的需求,这涉及到对Android系统日历API的深入理解和使用。本文将详细介绍如何通过编程实现一个显示年月日、星期,并支持用户选择日期、切换月份和年的日历功能。...
2. **UI渲染**:创建HTML结构来显示日历,并确保能显示季度而不是单个日期。可能需要四个独立的部分分别代表一年的四个季度。 3. **事件监听**:添加点击事件监听器到每个季度按钮,当用户选择一个季度时,更新显示...
calendar其实是一软件。 命令读取 calendar 文件并显示文件中包含今天或明天日期的任何行。calendar 文件是由用户创建的并且必须位于运行 calendar 命令的同一目录中。通常,calendar 文件驻留在主目录中。