java怎么创建日期类_java中的日期类Date

一、Java中的日期概述

日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题。

在Java中,操作日期主要涉及到一下几个类:

1、java.util.Date

类 Date 表示特定的瞬间,精确到毫秒。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和分析日期字符串。Date 中的把日期解释为年、月、日、小时、分钟和秒值的方法已废弃。

2、java.text.DateFormat(抽象类)

DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并分析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(日期 -> 文本)、分析(文本-> 日期)和标准化。将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年1 月 1 日 00:00:00 这一刻开始的毫秒数。

3、java.text.SimpleDateFormat(DateFormat的直接子类)

SimpleDateFormat 是一个以与语言环境相关的方式来格式化和分析日期的具体类。

SimpleDateFormat 使得可以选择任何用户定义的日期-时间格式的模式。但是,仍然建议通过 DateFormat 中的 getTimeInstance、getDateInstance 或 getDateTimeInstance 来新的创建日期-时间格式化程序。

4、java.util.Calendar(抽象类)

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。

5、java.util.GregorianCalendar(Calendar的直接子类)

GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家使用的标准日历系统。

GregorianCalendar 是一种混合日历,在单一间断性的支持下同时支持儒略历和格里高利历系统,在默认情况下,它对应格里高利日历创立时的格里高利历日期(某些国家是在 1582 年 10 月 15 日创立,在其他国家要晚一些)。可由调用方通过调用 setGregorianChange() 来更改起始日期。

二、java.util.Date的使用

1、java.util.Date的API简介

类 java.util.Date 表示特定的瞬间,精确到毫秒。

1)构造方法:

Date() :分配 Date 对象并用当前时间初始化此对象,以表示分配它的时间(精确到毫秒)。

Date(long date) :分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。

2)方法摘要

boolean after(Date when) :测试此日期是否在指定日期之后。

boolean before(Date when) :测试此日期是否在指定日期之前。

Object clone() :返回此对象的副本。

int compareTo(Date anotherDate) :比较两个日期的顺序。

boolean equals(Object obj) :比较两个日期的相等性。

long getTime() :返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

int hashCode() :返回此对象的哈希码值。

void setTime(long time) :设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。

String toString() :把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中:

dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。

mon 是月份 (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)。

dd 是一月中的某一天(01 至 31),显示为两位十进制数。

hh 是一天中的小时(00 至 23),显示为两位十进制数。

mm 是小时中的分钟(00 至 59),显示为两位十进制数。

ss 是分钟中的秒数(00 至 61),显示为两位十进制数。

zzz 是时区(并可以反映夏令时)。标准时区缩写包括方法 parse 识别的时区缩写。如果不提供时区信息,则 zzz 为空,即根本不包括任何字符。

yyyy 是年份,显示为 4 位十进制数。

2、java.text.DateFormat抽象类的使用

DateFormat 提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期/时间 Formatter。格式化风格包括 FULL、LONG、MEDIUM 和 SHORT。方法描述中提供了使用这些风格的更多细节和示例。

DateFormat 可帮助进行格式化并分析任何语言环境的日期。对于月、星期,甚至日历格式(阴历和阳历),其代码可完全与语言环境的约定无关。

要格式化一个当前语言环境下的日期,可使用某个静态工厂方法: myString = DateFormat.getDateInstance().format(myDate);

如果格式化多个日期,那么获得该格式并多次使用它是更为高效的做法,这样系统就不必多次获取有关环境语言和国家约定的信息了。

DateFormat df = DateFormat.getDateInstance();

for (int i = 0; i < myDate.length; ++i) {

output.println(df.format(myDate[i]) + "; "); }

要格式化不同语言环境的日期,可在 getDateInstance() 的调用中指定它。DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE); 还可使用 DateFormat 进行分析。myDate = df.parse(myString);

使用 getDateInstance 来获得该国家的标准日期格式。使用 getTimeInstance 可获得该国家的时间格式。使用 getDateTimeInstance 可获得日期和时间格式。可以将不同选项传入这些工厂方法,以控制结果的长度(从 SHORT 到 MEDIUM 到 LONG 再到 FULL)。确切的结果取决于语言环境,但是通常:

SHORT 完全为数字,如 12.13.52 或 3:30pm

