Java编程详解(微课版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-23 12:24:18

点击下载

作者:华清远见教育集团 季久峰 刘洪涛

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Java编程详解(微课版)

Java编程详解(微课版)试读:

前言

Java语言是计算机行业及互联网行业开发人员需要掌握的编程语言之一,也是大学计算机类相关专业的一门重要的专业基础课程。本书主要帮助读者学习Java编程语言及面向对象的思想,以边学边练的方式让读者能够熟练编写Java代码,同时让其在编写代码时了解每一个知识点的原理,为软件开发打下坚实的基础。

本书没有采取从变量、函数到标识符语句层层递进的顺序讲解,而是从第2章开始就介绍面向对象的思想,希望读者能从根源上了解Java语言,知其然也知其所以然。另外,本书是一本针对性非常强的教材,除了可以作为学习Java语言的参考书之外,还可以用作Android应用开发的基础语言书,所以本书针对在Android开发中涉及的大部分知识点也进行了详解。

针对高校此类专业教材缺乏的现状,我们以多年来在嵌入式工程技术领域及移动开发行业内的人才培养、项目研发的经验为基础,汇总并分析了近几年积累的数百家企业对Java及Android研发相关岗位的需求,并结合行业应用技术的最新状况及未来发展趋势,调研了开设Android专业的高校的课程设置情况、学生特点和教学用书现状。通过整理和分析,我们对专业技能和基本知识进行合理划分,编写了系列教材,包括《Java编程详解(微课版)》和《Android应用程序开发与典型案例(微课版)》。

本书由华清远见教育集团创始人季久峰和教研副总裁、研发中心总经理刘洪涛任主编,高明旭、马家兴、孙永梅任副主编。本书的完成得到了华清远见嵌入式学院及创客学院的帮助,本书内容参考了学院与嵌入式及移动开发企业需求无缝对接的、科学的专业人才培养体系。

读者登录华清创客学院官网,或在微信公众号内搜索并关注“创客学院公会”公众号,即可在线学习海量IT课程!欢迎读者加入华清远见图书读者QQ群516633798,获取更多资源与服务。

由于编者水平有限,书中疏漏之处在所难免,恳请读者批评指正。编者2018年12月平台支撑

华清远见教育集团(www.hqyj.com)是一家集产、学、研于一体的高端IT职业教育品牌,致力于培养实战型高端IT人才,业务涵盖嵌入式、物联网、Java EE、HTML5、Python+人工智能、VR/AR等众多高端IT学科方向。自成立以来,华清远见不忘初心,始终坚持“技术创新引领教育发展”的企业发展理念,坚持“做良心教育,做专业教育,做受人尊敬的职业教育”的核心育人理念,以强大的研发底蕴、“兴趣学习”的人才培养模式、良好的培训口碑,获得众多学员的高度赞誉。15年来,先后在北京、上海、深圳、成都、南京、武汉、西安、广州、沈阳、重庆、济南、长沙成立12个直营中心。到目前为止,已有超过20万名学员从华清远见走出。华清远见可以为您提供什么

● 智能时代,高端IT技术的系统化学习“智能革命”将成为2019年的关键词,嵌入式、物联网、人工智能、VR/AR、大数据等多种技术也将不断融合创新,推动智能时代的颠覆浪潮。华清远见涉及嵌入式、物联网、Java EE、HTML5、Python+人工智能、VR/AR等众多高端IT学科方向,并在这些核心技术方向拥有丰富的教学经验与研发经验积累。华清远见课程体系,是在对企业人才需求充分调研的基础上由教研团队精心打磨而成的系统化的教学方案,且保持每年两次课程升级,不断迭代更新。通过华清远见精英讲师团队的输出,学员可真正学有所成,提升技术实力,从而匹配行业最新人才需求。

● 兴趣导向的学习体验,提升实战经验

华清远见研发中心(www.fsdev.com)自主研发了智能小车、智能仓储、智能家居、人工智能机器人、智能交通、智慧城市、智能农业、VR眼镜等10余种智能产品及实训系统,广泛应用于项目教学,并且根据企业主流需求进行高频率更新。华清远见项目实训导向式的教学模式将技术开发与实训教学完美融合,融趣味性、知识性、实用性于一体,通过最接近企业产品级的项目实训让学员在兴趣学习中,从而拥有企业级项目的研发能力。

● 建立明确的职业发展规划,避免走弯路

华清远见产、学、研一体化的企业发展模式,可以最大化地帮助每一位学员建立更具职业发展前景的职业发展规划,避免走弯路。华清远见研发中心的50多个研发团队,紧跟行业技术发展,确保华清远见教学体系、实训项目、实训设备始终处于业内领先地位。华清远见拥有华为、三星、Intel等众多500强企业员工内训服务经验,并与全国5000多家企业达成了人才培养合作,庞大的企业关系网确保华清远见第一时间了解行业整体人才需求动向,实时跟进人才培养与企业岗位的无缝对接。

● 5000多家就业合作企业,帮你实现高薪就业

华清远见拥有全国5000多家就业合作企业,可以帮助企业快速搭建人才双选通道,通过全年数百场企业专场招聘会,让学员和企业零距离沟通。同时,华清远见全国12大校区的200多个就业保障团队,可帮助学员提前做好就业指导、面试、笔试、职场素养培训等求职环节的准备工作,助力学员高薪就业。华清远见实战型人才培养模式也获得了众多合作企业的高度认可,很多华清学员已成为公司的技术骨干人才。

● 55000个在线课程,随时随地想学就学

华清远见旗下的品牌——创客学院(www.makeru.com.cn)是华清远见重金打造的高端IT职业在线学习平台。创客学院的所有线上课程均为华清远见全国12大校区专家级讲师及业内名师精心录制的,为广大学员提供一对一专属学习方案、名师大屏授课模式体验、4V1陪伴式学习、7×13在线实时答疑服务等,致力于将最高质量的课程及最贴心的服务提供给所有学员。华清远见业务及优势

● 华清远见3大业务,从线下到线上,再到产品研发,全面覆盖

华清远见教育集团紧跟科技发展潮流,专注于高端IT开发人才的培养。目前,集团业务包含面授课程、在线课程、研发中心3大方向。从长期到短期,从线下到线上,从教学到研发,华清远见教育集团的业务在全面覆盖大学生、在职工程师、高校教师、企业职工等不同人群的同时,也充分满足不同人群的学习时间要求。未来,华清远见将不断提升自身的教研实力,用实际行动打造当之无愧的“高端IT就业培训专家”!

● 华清远见优势,专注高端IT教育15年,20万学子口口相传

华清远见自成立以来,始终坚持“做良心教育,做专业教育,做受人尊敬的职业教育”的育人理念,这是我们创业10多年最厉害的秘密武器,也是每一步都走得比较踏实的强大后盾。15年来,我们不忘初心,坚守原则。我们也坚信,只有扎扎实实、真心实意地为学员服务,帮助学员凭借真本事成功就业,才会一次次被市场选择,被行业选择,被学员选择。创业15年来,华清远见改变了20余万学子的命运,帮助他们实现了梦想,这是华清远见企业价值的实现,更是我们每一个华清人社会价值的实现。第1章 Java语言的由来

■本章主要介绍Java基本概念方面的内容,包括什么是Java语言、Java语言的诞生、Java语言的发展、Java现状以及Java虚拟机和Java开发环境的搭建。1.1 什么是Java语言

Java是由Sun公司开发而成的新一代编程语言。使用它可在不同机器、不同操作平台的网络环境中开发软件。不论哪一种WWW浏览器,不论是哪一种计算机,也不论是哪一种操作系统,只要WWW浏览器上面注明了“支持Java”,用户就可以看到生动的主页。Java正在逐步成为Internet应用的主要开发语言。它彻底改变了应用软件的开发模式,带来了自计算机出现以来的又一次技术革命,为迅速发展的信息世界增添了新的活力。Java简介

Sun公司的Java语言开发小组成立于1991年,其目的是开拓消费类电子产品市场,如交互式电视、面包烤箱等。Sun公司内部人员把这个项目称为Green,那时World Wide Web还在图纸上呢。该小组的领导人James Gosling(詹姆斯·高斯林)是一位非常杰出的程序员,他出生于1957年,于1984年加盟Sun公司,之前在一家IBM研究机构工作。他是Sun News窗口系统的总设计师,也是第一个用C语言实现EMACS的文本编辑器 COSMACS的开拓者。

在研究开发过程中,詹姆斯·高斯林深刻体会到了消费类电子产品和工作站产品在开发哲学上的差异:消费类电子产品要求可靠性高、费用低、标准化、使用简单,用户并不关心CPU的型号,也不欣赏昂贵的专用RISC处理器,它们需要建立在一个标准基础之上,具有一系列可选的方案,从8086到80586都可以选取。1.2 Java语言的诞生

Java平台和语言最开始只是Sun公司在1990年12月开始开发的一个内部项目。Sun公司的一个名为帕特里克·诺顿的工程师被自己开发的C语言和C语言编译器搞得焦头烂额,因为其中的API极其难用。帕特里克·诺顿决定改用Ne XT,同时他也获得了研究公司的“Stealth 计划”项目的机会。

Sun公司预料未来科技将在家用电器领域大显身手,并将“Stealth 计划”改名为“Green计划”,瞄准下一代智能家电(如微波炉)。詹姆斯·高斯林和麦克·舍林丹也加入了帕特里克·诺顿的工作小组,他们和其他几个工程师一起在加利福尼亚州门罗帕克市沙丘路的一个小工作室里面研究开发新技术。

工作小组使用的是内嵌类型平台,可以用的资源极其有限。团队最初考虑使用C语言,但是很多成员,包括Sun公司的首席科学家比尔·乔伊,都发现C语言和可用的API在某些方面存在很大问题。而且C语言太复杂,导致很多开发者经常错误使用。他们还发现C语言缺少垃圾回收系统,缺乏可移植的安全性、分布程序设计和多线程功能,而他们想要的是一种易于移植到各种设备上的平台。

根据可用的资金,比尔·乔伊决定开发一种集C语言和Mesa语言于一体的新语言,在一份报告上,比尔·乔伊把它称为“未来”,他提议Sun公司的工程师应该在C语言的基础上开发一种面向对象的环境。最初,詹姆斯·高斯林试图修改和扩展C语言的功能,他自己称这种新语言为C --,但是后来他放弃了,最后他将创造出的全新的语言命名为“Oak”(橡树),以他的办公室外的树而命名。

就像很多开发新技术的秘密工程一样,工作小组没日没夜地工作到了1992年的夏天,他们能够演示新平台的一部分内容了,包括Green操作系统、Oak的程序设计语言、类库及其硬件。最初的尝试是面向一种类PDA设备,被命名为Star7,这种设备有鲜艳的图形界面和被称为“Duke”的智能代理来帮助用户。1992年12月3日,这台设备得以展示。

同年11月,Green计划转化成了“First Person有限公司”,一个Sun公司的全资子公司,团队也被重新安排到了帕洛阿尔托。First Person团队对构造一种高度互动的设备很感兴趣,当时代华纳公司发布了一个关于电视机顶盒的征求提议书(Request for proposal)时,First Person改变了他们的目标,作为对征求意见书的响应,提出了一个机顶盒平台的提议。但是有线电视业界觉得First Person的平台给予了用户过多的控制权,因此First Person的投标败给了SGI。另外,First Person与3DO公司的另外一笔关于机顶盒的交易也没有成功。由于他们的平台不能在电视工业中产生任何效益,所以公司再次并回Sun公司。

1994年六七月间,在经历了一场历时三天的头脑风暴式的讨论之后,约翰·盖吉、詹姆斯·高斯林、比尔·乔伊、帕特里克·诺顿、韦恩·罗斯因和埃里克·斯库米团队决定再一次改变努力的目标,这次他们决定将该技术应用于万维网。他们认为随着Mosaic浏览器的到来,Internet正在向同样高度互动的远景演变,而这一远景正是他们在有线电视网中看到的。作为原型,帕特里克·诺顿开发了一个小型万维网浏览器Web Runner,后来改名为Hot Java。同年,商标搜索显示,Oak已被一家显卡制造商注册,因此团队找了一个新名字,将Oak改名为Java。这个名字是在很多成员常去的本地咖啡馆中杜撰出来的。虽然有人声称Java这个名称是开发人员名字的组合,但另一种比较可信的说法是这个名字是出于组员对咖啡的喜爱,所以以Java咖啡来命名。类文件的前4个字节如果用十六进制阅读,分别为CA、FE、BA、BE,就可以拼出两个单词“CAFE BABE”(咖啡宝贝)。

1994年10月,Hot Java和Java平台向公司高层进行了演示。1994年,Java 1.0a版本已经可以下载,但是Java和Hot Java浏览器的第一次公开发布却是在1995年5月23日的Sun World大会上进行的,由Sun公司的科学指导约翰·盖吉宣告Java技术的诞生。这个发布是与网景公司的执行副总裁马克·安德森的惊人发布一起进行的,马克·安德森宣布网景将在其浏览器中包含对Java的支持。1996年1月,Sun公司成立了Java业务集团,专门开发Java技术。1.3 Java的发展经历

1995年3月23日,San Jose Mercury News登出一篇题为Why Sun thinks Hot Java will give you a lift的文章,文章预言Java技术将是下一个重大事件,虽然文章是由当时Sun公司的公关经理Lisa Poulson安排撰写的,但并不仅仅是商家的宣传伎俩。纵观Java开发环境的发展,其发展历程大致可以划分为如下几个阶段。

● 1995年的命令行开发环境(Command Line Environments,CLEs)阶段。

● 1996—2000年的集成开发环境(Integrated Development Environments,IDEs)阶段。

● 2001—2004年的扩展开发环境(e Xtended Development Environments,XDEs)阶段。

● 2005年至今的协同开发环境(Collaborative Development Environments,CDEs)阶段。

对于Java,1995年是不平凡的一年,这一年它获得了成功。可令人尴尬的是,1995年并没有一个令人满意的Java开发环境,开发人员在进行Java编程时,大多使用文本编辑器编辑源程序,然后使用命令行进行编译处理。那时的Java开发环境还处于CLEs时代,开发效率非常低,预示着在Java开发工具上会有一番激烈的竞争。

有人称1996年为互联网年,有人却称为Java年,还有人称为Web开发年,但不论如何称呼,它都反映了一个事实,那就是Bill Joy将Java与互联网相结合的策略取得了成功。这一年的9月,Sun公司推出了其Java开发环境——Java Work Shop,这是一款基于浏览器的Java开发工具,但由于当时 Java在许多方面还不成熟,所以实际上Java Work Shop并不成功。同年发布的Symantec Visual Cafe由于是采用C/C++语言进行开发的,所以在性能与成熟度上比Work Shop好得多。Visual Cafe由Eugene Wang主持策划,它是在同一年发布的Java开发环境中唯一解决了与数据库连接的问题的开发环境,带有一套可以与数据库相连接的组件,无须太多编程,使用拖曳的方式就可完成大部分工作,这一优点使得Visual Cafe受到了Java开发人员的欢迎。这一年,IBM收购了OTI公司,从而得到了Dave Thomas的弟子John Duimovich、Dave Thomson、Mike Wilson等一大批IT精英,这之中还包括“生活在技术刀锋上的开发者”Brian Barry。

1997年,微软垄断案使得微软在Java开发环境上的努力受到了限制,Visual Cafe基于界面直观易用、可以很容易地连接各种数据源等功能再次受到开发人员的欢迎。这一年,IBM发布了Visual Age for Java。Visual Age for Java是面向代码库的开发环境,它提供了代码库和项目管理,以便于开发团队在 C/S环境下进行项目开发。但由于大多数Java开发人员比较熟悉面向文件的开发环境,还不太习惯面向代码库的开发,再加上Visual Age for Java对系统资源的要求比较高等因素,使得Visual Age for Java一开始就未被Java开发人员所认可。

1998—2000年,比较成功的Java开发环境是JBuilder,这是由于Borland较好地把握住了J2SE、J2EE和J2ME发布后Java技术升级的时机,全面支持Java 1.1和Java 1.2开发平台,它还提供了多种工具方便用户从旧的平台迁移到新的Java平台。JBuilder本身的80%是基于JDK 1.2进行开发的,它支持Java Beans、Enterprise Java Beans、JDBC等方面的应用开发,可以连接多种关系数据库。为支持分布式应用开发,JBuilder还集成了Visi Broker ORB、JSP server、数据库和EJB App Server,并提供Open Tools API以便于第三方工具集成。上述种种优点使得JBuilder一举超越Visual Cafe,成为当时最受欢迎的Java开发环境。

在众多Java开发环境中,1999年,IBM发布的Visual Age for Java Micro Edition是比较有特色的,它是由Erich Gamma和John Wiegand共同设计的,采用了Java 扩展机制,集成了JUnit测试框架,其当时所采用的架构深深地影响了后来Eclipse 1.0所采用的架构。同时,通过Visual Age for Java Micro Edition的开发,那些来自“未来世界”的IT精英们全面彻底地对Java技术进行了评估,得出了许多结论,这之中包括现在闹得沸沸扬扬的Swing和SWT的对比。此外,Sun公司将其收购的Net Beans变成了开源的Java IDE,这也是一件值得一提的事情。

纵观1996—2000年这5年的时间,随着Java及其相关开发应用的发展,Java开发环境也不断地完善,从CLEs进入了IDEs阶段。为了提高Java开发人员的开发效率,Java开发环境主要从两个方面进行改进与提高:一方面是提高集成在Java IDEs中的开发工具的性能和易用性;另一方面是将Java开发环境尽可能覆盖到整个软件的开发生命周期。

随着基于Web的采用N层结构的应用开发成为Java开发人员主要从事的开发任务,Java开发环境需要支持越来越多的技术,如XML、JSP、EJB和CORBA等,这就使得Java IDEs的规模变得越来越大,许多Java开发环境都集成了数据库、JSP Server和App Server。软件研究人员将上述IDEs不断膨胀的现象称为“IDEs大爆炸”。“IDEs大爆炸”现象发生以后,关于Java开发环境是走少而精的发展方向还是走大而全的发展方向,成了广大Java开发人员关注的问题。2001年,Java开发人员达到了200万,成为每个软件供应商都无法忽视的力量,这一年,Jet Brains推出了Java开发环境少而精的代表Intelli J IDEA。Intelli J IDEA明确地表示,只做最好的Java代码编辑器,不做什么文件都可以编写的编辑器。它关注Java开发人员的工作实际,并将这些工作进行了优化,由于减掉了一些可有可无的工具,所以价格上相对合理公道。当年,Intelli J IDEA击败JBuilder成为最受Java开发人员欢迎的Java开发环境。不过2002年,随着JBuilder将UML建模工具、JUnit测试框架以及Apache Struts等开发工具集成进来,大而全的发展方向又一次受到Java开发人员追捧。最全还是最好似乎使Java开发人员在选择Java开发环境时处于两难的状况,但实际上,当Eclipse 1.0发布时,这个问题已经得到了初步的解决,最好和最全是可以兼顾的。

Eclipse的出现不是从天上掉下来的,也不是某个天才拍脑袋想出来的,它是一群IT精英们集体的智慧结晶。早在1998年,IBM就打算开发新一代的工具平台,以便将它现有的各种开发工具统一起来,并减少开发各种工具时的重复劳动,同时希望在新的平台上建立新的Java开发环境。经过一段时间的准备,IBM开始建立开发团队,人员主要来自Visual Age for Java Micro Edition和Visual Age for Java两个项目的开发人员,选择的标准是过去10年至少开发过5~6个IDE。此外,IBM还联合9家公司共同成立了一个开源组织——Eclipse基金会,将Eclipse提供给开发人员使用,并在开源社区的帮助下进一步完善Eclipse本身。Eclipse在最初设计时,插件模型是静态的,不能实现插件的即插即用功能,即便是大受欢迎的Eclipse 2.1也是静态的。所以2004年发布Eclipse 3.0时,Eclipse进行了重大改进,采用OSGi插件模型,初步实现了插件的即插即用功能,至此,一个完美、可扩展的开发环境展现在Java开发者面前,这时Java开发人员数量已经达到300万。1.4 Java的现状

2004年,Eclipse 3.0的发布极大地刺激了Eclipse用户的增长,一年以后,Java开发人员使用Java开发环境的状况是怎样的呢?

现在的Java环境可以分为3个集团:第一集团是Eclispe,它大约占据1/3的份额;第二集团是Intelli J IDEA、Net Beans 和JBuilder,占据另外1/3的份额,相互之间旗鼓相当;第三集团是以JDeveloper和WSAD为代表的十几种Java开发环境,占据剩下的 1/3份额。每种开发环境占总份额的比重不超过5%。尽管在实现手段上各有不同,通过考察Eclipse、Intelli J IDEA、Net Beans 和JBuilder这些主流开发环境可以发现它们有一个共同的特点,那就是可扩展。这就是称现在的Java开发环境为XDEs的原因,IDEs已经“死亡”了4年,专业的开发人员需要了解这个事实,因为XDEs也快“死”了。

由于市场的压力,一个软件企业不仅要提高开发人员个体的工作效率,还要提高整个开发团队以及整个企业的开发效率,但在现有的Java开发环境XDEs下无法完全做到这些,所以新一代开发环境CDEs应运而生。Grady Booch和Alan W. Brown的研究表明,一个程序员一天工作时间的分配是这样的:分析约占16%(从5%~40%不等),设计约占14%(从1%~40%不等),编程约占16%(从0%~60%不等),测试约占10%,打电话约占3%,阅读约占7%(电子邮件、文档和杂志等),参加开发会议约占10%,无关的会议约占7%,其余约占17%。从这些数据可以发现,开发人员用于交流的时间约占工作时间的1/3,可见开发人员的相互交流是非常重要的。可是现有的主流Java开发环境一般仅将分析、设计、编程和测试等工具集成进来,却未包括用于交流的工具,这显然不合理。因此,所谓CDEs,就是将人与人、人与团队以及团队与团队进行交流的工具集成进来的开发环境,比如,CDEs常具有发送电子邮件、进行即时通信和屏幕分享等功能,通过实现无损耗过程的交流提高开发团队的开发效率。

现在已经商业化的CDEs是指Code Beamer Collaborative Development Platform和Code Pro Analyti X,它们都提供Eclipse的插件,可以与Eclipse集成在一起,使Eclipse升级成为一个CDEs。众所周知,Borland已经宣布开发基于Eclipse的新版JBuilder——Peloton,Peloton就是一个CDEs,它的发布意味着Java开发环境进入CDEs时代。1.5 Java虚拟机1.5.1 Java虚拟机的起源与构造“Java”这个词代表了4个相互关联的概念,分别为Java语言、Java API、Java Class文件格式、Java虚拟机。整个Java体系是基于Java 虚拟机构造的,正因为如此,才能实现Java的安全性和网络移动性。Java并非第一个采用“虚拟机”概念的体系,但却是第一个得到广泛运用的虚拟机平台。“虚拟”是一种隔离物理资源与逻辑资源的手段,Java虚拟机的“虚拟”则是用来隔离物理机器、底层操作系统与Java语言规范实现的手段。Java虚拟机讲解

虽然Java是一种面向对象的语言,Java开发人员平时大量使用的是对象间的多态、组合(Composition)、委派(Delegation),但当开发人员讨论虚拟机的时候,看见的基本概念却是“栈(Stack)”和“堆(Heap)”。Java虚拟机中没有寄存器的概念,方法调用是采用“栈”进行的,这是一种安全、简捷的方法。

Java虚拟机通过类装载器支持对类的隔离,这也是Java实现安全性的基础。每个类都具有自己的命名空间,在具有不同安全级别的沙箱中运行,因此不会产生低安全级别的代码越权访问高级别代码的情况。类装载器的出现是Java虚拟机与大部分用C语言实现的虚拟机的显著不同之处。

Java虚拟机的另外一个显著特点就是实现了自动垃圾收集。在往常,写程序的时候要牢记对象之间的关联,假若在程序块中申请了对象空间,就必须在出口将其释放掉。而自动垃圾收集功能带给开发者的最大好处就是可以非常方便地从整体上把系统的对象组织成一张对象图,只需往这张图中添加对象,维护对象之间的关联,却不需要自己做复杂的清扫工作。正是这种思维单纯的对象图的支持,使得OR Mapping(关系数据库与对象映射)技术在最近得以广泛应用,设计模式也更容易被Java群体所接受。1.5.2 虚拟机的优化

1995年,第一代JDK(Java Development Kit,Java开发工具包)出台之时,其虚拟机执行依靠字节码解释器(Byte Code Interceptor),也就是说,每条指令都由虚拟机来当场解释执行,这造成速度非常缓慢。有人开始总结“速度优化经验”,比如说尽量把所有代码都放在较大的方法中执行、少用接口等,这完全与Java语言的设计目的背道而驰,当时却是很多程序员津津乐道的经验之谈。原因无他,就是Java本身执行太慢了。

于是,Sun公司的工程师开始拼命想着提高执行速度。JIT静态编译器是1996年10月Sun公司公布的第一个编译器。JIT编译器在每段代码执行前进行编译,编译的结果为本地静态机器码,执行速度有了质的提高。Sun公司当时凭借其傲人的JIT编译器,在整个Java界受到热烈的追捧。1998年, Java 1.2发布时附带了JIT编译器,从此Java的使用者终于可以抛开“速度优化经验”了。

JIT静态编译器虽然可以解决一些问题,但是性能仍然和C/C++有很大的差距。对一段程序而言,一名优秀的程序员是如何来改进运行速度的呢?首先,他不会傻到把所有代码都优化,他会观察、思考到底哪段代码对整体性能影响最大,按照经验,整个程序10%~20%的代码会占据 80%~90%的运行时间,然后集中精力来优化这一段代码,就可以使整个程序的性能得到很大程度的优化。Hot Spot引擎就是模仿人工的这种方法进行优化的。在程序运行的开始,Java代码仍然解释执行,Hot Spot引擎开始进行采样(Profiling)。根据采样的结果确定哪段程序占用了较多的运行时间,就认为它是“Hot Spot”,它也就是目前程序的瓶颈。引擎会针对这段程序启动一个单独的线程进行优化。Hot Spot引擎不像原始的JIT编译器那样无差别地编译所有代码,而是集中精力对Hot Spot代码进行深度优化,使这部分代码执行起来更加迅捷,之前的静态编译器只能按照预定的策略进行编译优化,而Hot Spot引擎的优化是基于采样结果的,因此这种方法对所有应用程序都有效。1999年3月27日,Sun公司公布了第一个Hot Spot引擎。在随后的2000年5月公布的JDK 1.3中包含了Hot Sopt引擎,这也使JDK 1.3成了具有里程碑意义的发行版本。

Hot Spot代表的是一种动态编译技术。对Java这种大量使用委派、组合等面向对象特性的程序来说,动态编译相比静态编译有显著的优势,比如Method Inlining。方法的调用是很耗时的操作,假若可以把方法调用直接内嵌到调用者的代码中,就可以节省大量的时间,这就是Method Inlining。因为涉及类的重载,静态优化很难确切知道哪些属性和方法被重载,因此很难对Method进行合并,只好在方法内部进行静态编译,如果每个方法都很小,静态优化能起到的作用也就比较小。而动态编译因为可以随时掌握类的重载情况,就可以把相关的方法合并进行深度优化。现代的Java程序,特别是在设计模式教育得到普及之后,大量使用了类的继承、委派,形成了很多短小的方法,动态编译的优势就更加明显了。

继续进行优化的方法有几种:一是研究新的采样算法,因为采样关系到不同的优化策略,会对整体性能有比较大的影响;二是研究深度优化的方法;三是研究垃圾收集的算法。垃圾收集会使程序短暂的停顿,这会带来负面的用户体验,于是针对提高垃圾收集的效率和减少延迟,出现了五花八门的算法,如渐进式收集、火车算法等。在多处理器的时候,如何利用多处理器进行并行收集也是研究的一个热点,这方面,BEA的JRocket走在了前面。1.5.3 现实生活中的虚拟机

本小节将介绍目前市面上可见的各种虚拟机。

首先要提到的,毫无疑问是Sun公司的虚拟机。作为大众心目中的“官方实现”,Sun公司拥有最大的用户群,并且拥有“兼容基准”的地位,其他虚拟机都必须考虑和Sun公司虚拟机的兼容性问题。比如,JRocket在某些特殊情况下表现出和Sun公司产品不同的特性,可能对程序运行有影响。不过Sun公司也的确没有让广大用户失望,虽然早期性能比不上Symantec,后来1.2版本的性能又被IBM超越,但Sun公司一直在努力革新,特别是 1.4.2版本之后,性能有了长足的进步。虽然JDK 1.5的虚拟机在性能上没有什么提高,但是增强了稳定性,据说修改了8000处Bug。

其次是IBM。IBM的JDK在1.3版本时代创下了最好的性能记录,从此树立了高端形象,特别是Web Sphere产品,得到了很好的评价。其JDK也是最早支持64bit的JDK之一。直到现在,IBM JDK在高端领域仍然是和BEA有一拼的。

然后是后起之秀BEA的JRocket。BEA在Java虚拟机领域异军突起,不免让人有些瞠目,不过它采取的战略特别简单:自己没有,索性花钱购买在此领域深有研究的JRocket,再在前面加上BEA的标志。JRocket瞄准高端服务器市场,在多处理器环境下有不俗的表现。

除此之外,还有几个开放源代码的Java虚拟机值得一提。首先就是大名鼎鼎的Jikes RVM。说起其大名,大多数人都知道Jikes编译器是 IBM开发的,效率比同时代的Javac编译器高得多,很多开发者都使用Jikes编译器来取代Javac。Jikes RVM是IBM开源出来的一整套虚拟机技术,包含了JIT、GC 的完整实现,在其网站上也有众多论文,实在是深入研究 Java 虚拟机的绝佳资源(http://jikesrvm.sourceforge.net)。

Kaffe是一个老牌的Java虚拟机,不过现在已经很少听到了。

GNU有GCJ和GNU classpath两个计划。GNU classpath是一个底层实现,而GCJ是支持Java的预编译器。

时光流转,轰轰烈烈的Java虚拟机性能争论仿佛还在持续之中,新的争论却已经提升到了“Java的性能是否已经超越C/C++”。Joakim Dahlstedt 是 JRockit 的主要架构设计师之一。他坚持认为, Java绝不是一种速度慢、效率低的语言,Java虚拟机是一个关键的组件,确保了系统的部署与运行和开发一样快速、轻松。特别是目前的开发趋势是采用大量预制的框架,动态编译有可能比C/C++这样的静态优化获得更好的性能。1.6 Java开发环境搭建Java开发环境搭建

Java应用软件开发需要的开发环境配置要求如表1-1所示。表1-1 Java应用软件开发需要的开发环境

软件开发包的下载地址如下。(1)下载Java安装文件的地址如下。

http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html(2)下载Eclipse IDE for Java Developers的地址如下。

http://www.eclipse.org/downloads/1.6.1 安装JDK和配置Java开发环境

首先下载使用JDK的包,并进行安装。例如,得到JDK 1.6版本的安装文件jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe,双击进行安装,接受许可,选择需要安装的组件和安装路径后,单击“下一步”按钮,即可完成安装。

安装完成后,打开CMD窗口,在CMD窗口中输入java –version命令,即可检查JDK是否安装成功。1.6.2 Eclipse的安装

JDK安装成功后,可以直接安装Eclipse。例如使用Eclipse 4.5,得到其压缩包后,该包不需要安装,直接解压即可执行其中的eclipse.exe文件,Eclipse可以自动找到用户前期安装的JDK路径。1.7 本章小结

本章主要介绍了Java基本概念方面的内容,包括什么是Java语言、Java语言的诞生、Java语言的发展、Java的现状,以及Java虚拟机和Java开发环境搭建。通过本章的学习,读者可以对Java开发有初步认识,在搭建好Java开发环境的同时,为后续章节的学习做好准备。课后练习题一、选择题

1.Java语言的作者是( )。

A.Brian W.Kernighan

B.Dennis M.Ritchie

C.Bruce Eckel

D.James Gosling

2.Java开发工具最常用的是( )。

A.Ecplise集成开发环境

B.Notepad++

C.记事本

D.Ultraedit

3.以下( )是Java虚拟机。

A.Hot Spot VM

B.J9 VM

C.Zing VM

D.Dalvik VM二、简答题

简述Java语言相比C语言有哪些优势。第2章 面向对象程序初步设计

■本章将从面向对象的概念出发,首先介绍程序设计种类、面向对象程序设计的特征;然后介绍面向对象程序设计中的对象、类、属性等重要概念,并描述类、属性、方法的定义和声明,讲述类的构造器的概念及使用,介绍对象的创建和使用;接着介绍如何通过类的定义来实现信息隐藏和封装,介绍Java源文件的结构以及package和import的用法;最后介绍JDK中常用的包。2.1 面向对象的概念2.1.1 从结构化程序设计到面向对象程序设计面向对象类和对象的介绍

面向对象程序设计与结构化程序设计都是设计和构造程序的方法。近年来,面向对象程序设计的方法越来越受到人们的重视,已成为解决软件危机的新途径,而结构化程序设计方法的使用在逐渐减少。几乎每一种最新推出的程序开发工具或语言都采用了面向对象程序设计的思路,面向对象程序设计形成了一套与结构化程序设计具有很大差异的方法。

结构化程序设计方法又称面向过程设计方法,起源于20世纪70年代。在这之前的程序设计基本采用过程式程序设计,虽然汇编语言已经取代了机器语言,但是对于一般的程序设计人员而言,它还是太抽象、太隐晦。如果计算机要得到更大的发展,必须发明一些比汇编语言更易于阅读和编写的程序语言。在这种需求的刺激下,结构化程序设计方式产生了结构化程序设计,主要特点是采用自顶向下逐步求解的程序设计方法:使用3种基本控制结构构造程序,任何程序都可由顺序、选择、重复3种基本控制结构构造。结构化设计的根本目标就是把复杂的系统分解成简单模块的层次结构。例如装修房子,以前的过程式程序设计要求必须从客厅开始装修,然后是卧室、厨房、卫生间,顺序不能颠倒;而结构化程序设计方式将客厅、卧室、卫生间、厨房分别独立成一个模块,互相之间可以互不干扰地逐个进行。

虽然结构化程序设计解决了软件设计开发中的一部分问题,但是它仍然存在不足。用结构化方法开发的软件,稳定性、可修改性和可重用性都比较差,这是因为结构化方法的本质是功能分解,从代表目标系统整体功能的单个处理着手,自顶向下不断把复杂的处理分解为子处理,这样一层一层分解下去,直到仅剩下若干个容易实现的子处理功能,再用相应的工具来实现各个最底层的功能。因此,结构化方法是围绕实现处理功能的“过程”来构造系统的。然而,用户需求的变化大部分是针对功能的,因此,这种变化对于基于过程的设计来说是灾难性的。用这种方法设计出来的系统结构常常是不稳定的,用户需求的变化往往会造成系统结构的较大变化,从而需要花费很大的代价才能实现这种变化。

结构化程序设计的局限性催生了面向对象的思想。面向对象(Object Oriented,OO)并不是一个新概念,它在20世纪70年代就出现了,因为受到软/硬件的限制,直到20世纪90年代才为大众所接受,并成为程序设计的主流思想。面向对象的方法与结构化程序设计的根本区别在于把系统看成一个完成某项任务的对象集合,对象是系统对消息做出响应的事物,所以面向对象方法中关注的不是它应该做什么,而是它如何做出反应,也就是消息。

在面向对象设计思想的指导下,产生了第一个面向对象的语言——20世纪60年代的Simula-67。它的作用是解决模拟问题。典型应用是模拟银行系统的运作(银行是最早采用计算机的行业之一),将银行的出纳部门、客户、业务等实体模拟成一个个对象,把这些程序的运行中除了状态外其他方面都一样的对象归纳在一起,就成了更高抽象层面的“类”。然后,在面向对象的思想指导下产生了成功的面向对象编程语言——Smalltalk,并在其基础上诞生了应用更加广泛的面向对象编程语言——C++及Java。2.1.2 面向对象的特征1.对象唯一性

每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。2.抽象性

抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样的一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。3.封装性

封装性就是把对象的属性和服务结合成一个独立的单位,并尽可能隐蔽对象的内部细节。4.继承性

继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础上进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

继承性是面向对象程序设计语言不同于其他语言的最重要的特点,是其他语言所没有的。5.多态性

多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象收到同一消息可以产生不同的结果,这种现象称为多态性。2.2 面向对象程序设计2.2.1 知识准备:面向对象编程术语

● 类(Class):类是对某种类型的对象定义变量和方法的原型。它表示对现实生活中的一类具有相同特征的事物的抽象,是面向对象编程的基础。

● 对象(Object):也称为实例(Instance),是类的具体存在。

● 属性(Attribute):也称为成员变量、实例变量(Instance Variable)、字段(Field),表示一个对象所具有的状态。

● 方法(Method):用于表示对象可以执行的动作,包括名称、参数、返回类型及方法体等内容。

● 构造器(Constructor):也称为“构造方法”,是用于创建和初始化一个实例的特殊方法,包括名称、参数及方法体等。需要注意的是,它的名称必须和类名一致。

● 包(Package):可以用来组织编写类,使得类的组织更加有序。2.2.2 知识准备:对象

人们每天的生活、工作无时无刻不在和“对象”打交道,如衣服、食物、房子、汽车等。当处理这些对象时,不会将这些对象的属性(对象所具有的特点)和操作分开,例如进出“房间”时,不会将“房门”这个属性和“开门”这个操作分开,它们是联系在一起的。

面向对象的编程思想力图使程序和现实世界中的具体实体完全一致。对象的属性描述了对象的状态,对象的行为描述了对象的功能。人们通过观察对象的属性和行为来了解对象。对象一般有如下特性,可以让程序员乃至非专业人员更好地理解程序。(1)有一个名字以区别于其他对象。(2)有一些状态用来描述它的某些特征。(3)有一组操作,每个操作决定了对象的一种功能或行为。

对象涉及一个从“具体”到“抽象”,再从“抽象”到“具体”的过程。所谓“从‘具体’到‘抽象’”,也就是将现实世界中一个个具体的“物体”(或称为“实体”(Entity))相应的特征和行为抽象出来,并且将各种具有相同特征的“物体”分为一个“类”,如“汽车”类、“人”类、“房子”类等;而所谓的“从‘抽象’到‘具体’”,就是将上面抽象出来的对应物体的“类”,使用具体的计算机语言来描述。使用Java语言来描述“汽车”类、“人”类、“房子”类等,和使用C++语言来描述这些类是有区别的。

正如前面所述,“类”相对于现实世界中的“实体种类”(Entity Category),是现实生活中某类实体的抽象,而对象或者实体(Instance)指的是这些种类中的一个个具体存在,如 Benz-600、Santana-2000等具体的汽车,或者张三、李四等具体的个人。类和对象是面向对象编程思想的核心和基础。类是作为对象的蓝图而存在的,所有对象都依据相应的类来产生,在面向对象的术语中,这个产生对象的过程称为“实例化”。2.2.3 知识准备:类

如果说一切都可以成为对象,那么是什么决定了某一类对象的外观和行为呢?

类用来描述一组具有相同特征的对象的行为特征和应包括的数据。

类包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。实际上类本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,就在内存中创建了类的一个新的实例,即对象。类应该包括如下两个方面的内容。(1)属性:用来描述对象的数据元素,也称为数据/状态。(2)方法:用于对对象的属性进行的操作,也称为行为/操作。2.2.4 知识准备:类的声明

Java语言中,类的声明也称类的定义,其语法规则如下。[< modifiers>] class < class_name>{[][][]}

为修饰符,可用的关键字有public、abstract和final等(关键字是Java语言中赋于特定含义的并用作专门用途的单词,类名、方法名、属性名及变量名不能是关键字),用于说明所定义的类有关方面的特性。对于各种关键字和它们的含义及各自的适用范围,请看本书后续相应章节的介绍。

类成员有3种不同的访问权限:一是公有(用public关键字修饰)类成员,可以在类外访问;二是私有(用private关键字修饰 )类成员,只能被该类的成员函数访问;三是保护(用protected关键字修饰 )类成员,只能被该类的成员函数或派生类的成员函数访问。

class关键字表明这是一个类的定义,将说明一个新类型的对象看起来是什么样的。是类的名字。

是属性(Attribute)声明部分。

是构造器(Constructor)声明部分。

是方法(Method)声明部分。

这里,将这些操作属性的方法定义得很简单:每个属性都有相应的设置(setter)和获取(getter)方法,设置方法将传入的参数赋给对象的属性,获取方法取得对象的属性。例如,将“学生”实体的基本特征当成“学生”类的属性,再定义一些方法来对这些属性进行操作,示例如下。

源文件:Student.java。具体示例代码如下。public class Student {//定义属性String name;String sex;int grade;int age;// 定义属性“name”的设置方法public void set Name(String _name) {name =_name;}// 定义属性“name”的获取方法public String get Name() {return name;}// 定义属性“sex”的设置方法public void set Sex(String _sex) {sex =_sex;}// 定义属性“sex”的获取方法public String get Sex() {return sex;}// 定义属性“grade”的设置方法public void set Grade(int _grade) {grade =_grade;}// 定义属性“grade”的获取方法public int get Grade() {return grade;}// 定义属性“age”的设置方法public void set Age(int _age) {age =_age;}// 定义属性“age”的获取方法public int get Age() {return age;}}2.2.5 知识准备:属性的声明

类的定义中所包含的数据称为属性,也称为数据成员,比如2.2.4小节示例中的Student类中定义了4个属性——name、sex、grade、age。属性声明的语法规则如下。

[< modifiers>] < attr_name>;

< modifiers>为修饰符,可用的关键字有public、private、protected、final、static等,用于说明该属性的一些性质。

是该属性的数据类型,属性可以是Java基本类型的一种,例如下述示例的My Class类中声明的属性class ID等,也可以是任何类型的对象,通过引用它进行通信,例如My Class类中声明的属性my Teacher。

是属性名称,属性名称的首字母一般采用小写方式。

源文件:My Class.java。具体示例代码如下。public class My Class {int class ID;String class Name;int student Number;Teacher my Teacher;}Teacher.javapublic class Teacher {String name;int id;String course;}2.2.6 知识准备:方法的声明

类的定义中还可以包含方法的声明,Java的方法决定了对象可以接收什么样的信息。方法的基本组成部分包括名称、参数、返回值和方法体,声明语法规则如下。< modifiers>([< argu_list>]) {[< method body>]}

< modifiers>为修饰符,可用的关键字有public、private、protected、abstract、static和final,用于说明方法的属性。

是该方法的返回值类型,可以是任何合法的Java数据类型。

是方法名。

是方法的参数列表,包括要传给方法的信息的类型和名称。如果有多个参数,中间用逗号“,”分隔。

是方法体,可以有0到多行Java语句。

如下示例在My Class类中声明了一个名为Change Teacher的方

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载