MEDIUM 较长,如 Jan 12, 1952

LONG 更长,如 January 12, 1952 或 3:30:32pm

FULL 是完全指定,如 Tuesday, April 12, 1952 AD 或 3:30:42pm PST。

如果愿意,还可以在格式上设置时区。如果想对格式化或分析施加更多的控制(或者给予用户更多的控制),可以尝试将从工厂方法所获得的 DateFormat 强制转换为 SimpleDateFormat。这适用于大多数国家;只是要记住将其放入一个 try 代码块中,以防遇到特殊的格式。 还可以使用借助 ParsePosition 和 FieldPosition 的分析和格式化方法形式来:逐步地分析字符串的各部分。对齐任意特定的字段,或者找出字符串在屏幕上的选择位置。

DateFormat 不是同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须保持外部同步。

3、java.text.SimpleDateFormat(DateFormat的直接子类)的使用

SimpleDateFormat 使得可以选择任何用户定义的日期-时间格式的模式。但是,仍然建议通过 DateFormat 中的 getTimeInstance、getDateInstance 或 getDateTimeInstance 来新的创建日期-时间格式化程序。每一个这样的类方法都能够返回一个以默认格式模式初始化的日期/时间格式化程序。可以根据需要使用 applyPattern 方法来修改格式模式。

1)日期和时间模式

日期和时间格式由日期和时间模式字符串指定。在日期和时间模式字符串中,未加引号的字母 'A' 到 'Z' 和 'a' 到 'z' 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (') 引起来,以免进行解释。"''" 表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在分析时与输入字符串进行匹配。

定义了以下模式字母(所有其他字符 'A' 到 'Z' 和 'a' 到 'z' 都被保留):

G:Era标志符;y:年;M:年中的月份;w:年中的周数;W:月份中的周数;D:年中的天数;d:月份中的天数;F:月份中的星期;;E:星期中的天数;a:Am/pm 标记;H:一天中的小时数(0-23);k:一天中的小时数(1-24);K:am/pm 中的小时数(0-11);h:am/pm 中的小时数(1-12);m:小时中的分钟数;s:分钟中的秒数;S:毫秒数;z:时区;Z:时区

2)举例

Date date = new Date();

//创建不同的日期格式

DateFormat df1 = DateFormat.getInstance();

DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss EE");

DateFormat df3 = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA); //产生一个指定国家指定长度的日期格式,长度不同,显示的日期完整性也不同

DateFormat df4 = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒 EE", Locale.CHINA);

DateFormat df5 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss EEEEEE", Locale.US);

DateFormat df6 = new SimpleDateFormat("yyyy-MM-dd");

DateFormat df7 = new SimpleDateFormat("yyyy年MM月dd日");

//将日期按照不同格式进行输出

System.out.println("按照Java默认的日期格式,默认的区域 : " + df1.format(date));

System.out.println("按照指定格式 yyyy-MM-dd hh:mm:ss EE ,系统默认区域 :" + df2.format(date));

System.out.println("按照日期的FULL模式,区域设置为中文 : " + df3.format(date));

System.out.println("按照指定格式 yyyy年MM月dd日 hh时mm分ss秒 EE ,区域为中文 : " + df4.format(date));

System.out.println("按照指定格式 yyyy-MM-dd hh:mm:ss EE ,区域为美国 : " + df5.format(date));

System.out.println("按照指定格式 yyyy-MM-dd ,系统默认区域 : " + df6.format(date));

结果:

按照Java默认的日期格式,默认的区域 : 07-11-30 下午5:04

按照指定格式 yyyy-MM-dd hh:mm:ss EE ,系统默认区域 :2007-11-30 05:04:10 星期五

按照日期的FULL模式,区域设置为中文 : 2007年11月30日 星期五

按照指定格式 yyyy年MM月dd日 hh时mm分ss秒 EE ,区域为中文 : 2007年11月30日 05时04分10秒星期五

按照指定格式 yyyy-MM-dd hh:mm:ss EE ,区域为美国 : 2007-11-30 05:04:10 Friday

按照指定格式 yyyy-MM-dd ,系统默认区域 : 2007-11-30

4、java.util.Calendar(抽象类)

一个Calendar的实例是系统时间的抽象表示,从Calendar的实例可以知道年月日星期月份时区等信息。Calendar类中有一个静态方法 get(int x),通过这个方法可以获取到相关实例的一些值(年月日星期月份等)信息。参数x是一个产量值,在Calendar中有定义。

1)Calendar的星期是从周日开始的,常量值为0。

2)Calendar的月份是从一月开始的,常量值为0。

3)Calendar的每个月的第一天值为1。

5、java.util.GregorianCalendar(Calendar的直接子类)

GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家使用的标准日历系统。结合Calendar抽象类使用。

举例:

//创建Calendar的方式

Calendar now = new GregorianCalendar(2007, 10, 30, 15, 55, 44);

//定义日期的中文输出格式,并输出日期

SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒 E", Locale.CHINA);

System.out.println("获取日期中文格式化化输出:" + df.format(now.getTime()));

System.out.println("获取年:" + now.get(Calendar.YEAR));

System.out.println("获取月(月份是从0开始的):" + now.get(Calendar.MONTH));

System.out.println("获取日:" + now.get(Calendar.DAY_OF_MONTH));

System.out.println("获取时:" + now.get(Calendar.HOUR));

System.out.println("获取分:" + now.get(Calendar.MINUTE));

System.out.println("获取秒:" + now.get(Calendar.SECOND));

System.out.println("获取上午、下午:" + now.get(Calendar.AM_PM));

System.out.println("获取星期数值(星期是从周日开始的):" + now.get(Calendar.DAY_OF_WEEK));

String dayOfWeek[] = {"", "日", "一", "二", "三", "四", "五", "六"};

System.out.println("now对象的星期是:" + dayOfWeek[now.get(Calendar.DAY_OF_WEEK)]);

String months[] = {"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"};

System.out.println("now对象的月份是: " + months[now.get(Calendar.MONTH)]);

结果:

获取日期中文格式化化输出:2007年11月30日 03时55分44秒 星期五

获取年:2007

获取月(月份是从0开始的):10

获取日:30

获取时:3

获取分:55

获取秒:44

获取上午、下午:1

获取星期数值(星期是从周日开始的):6

now对象的星期是:五

now对象的月份是: 十一月

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源是一个基于Spring Boot和MySQL的党员教育和管理系统的完整源代码,压缩包格式。该系统采用了当前流行的Java Web开发技术,结合了Spring Boot框架和MySQL数据库,为党员教育和管理工作提供了一个高效、便捷的解决方案。 主要技术: Spring Boot:作为整个项目的基石,Spring Boot是一个简化Spring应用开发的框架,可以快速构建独立的、生产级别的Spring应用。 MySQL:作为系统的数据库,用于存储和管理党员信息、教育资料等数据。 MyBatis:作为持久层框架,用于实现Java对象与数据库之间的映射关系,简化数据库操作。 Thymeleaf:作为模板引擎,用于实现前端页面的动态渲染。 Bootstrap:作为前端框架,用于构建响应式布局的页面,使系统在不同设备上都能正常显示。 功能模块: 党员信息管理:包括党员信息的录入、查询、修改和删除等功能,方便对党员信息进行统一管理。 党组织管理:包括党组织的创建、修改、删除等功能,方便对党组织进行管理。 党课学习:提供在线学习党课的功能,支持上传、下载课件,记录学习进度等。 党费缴纳:支持在线缴纳党费,记录缴费记录,方便查询和管理。 党建活动:发布党建活动信息,支持报名、签到等功能,方便组织和管理党建活动。 通知公告:发布通知公告,支持查看、删除等功能,方便传达各类信息。 个人心:包括个人信息查看、修改密码等功能,方便用户管理个人信息。 总之,该资源提供了一个功能齐全的党员教育和管理系统,采用主流的技术栈,具有良好的扩展性和可维护性。通过使用该系统,可以大大提高党员教育和管理工作的效率。
在当前的健康意识增强和公共卫生管理日益重要的社会背景下,一个疫苗发布和接种预约系统对于确保疫苗接种的有序进行至关重要。本毕业设计项目旨在通过使用Spring Boot框架和MySQL数据库开发一个简洁、高效的疫苗发布和接种预约系统。 技术栈介绍: 后端框架:Spring Boot - 一个简化Spring应用开发的框架,允许快速搭建项目并自动配置。 数据库:MySQL - 一个流行的开源关系型数据库管理系统,用于存储和管理所有疫苗和用户预约数据。 安全框架:Spring Security - 提供认证和授权功能,保障用户信息和预约数据的安全。 前端技术:HTML, CSS, JavaScript - 构建用户友好的界面,提供良好的用户体验。 API设计:RESTful接口 - 标准化接口设计,便于前后端分离开发,提高系统的可维护性和扩展性。 工具:Maven或Gradle - 用于项目的依赖管理和构建。 系统功能介绍: 用户注册与登录:用户可以创建账户并进行登录,保证个人预约信息的安全性。 疫苗信息发布:管理员可以发布疫苗信息,包括疫苗名称、类型、适用人群、剂量等。 预约系统:用户可以选择疫苗种类和接种时间,进行在线预约。 预约管理:用户可以查看自己的预约记录,必要时可修改或取消预约。 接种点信息管理:系统包含接种点的详细信息,如地址、工作时间、可接种疫苗种类等,方便用户选择最合适的接种地点。 通知提醒:系统会通过电子邮件或短信形式向用户发送接种提醒,确保用户不会错过预约时间。 数据统计与分析:后台可进行预约数据的统计和分析,帮助管理者了解疫苗需求和接种进度,优化资源分配。 权限控制:不同级别的用户(如普通用户、管理员)有不同的操作权限,确保系统的数据安全和功能合理分配。 总之,该疫苗发布和接种预约系统利用了Spring Boot的快速开发特性和MySQL的稳定性,结合现代Web技术,提供了一个全面的解决方案,以支持疫苗接种工作的高效运行。通过这些功能的整合,系统不仅提高了用户的便利性,同时也为公共卫生管理提供了有力的技术支持。
Java经典入门教程pdf完整版Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 3;Java是一种软件运行平台 3.1:什么是软件的运行平台 如同我们需要阳光、空气、水和食物才能正常存活一样,软件最终要能够运行,也需要 系列旳外部环境,来为软件的运行提供支持,而提供这些支持的就是运行平台。 3.2:Java是一种运行平台 Java本身提供Java软件所需要的运行环境,Java应用可运行在安装了JRE(Java Runtime environment)的机器上,所以我们说Java是一个运行平台。 JRE: Java Runtime Environment,Java运行环境。 4:Java是一种软件部署环境 4.1:什么是软件的部署 简单地讲,部署就是安装,就是把软件放置到相应的地方,并且进行相应的配置(一般 称作部署描述),让软件能够正常运行起来。 4.2:Java是一种软件部署环境 ava本身是一个开发的平台,开发后的Java程序也是运行在Java平台上的。也就是说, 开发后的Java程序也是部署在Java平台上的,这个尤其在后面学习JEE(Java的企业版) 的时候,体现更为明显 :Java能干什么 JaⅦa能做的事情很多,涉及到编程领域的各个方面。 1:桌面级应用:尤其是需要跨平台的桌面级应用程序。 先解释一下桌面级应用:简单的说就是主要功能都在我们本机上运行的程序,比如 word、 excel等运行在木机上的应用就属」桌面应用。 2:企业级应用 先解释一下企业级应用:简单的说是大规模的应用,一般使用人数较多,数据量较大, 对系统的稳定性、安全性、可扩展性和可装配性等都有比较高的要求 这是目前Java应用最广泛的一个领域,几乎一枝独秀。包括各种行业应用,企业信息、 化,也包括电子政务等,领域涉及:办公自动化OA,客户关系管理CRM,人力资源HR, 企业资源计划ERP、知识管理KM、供应链管理SCM、企业设备管理系统EAM、产品生命 周期管理PLM、面向服务体系架构SOA、商业智能BⅠ、项日管理PM、营销管理、流程管 理 Work Flow、财务管理…..等几乎所有你能想到的应用 3:嵌入式设备及消费类电子产品 包括无线手持设备、智能卡、通信终端、医疗设备、信息家电(如数字电视、机顶盒 电冰箱)、汽车电子没备等都是近年以来热门的Java应用领域,尤其是手机上的Java应用 程序和Java游戏,更是普及。 4:除了上面提到的,Java还有很多功能:如进行数学运算、显示图形界面、进行网络操作、 进行数据库操作、进行文件的操作等等。 PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 三:Java有什么 Java体系比较庞杂,功能繁多,这也导致很多人在自学Java的时候总是感觉无法建立 全面的知识体系,无法从整体上把握Java的原因。在这里我们先简单了解一下Java的版本 具体的Java体系知识结构,将在后面详细讲述。 Java分成三种版本,分别是Java标准版(JSE)、Java微缩版JME)和Java企业版(JE), 每一和版本都有自己的功能和应用方向。 1:Java标准版:JSE( Java standard Edition) JSE( Java Standard edition)是sun公司针对桌面开发以及低端商务计算解决方案而开 发的版本,例如:我们平常熟悉的 Application桌面应用程序。这个版本是个基础,它也是 我们半常开发和使用最多的技术,Java的主要的技术将在这个版本体现。本书主要讲的 就是JSF。 2:Java微缩版:JME( Java Micro edition) JE(Java, Micro edition)是对标准版JSE进行功能缩减后的版本,于199年6月 由 Sun Microsystems第一次推向Java团体。它是一项能更好满足Java开发人员不同需求 的广泛倡议的一部分。 Sun Microsystems将JM定义为“一种以广泛的消费性产品为目标 的高度优化的Java运行时环境,包括寻呼机、移动电话、可视电话、数字机顶盒和汽车导 航系统。” JE是致丿于消费产品和嵌入式设备的开发人员的最佳选择。尽管早期人们对它看好而 且Java开发人员团体的热衷人土也不少,然而,J最近才开始从其影响更大的同属 品JEE和JSE的阴影走出其不成熟期。 JME在开发面向內存有限的移动终端(例如寻呼机、移动电话)的应用时,显得尤其实用。 因为它是建立在操作系统之上的,使得应用的丌发无须考虑太多特殊的硬件配置类型或操作 系统。因此,开发商也无须为不同的终端建立特殊的应用,制造商也只需要简单地使它们的 操作平台可以攴持JM便可, 3:Java企业版:JEE( Java enterprise edition) JE( ava Enterprise edition)是·种利用Java平台来简化企业解决方案的开发、部 著和管理相关的复杂问题的体系结构。JE技术的基础就是核心Java平台或Java平台的标 准版,JEE不仅巩固了标淮版屮的诈多优点,例如“编写一次、随处运行”的特性、方便存 取数据库的 JDBC API、 CORBA技术以及能够在 Internet应用保护数据的安全模式等等, 同时还提供了对BJB( Enterprise java beans)、 Java Servlets aPi、JSP( Java Server pages) 以及ⅫML技术的全面攴持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时 间的体系结构。 JEE体系结构提供屮间层集成框架来满足无需太多费用而又需要高可用性、高可靠性以 及可扩展性的应用的需求。通过提供统的开发平台,J降低了开发多层应用的费用和复 杂性,同时提供对现有应用稈序集成强有力支持,完全支持 Entcrprise java beans,有良 好的向导攴持打包和部署应用,添加了目录攴持,增强了安全机制,提高了性能 JE是对标准版进行功能扩展,提供一系列功能,用来解决进行企业应用开发所面临 的复杂的问题。具体的我们会放到后面JFE的课程去讲。 4:三个版本之间的关系 JE几乎完全包含JSE的功能,然后在JSE的基础上添加了很多新的功能。 JME主要是JSE的功能子集,然后冉加上一部分额外添加的功能 PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 如下图所示 JEE JSC JME Java的API类库之有一组所谓的核心类( Corellas,即java.*),在核心类之外还有 所谓的扩允类( xtended Class,即 Javax.*)。根据对这两种类的支持程度,进而区分出几 种不同的Java版本。 我们必须以 Java Standard Edition(JSE)作为基准,这个版本做了所有Java标准规格 之所定义的核心类,也文持所有的Java基木类。JSE定位在客户端程序的应用上 从JSE往外延伸,其外面为 Java Entcrprise edition(JEE),此版本除了支持所有的 标准核心类外,而且还增加了许多文持全业内部使用的扩充类,攴持 Servlet/JSP的 Javax. servlet.*类、支持 Enterprise Java Bean的 javax.ejb.*类。当然,JE必定支 持所有的Java基本类。JE定位在服务器端( server-side)程序的应用上。 从J5E向内看,是 Java micro edition(JME),它所支持的只有核心类的了集合,在JME CLDC的规格之,只支持java.lang.*、java.io.*、以及java.uti1.*这些类。此版本 也增加了一些攴持“微小装置”的扩充类,如 Javax. microedition.io.*类。然而,此版 木并不支持所有的Java基木类,就标准的 JMECLDO,也就是能在 Palmos上执行的 KwM( KVirtualmachine)来说,它就不支持属于浮点数( float、 double)的Java基本类。JME 定位在嵌入式系统的应用上 最里层,还有一个Java的 Smart card版本,原本在Java的文件之并没有这样定义 但是将亡画在JⅦ内部是很合理的。因为 SmartCard版本具攴持java.lang*这个核心类, 比起JM所支持的核心类更少,但它也有属」自凵的扩充类,如 Javacard.*、 javacard. 这些类 Smartcard版本只支持 Boolean与Bytc这两种Java基本类,此版本定位在 SmartCard 的应用上 四:闲话 ava 1:Java历史 在上世纪90年代初,sun公司有一个叫做 Green的项目,目的是为家用消费电子广品 开发一个分布式代码系统,这样就可以对家用电器进行控制,和它们进行信息交流。詹姆 斯·高斯林( James Gosling)等人基于C+开发一种新的语言0 ak ( java的前身)。0ak是 种用于网络的精巧而安全的语言。Sun公司曾依此投标个交互式电视项目,但结果是被SGl 打败,Sun打算抛弃0ak。随着可联网的发展,Sun看到了0ak在计算机网络上的广阔应用 前景,于是改造0ak,在1995年5月以“Java”的名称正式发布,从此Java走上繁荣之路 当然提到Jaa历史,不得不提的一个故事就是Java的命名。开始“Oak”的命名是以 项目小组办公室外的树而得名,但是Oak商标被其他公司注册了,必须另外取一个名字 传说有天,几位Java成员组的会员正在讨论给这个新的语言取什么名字,当时他们止在 咖啡馆喝着Java(爪哇)咖啡,有一个人灵机一动说就叫Java怎杵,得到了其他人的赞同, 于是,Java这个名字就这样传开了。当然对于传说,了解一下就好了,不必过于认真 2:Java大事记 PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 作为学习Java的人士,对Java历史上发生的大事件有一个了解是应该的。 JDK〔 Java Software Develop kit):Java软件开发工具包。JIK是Java的核心,包 括了Java运行坏境,一系刎Java开发工具和Java基础的类库。目前主流的JDK是Sun公 同发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JD,例如IBM公司开 发的JD,BA公司的 Jrocket,还有GN组织丌发的JDK等等。 时间 事件 1995年5月23日 Java语言诞生 1996年1月 第个 JDK-JDK1.0诞生 1997年2月18日 JDK1.1发布 1998年12月8日 Java2企业平台J2EE发布 1999年6月 Sun发布JaⅤa三个版本:标准版J2SF,企业 版J2EE,微型版JME 2004年9月30日 Javase50发布 2006年12月 Java se60发布 3:Java特点 简单地说,Java具有如下特点:简单的、面向对象、平台无关、多线程、分布式、安全、 晑性能、可靠的、解释型、自动垃圾回收等特点。 这里只解释一下平台无关和分布式,其余的在后面会逐步接触到 3:平台无关 所谓平台无关指的是:用Java写的程序不用修改就可在不同的软硬件平台上运行。这 烊就能实现同样的程序既可以在 Windows下运行,到了Unix或者 Linux环境不用修改就直 接可以运行了。Java主要靠Java虚拟机(JⅧM)实现平台无关性 平台无关性就是一次编写,到处运行: Write Once, Run Anywhere 32:分布式 分布式指的是:软件由很多个可以独立执行的模块组成,这些模块被分布在多台计算机 上,可以同时运行,对外看起来还是个整体。也就是说,分布式能够把多台计算机集合起 来就像一台计算机一样,从而提供更好的性能 4:Java标准组织—Cp JCP( Java Community process)是一个开放的国际组织,成立于1995年,主要职能 是发展和更新Java技术规范、参考实现(RⅠ)、技术兼容包(TCK)。Java技术和JCP两者 的原创者都是SN计算机公司。组织成员可以提交JSR( Java Specification Requests), 通过讨论、认可、审核以后,将进入到下一版本的规范里面。 也就是说JCP是目前Java技术发展事实上的控制者和领导者。 五:Java如何做到让机器理解我们想要做的东西 用·个图来描述这个过程会比较谷易理解: PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 Runtime Compile Class loader Byte code Verifier Javac Hello.java Netwo Hello class Interpreter code Runtime generator/ Hardware 1:编写代码 首先把我们想要计算机做的事情,通过Java表达出来,写成Java文件,这个过程就是 编写代码的过程。如上图所示的 Hello java文件。 2:编译 写完Jaa代码后,机器并不认识我们写的Java代码,需要进行编译成为字节码,编译 后的文件叫做clas文件。如上图所示的 Hello, class文件。 3:类装载 Classloader 类裝载的功能是为执行程序寻找和装载所需要的类 Classloader能够加强代似的安全性,主要方式是:把本机上的类和內络资源类相分离, 在调入类的时候进行检查,因而可以限制任何“特洛伊木马”的应用。 4:字节码(byte-code)校验 功能是对 class文件的代码进行校验,保证代码的安全。 Java软件代码在实际运行之前要经过几次测试。JWM将代码输入一个字节码校验器以 测试代码段格式并进行规则检査一一检査伪造指针、违反对象访问权限或试图改变对象类型 的非法代码。 注意-—所有源于网络的类文件都要经过字节码校验器 字节码校验器对程序代码进冇四遍校验,这可以保证代码符合JⅧM规范并∏不破坏系统 的完整性。如果校验器在完成四遍校验后未返回出错信息,则下列各点可被保证 类符合JWⅦM规范的类文件格式 无访问限制异常 代码木引起操作数栈上溢或下溢 所有操作代码的参数类型将总是正确的 无非法数据转换发生,如将整数转换为对象引用 对象域访问是合法的 5:解释( Interpreter) 可是机器也不能认识clas文件,还需要被解释器进行解释,机器才能最终理解我们所 要表达的东西 PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 6:运行 最后由运行环境屮的 Runtime对代码进行运行,真正实现我们想要机器完成的工作 7:说明 由上面的讲述,大家看到,Java通过个编译阶段和个运行阶段,来让机器最终坦解 我们想要它完成的工作,并按照我们的要求进行运行 在这两个阶段屮,需要我们去完成的就是编译阶段的工作,也就是说:我们需要把我们 想要札器完成的工作用Jaa语言表达出来,写成Java源文件,然后把源文件进行编译,形 成 class文件,最后就可以在JaⅦa运行环境运行了。运行阶段的工作由Java平台自身提供 我们不需要做什么上作。 六:Java技术三大特性 1:虚拟机 Java虚拟机JM( Java Virtual Machine)在Java编程里面具有非常重要的地位,约 相当于前面学到的Java运行环境,虚拟机的基本功能如下: (1):通过 Classloader寻找和装载 class文件 (2):解释字节码成为指令并执行,提供 class文件的运行环境 (3):进行运行期间垃圾回收 4):提供与硬件交互的平台 Java虚拟杋是在真实札器用软件模拟实现的—种想象机器。Jaa虚拟札代码被存储 在.clas文件;每个文件都包含最多一个 public类。Java虚拟机规范为不同的硬件平台 提供了·种编译Java技术代码的规氾,该规范使Java软件独立于平台,因为编译是针对作 为虚拟机的“一般机器”而做。这个“一般机器”可用软件模拟并运行于各种现存的计算机 系统,也可用硬件米实现ε编译器在获取Java应用程序的源代码后,将其生成字节码,它是 为J硎M生成的一种机器码指令。每个Java解释器,不管它是Java技术廾发工具,还是可运行 applets的Wcb浏览器,都可执行JVM。 JWM为下列各项做出了定义 指令集(相当于央处理器[CP]) 寄存器 类文件格式 栈 垃圾收集堆 存储区 JⅧM的代码格式由紧缩冇效的字节码构成。由J硎M字节码编写的程序必须保持适当的类 型约東。大部分类型检査是在编译时完成。任何从属的Java技术解释器必须能够运行仼何 含有类文件的程序,这些类文件应符合Java虚拟机规范指定的类文件格式 1.1:虚拟机是Java平合无关的保障 正是因为有虚拟机这个间层,Java才能够实现与平台无关。虚拟机就好比是一个Java 运行的基本平台,所有的Java程序都运行在虚拟机上,如下图所示: PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 Java源程序(*java文件) Javac编译 ava类文件(*cass文什) 平台无 被装载进入虚拟机 Java虚拟机 平台相关 解释执行字节码文件 Linux Windows 2:垃圾回收 2.1:什么是垃圾 在程序运行的过程,存在被分配了的内存块不再被需要的情况,那么这些内存块对程 序来讲就是垃圾。 产生了垃圾,自然就需要清理这些垃圾,更为重要的是需要把这些垃圾所占用的内存资 源,回收回来,加以再利用,从而节省资源,提高系统性能。 2.2:垃圾回收 不再需要的凵分配内存应取消分配(释放内存) 在其它语言,取消分配是程序员的责仟 Java编程语言提供了种系统级线程以跟踪内存分配 垃圾攻集 可检查和释放不再需要的内存 可自动完成上述工作 可在JM实现周期,产生意想不到的变化 许多编程语言都允许在程序运行时动态分配内存,分配内存的过程由于语言句法不同而 有所变化,但总是要将指针返回到内存的起始位置,当分配内存不再需要时(內存指针已溢 出范围),程序或运行环境应释放内存 在C,C艹+或其它语言,程序员负责释放内存。有吋,这是件很困难的事情。因为 你并不总是事先知道内存应在何时被释放。当在系统没有能够被分配的内有时,可导致程 序瘫痪,这种程序被称作具有内存漏洞 java编程语言解除∫程序员释放内存的贲仼。它可提供一种系统级线程以跟踪每一次 内存的分配情況。在Java虚拟机的空闲周期,垃圾收集线程检查并释敚那些可被释放的内 存。垃圾收集在Java技术程序的生命周期自动进行,它解除了释放内存的要求,这样能 够有效避免内存漏洞和内存泄露(内冇泄露就是程序运行期间,所占用的内存一直往上涨, 很容易造成系统资源耗尽而降低性能或崩溃) PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 2.3:提示 (1):在Java里面,垃圾回收是一个自动的系统行为,程序员不能控制垃圾回收的功 能和行为。比如垃圾回收什么时候开始,什么时侯结束,还有到底哪些资源需要回收等,都 是程序员不能控制的 (2):有些跟垃圾回收相关的方法,比如: System. gc(,记住“点,调用这些方法, 仅仅是在通知垃圾回收程序,全于垃圾回收程序运个运行,仆么时候运行,都是尢法控制的。 (3):程序员可以通过设置对象为nul(后面会讲到)来标示某个对象不再被需要了, 这只是表示这个对象可以被回收了,并不是马上被回收 3:代码安全 Java如何保证编写的代仍是安全可靠的呢? (1):第一关:编写的代码首先要被编译成为 class文件,如果代码写得有问题,编译期间 就会发现,然后提示有编译错误,无法编译通过。 (2):第二关:通过编译关后,在类装载的时候,还会进行类装载检查,把本机上的类和网 络资源类相分离,在调入类的时候进行检査,因而可以限制仁何“特洛伊木马”的应用 (3):第三关:类装载后,在运行前,还会进行字节校验,以判断你的程序是安全的。 (4):第四关:如果你的程序在网终上运行,还有沙箱( Sand box)的保护,什么是沙箱呢? 就是如果你的程序没有汏得授权,只能在沙箱限定的范围内运行,是不能够访问本地資源的, 从而保证安全性。 如下图所示: Runtime Compile Java class Loader匿载检查 Hello world. java Network Byte code verifier 节码校验 Javac 编译检耷 Hello World class Interpreter Runtime Hardware 学习到这甲,大家应该对Java有了一定的了解了。现在是否想要看看Java程序究竟什 么样子呢?是不是想要体会一下如何开发Java程序呢?下面我们先米看看如何构建JSE的 环境,这是进行Java程序开发的第一步, PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值