Java是当前的主流编程语言之一,常年稳居TIOBE编程语言排行榜前五。Java的使用领域非常广泛,包括了桌面端编程、Web端编程、移动端编程等几乎所有的编程领域。Java是Web端编程使用最广泛的编程语言之一。要学习Web端编程,需要了解Java语言的知识架构、界面编程工具、常用教材、学习路线等主要内容。
在开始描述主要内容之前,首先来了解一下Java语言的发展历程[24][25]。
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
Java的创立非常具有戏剧性。1990年12月SUN公司开始了一个叫做“Stealth计划”的内部项目,起因是因为该公司的工程师帕特里克·诺顿被自己开发的C和C语言编译器折磨得不胜其烦。因为其中的API(Application Programming Interface,应用程序接口)非常不好用。于是决定改用NeXT,并向公司申请了该项目。“Stealth 计划”后来被更名为“Green计划”,并且Java之父詹姆斯·高斯林(James Gosling)和麦克·舍林丹也加入了该计划。他们和其他几个工程师在位于加利福尼亚州门罗帕克市沙丘路的一个小工作室里一起研究和开发新技术。作为富有创新意识的一群人,他们远见卓识地将目光瞄准了下一代智能家电程序设计。项目组最初打算用C 语言进行项目开发,但是很多成员包括SUN的首席科学家比尔·乔伊很快发现了一些严重的问题:1)C和可用的API在某些方面存在很大问题;2)项目组使用的是内嵌类型平台,可以使用的资源极其有限;3)C语言太复杂,以至很多开发者在编写程序时经常出错;4)C语言缺少垃圾自动回收机制;5)C语言缺少可移植的安全性、分布式程序设计、多线程等功能;6)C语言编写的程序无法很方便地移植到各种设备平台上。基于上述原因,同时考虑到项目资金的限制,比尔·乔伊决定开发一种兼具C语言和Mesa语言优点的新语言。最初,高斯林试图修改和扩展C 的功能来实现目的,但是后来他放弃了。他决心创造出一种全新的语言,并以他办公室外的树命名为“Oak”(橡树)。
经过艰苦卓绝的努力,到1992年的夏天,项目组已经能够演示新平台的一部分了,包括Green操作系统,Oak的程序设计语言和类库,以及支撑该操作系统的硬件。最初的计划是将该操作系统运行在一种名为Star7且类似PDA(Personal Digital Assistant,个人数字助理,简称PDA)的设备上。这种设备的特点是具有鲜艳的图形界面,同时使用被称为“Duke”的智能代理来帮助用户。1992年12月3日,项目组使用这种设备进行了展示。同年的11月,Green计划被转化成了一个SUN公司的全资子公司,即FirstPerson有限公司。项目组随即被重新安排到了帕洛阿尔托。FirstPerson团队对建造一种高度互动的设备感兴趣。在时代华纳发布了一个关于电视机顶盒的征求提议书时,FirstPerson团队随即敏锐地觉察到了机会,于是提出了一个机顶盒平台的提议。遗憾的是,有线电视业界觉得FirstPerson的平台会释放过多的控制权给用户,因此FirstPerson的投标败给了SGI。雪上加霜的是,与3DO公司的另外一笔关于机顶盒的交易也没能够获得成功。FirstPerson走到了山穷水尽,没有资金支持继续研究的地步,于是FirstPerson公司被并购回了SUN公司。
1994年的6、7月间,在经历了一场历时三天的激烈讨论之后,项目组的决定再一次改变努力的方向。这次他们决定将该技术应用于万维网。他们认为随着Mosaic浏览器的到来,因特网正在向高度互动的目标演进,而这一远景正是他们在有线电视网中看到的。于是,帕特里克·诺顿写了一个小型万维网浏览器原型,即WebRunner。后来,又被更名为HotJava。同年,Oak语言被更名为Java。1994年10月,项目组向公司高层演示了HotJava和Java平台。
1995年5月23日SunWorld大会上,SUN公司的科学指导约翰·盖吉宣告了Java技术的诞生。1996年1月,Sun公司成立了Java业务集团,专门开发Java技术。
为了让读者对Java的发展历程有更为清晰的了解,图 4‑14按照年份的先后顺序展现了Java发展历史上的各个版本及其相关技术的改进。
图 4‑14 Java发展年代列表
Java编程一般使用IntelliJ IDEA或Ecplise软件。Ecplise是免费开源的,而IntelliJ IDEA则需要付费使用。Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,它由非营利软件供应商联盟Eclipse基金会管理。通过Ecplise可以非常方便的进行Java项目的开发。Ecplise的下载地址为:https://www.eclipse.org/downloads/。
在之前的文章《编程语言的通用架构》中,通过图 4‑2呈现了编程语言的通用架构,学习其它编程语言只需将该通用架构拓展到要学习的编程语言上即可。将图 4‑2中的编程语言的通用架构拓展到Java语言得到了图 4‑15中的Java语言的知识架构。下面将根据图 4‑15来描述如何学习Java语言。
图 4‑15 Java语言的知识架构
1. Java语言的核心模块
(1) Java中的数据类型
了解Java中变量的数据类型的种类,并熟练掌握不同数据类型的变量的定义和赋值的方法。也就是说,必须理解整型、实型、字符型、逻辑型、枚举型、数组的定义及其赋值方法。注意,这里将数组视为一种特殊的数据类型。与C++语言相比,在Java中不存在结构体类型,如果需要像C++语言那样使用结构体数据类型,可以通过类的功能来实现。
(2) Java中的流程控制语句
熟练掌握Java中的流程控制语句的实现方法。具体来说,需要掌握分支语句:if语句、switch语句的实现方法;循环语句:for语句、while语句、do-while语句的实现方法。
(3) Java中方法的定义、实现与方法重载
在Java语言中,函数被称为方法。学习Java,需要熟练掌握Java中方法的定义与实现、方法的调用、方法的重载等,明白在Java中使用方法的好处,会利用方法实现代码的封装,从而提高代码的安全性。
(4) Java中的类的定义与实现、类的继承与派生
面向对象是Java语言的核心思想和优势。在Java语言中一切皆对象,而对象是类的实例化,可见类在Java中的重要性。读者要理解面向对象编程的核心思想,熟练掌握Java中类的定义和实现方法。深刻理解类的派生和继承的主要思想以及类的继承和派生的必要性和优势。认真掌握类的继承和派生的方法。理解多态性的基本概念以及通过类来实现多态性的方法。
2. Java语言的扩展模块
Java语言的扩展模块主要包括:文件I/O、图像处理、网络通信、界面编程、数据库操作、并行计算、混合编程等。
(1) 文件I/O
在Java中,所有的I/O机制都是基于数据“流”方式进行输入/输出。这些“数据流”可视为同一台计算机不同设备或网络中不同计算机之间流动的数据序列。Java把这些不同来源和目标的数据统一抽象为“数据流”。这些流序列中的数据通常有两种形式:文本流和二进制流。读者需要熟练掌握Java中文件I/O的主要方法。
(2) 图像处理
Java中的图像处理主要是指图像、动画、视频等的显示、编辑、分析、保存等一系列的操作。Java图像处理功能非常强大,很多图像、视频处理软件都是基于Java语言开发的。读者如果希望从事Java项目开发方面的工作,需要熟练掌握Java的图像处理扩展模块。可以使用Java中的AWT工具集方便地实现绘图功能,AWT的中文名称是抽象窗口工具集(Abstract Window Toolkit,简称AWT)。
(3) 网络通信
Java是伴随着互联网的诞生而发展强大的语言,其核心优势是可以非常方便地实现互联网间的网络通信,特别是网站页面与服务器端之间的通信。掌握好基于Java的网络通信技术对于Java互联网项目的开发至关重要。
(4) 界面编程
Eclipse中的SWT和JFace这两个工具包为开发人员进行Java界面编程提供了非常强大的功能。开发者既可以采用拖拽方式实现界面的编写,也可以使用编写代码行的方式编写界面。Java编写的软件界面非常美观,很多著名的软件采用Java进行界面编程,例如, MATLAB的内核是基于C语言的,但其界面编程却是基于Java的。
(5) 数据库操作
Java使用JDBC包实现数据库的操作。JDBC全称Java Database Connectivity,它可以通过载入不同的数据库的“驱动程序”而与不同的数据库进行连接。JDBC优势在于对不同的数据库都具有很好的兼容性,而且可以使用同一套操作来操作不同的数据库。通过Java编程实现对数据库的操作是从事Web编程的核心内容之一,需要熟练掌握。
(6) 并行计算
Java可以通过特定的计算框架实现并行计算,例如Fork/Join计算框架等。当处理大数据时,采用Java进行并行计算会显著提升计算的效率,但是当数据量较小时则没有必要。Hadoop是最著名的大数据计算框架之一,它就是使用Java进行开发的。掌握Java的并行计算扩展模块,对于进行大规模的数据处理是必须的。
(7) 混合编程
使用Java与其它语言进行混合编程是非常常见的需求。例如在开发一个AI计算架构时,往往采用Java语言编写主体框架,而使用Java调用Python来实现具体的AI算法。这好比建造一座建筑时,主体架构使用钢材,而局部使用砖头。因此,掌握Java的混合编程技巧就显得非常有必要。
关于Java语言的界面编程工具、常用教材、学习路线等内容的详细介绍,请读者查阅图书《人工智能怎么学》。
如果想了解人工智能中移动端编程的相关内容,敬请关注本公众号的下一篇文章《人工智能中的移动端编程》。
关于人工智能中编程能力和技能训练的更多介绍,可以购买《人工智能怎么学》进一步阅读。
图书购买方式
京东:https://item.jd.com/13395339.html
当当:http://product.dangdang.com/29469230.html
天猫:https://detail.tmall.com/item_o.htm?id=687374654836
为了让图书惠及更多的读者,为更多想学习人工智能的人提供帮助,经过向出版社申请,对图书《人工智能怎么学》的部分内容进行改编和连载。图书《人工智能怎么学》的全部内容包含了初级入门、中阶提高以及高级进阶三个级别的内容。连载的内容主要是初级入门级别,适合想对人工智能进行快速和高效入门的读者,对于已有一定的人工智能学习基础,希望进一步进阶或提高的读者,则需要购买图书《人工智能怎么学》,学习中阶提高以及高级进阶的内容。此外,对于学习人工智能感兴趣的读者,也可以加入知识星球《人工智能怎么学》,知识星球是一个构建学习社群的平台,通过加入《人工智能怎么学》的社群,你将获得更多的学习资料和课程信息。
与作者互动和了解更多信息
想跟作者一起学习人工智能和互动,你可以加入如下社群:
知识星球:https://t.zsxq.com/0aLkVg0os
QQ群:600587177
想了解更多关于人工智能学习及实践的内容,请关注如下媒体:
官方网站:https://bigdatamininglab.github.io
官方微信公众号:人工智能怎么学(可扫描下方二维码或者微信搜索“人工智能怎么学”添加关注)
CSDN:https://blog.csdn.net/audyxiao001
参考文献
- Robert C. Martin. 代码整洁之道(第2版)[M]. 韩磊, 译. 北京: 中国工信出版集团, 人民邮电出版社, 2020.
- Herb Sutter, Andrei Alexandrescu. C++编程规范:101条规则、准则与最佳实践[M]. 刘基诚, 译. 北京: 人民邮电出版社, 2016.
- 杨冠宝. 阿里巴巴Java开发手册[M]. 北京: 电子工业出版社, 2020.
- James Gosling et al. The Java Language Specification:Java SE 8 Edition [M]. Upper Saddle River: Addison-Wesley, 2014.
- 老九君. C++的发展简史[EB/OL]. https://www.cnblogs.com/ljxt/p/11636342.html, 2019-10-08.
- 翁惠玉. C++程序设计:思想与方法(第2版)[M]. 北京: 人民邮电出版社, 2012.
- 谭浩强. C++程序设计(第3版)[M]. 北京: 清华大学出版社, 2015.
- Siddhartha Rao. Sams Teach Yourself C++ in One Hour a Day (Eighth Edition) [M]. Boston: Pearson, 2017.
- Bjarne Stroustrup. Programming:Principles and Practice Using C++ (Second Edition) [M]. Crawfordsville: Pearson, 2014.
- Bjarne Stroustrup. C++语言设计和演化[M]. 裘宗燕, 译. 北京: 人民邮电出版社, 2020.
- Stephen Prata. C++ Primer Plus(中文第6版)[M]. 张海龙 等, 译. 北京: 人民邮电出版社, 2020.
- Stanley B. Lippman, Josée Lajoie, Barbara E. Moo. C++ Primer(中文第5版)[M]. 王刚 等, 译. 北京: 电子工业出版社, 2013.
- Stanley B. Lippman. Essential C++(中文版)[M]. 侯捷, 译. 北京: 电子工业出版社, 2013.
- 侯捷. STL源码解析 [M]. 武汉: 华中科技大学出版社, 2015.
- Ivor Horton. C++标准模板库编程实战 [M]. 郭小虎 等, 译. 北京: 清华大学出版社, 2017.
- Brian W. Kernighan, Rob Pike. 程序设计实践 [M]. 裘宗燕, 译. 北京: 机械工业出版社, 2003.
- Bruce Eckel. C++编程思想(两卷合订本)[M]. 刘宗田 等, 译. 北京: 机械工业出版社, 2011.
- Scott Meyers. Effective C++:改善程序与设计的55个具体做法(第3版)[M]. 侯捷, 译. 北京: 电子工业出版社, 2011.
- Scott Meyers. More Effective C++:35个改善编程与设计的有效方法 [M]. 侯捷, 译. 北京: 电子工业出版社, 2020.
- Scott Meyers. Effective STL:50条有效使用STL的经验 [M]. 潘爱民 等, 译. 北京: 电子工业出版社, 2013.
- 陆文周. Qt 5开发及实例(第4版)[M]. 北京: 电子工业出版社, 2019.
- 王维波. Qt 5.9 C++开发指南 [M]. 北京: 人民邮电出版社, 2018.
- 冯振, 郭延宁, 吕跃勇. OpenCV 4快速入门 [M]. 北京: 电子工业出版社, 2020.
- ghscarecrow. Java的发展历程[EB/OL]. https://blog.csdn.net/ghscarecrow/article/details/82318636, 2018-09-02.
- JMCui. Java的发展历程[EB/OL]. https://www.cnblogs.com/jmcui/p/11796303.html, 2019-11-07.
- 明日科技. Java从入门到精通(第5版)[M]. 北京: 清华大学出版社, 2019.
- Kathy Sierra, Bert Bates. Head First Java (Second Edition) [M]. Sebastopol: O’Reilly, 2005.
- Bruce Eckel. Java编程思想(第4版)[M]. 陈昊鹏, 译. 北京: 机械工业出版社, 2007.
- Cay S. Horstmann. Java核心技术 卷I:基础知识(第11版)[M]. 林琪 等, 译. 北京: 机械工业出版社, 2019.
- Cay S. Horstmann. Java核心技术卷Ⅱ:高级特性(第11版)[M]. 陈昊鹏, 译. 北京: 机械工业出版社, 2020.
- Joshua Bloch. Effective Java(中文第3版)[M]. 俞黎敏, 译. 北京: 机械工业出版社, 2019.
- 周志明. 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)[M]. 北京: 机械工业出版社, 2019.
- Brian Goetz. Java并发编程实战 [M]. 童云兰 译. 北京: 机械工业出版社, 2012.
- Kamalmeet Singh. Java设计模式及实践 [M]. 张小坤 等, 译. 北京: 机械工业出版社, 2013.
- 明日科技. Java Web从入门到精通(第3版)[M]. 北京: 清华大学出版社, 2019.
- 未来科技. HTML5+CSS3+JavaScript从入门到精通[M]. 北京: 中国水利水电出版社, 2017.
- Elisabeth Robson, Eric Freeman. Head First HTML与CSS(第2版)[M]. 徐阳 等, 译. 北京: 中国电力出版社, 2013.
- Adam Freeman. HTML5权威指南 [M]. 谢廷晟 等, 译. 北京: 人民邮电出版社, 2014.
- Eric A. Meyer, Estelle Weyl . CSS权威指南(第4版)[M]. 安道, 译. 北京: 中国电力出版社, 2019.
- David Flanagan. JavaScript权威指南(第7版)[M]. 李松峰, 译. 北京: 机械工业出版社, 2021.
- 许令波. 深入分析Java Web技术内幕(修订版)[M]. 北京: 电子工业出版社, 2014.
- Nicholas S. Williams. Java Web高级编程 [M]. 王肖峰, 译. 北京: 清华大学出版社, 2015.
- 孙卫琴. Tomcat与Java Web开发技术详解(第3版)[M]. 北京: 电子工业出版社, 2019.
- 郭霖. 第一行代码Android(第3版)[M]. 北京: 人民邮电出版社, 2020.
- 欧阳燊. Android Studio开发实战:从零基础到App上线(第2版)[M]. 北京: 清华大学出版社, 2018.
- Dmitry Jemerov, Svetlana Isakova. Kotlin实战 [M]. 覃宇 等, 译. 北京: 电子工业出版社, 2017.
- Kristin Marsicano, Brian Gardner, Bill Phillips, Chris Stewart. Android编程权威指南(第4版)[M]. 王明发, 译. 北京: 中国工信出版集团, 人民邮电出版社, 2021.
- 刘望舒. Android进阶之光(第2版)[M]. 北京: 电子工业出版社, 2021.
- 邓凡平. 深入理解Android: Java虚拟机ART [M]. 北京: 机械工业出版社, 2019.
- 任玉刚. Android开发艺术探索[M]. 北京: 电子工业出版社, 2015.
- 林学森. 深入理解Android内核设计思想(上、下册)(第2版)[M]. 北京: 人民邮电出版社, 2017.
- 何红辉, 关爱民. Android 源码设计模式解析与实战(第2版)[M]. 北京: 人民邮电出版社, 2017.
- Christian Keur, Aaron Hillegass. iOS编程(第6版)[M]. 王风全, 译. 武汉: 华中科技大学出版社, 2019.
- 张益珲. Swift 4从零到精通iOS开发[M]. 北京: 清华大学出版社, 2019.
- Aaron Hillegass, Mikey Ward. Objective-C编程(第2版)[M]. 王蕾 等, 译. 武汉: 华中科技大学出版社, 2015.
- Matthew Mathias, John Gallagher. Swift编程权威指南(第2版)[M]. 陈晓亮, 译. 北京: 人民邮电出版社, 2017.
- Kazuki Sakamoto, Tomohiko Furumoto. Objective-C高级编程:iOS与OS X多线程和内存管理[M]. 黎华, 译. 北京: 人民邮电出版社, 2013.
- Erica Sadun. iOS Auto Layout开发秘籍(第2版)[M]. 孟立标, 译. 北京: 清华大学出版社, 2015.
- 珲少. iOS性能优化实战[M]. 北京: 电子工业出版社, 2019.
- 罗巍. iOS应用逆向与安全之道[M]. 北京: 机械工业出版社, 2020.
- Gaurav Vaish. 高性能iOS应用开发[M]. 梁士兴 等, 译. 北京: 人民邮电出版社, 2017.
- 刘浩. MATLAB R2020a完全自学一本通 [M]. 北京: 电子工业出版社, 2020.
- 天工在线. MATLAB 2020从入门到精通 [M]. 北京: 中国水利水电出版社, 2020.
- 苗志宏, 马金强. MATLAB面向对象程序设计[M]. 北京: 电子工业出版社, 2014.
- 徐潇, 李远 . MATLAB面向对象编程——从入门到设计模式(第2版)[M]. 北京: 北京航空航天大学出版社, 2017.
- 王文峰 等. MATLAB计算机视觉与机器认知[M]. 北京: 北京航空航天大学, 2017.
- 杨淑莹, 郑清春. 模式识别与智能计算——MATLAB技术实现(第4版)[M]. 北京: 电子工业版社, 2019.
- Eric Matthes. Python编程:从入门到实践(第2版)[M]. 袁国忠, 译. 北京: 人民邮电出版社, 2020.
- Magnus Lie Hetland. Python基础教程(第3版)[M]. 袁国忠, 译. 北京: 人民邮电出版社, 2018.
- Luciano Ramalho. 流畅的Python [M]. 安道 等, 译. 北京: 人民邮电出版社, 2017.
- Brett Slatkin. Effective Python:编写高质量Python代码的90个有效方法(第2版)[M]. 爱飞翔, 译. 北京: 机械工业出版社, 2021.
- Jan Erik Solem. Python计算机视觉编程[M]. 朱文涛 等, 译. 北京: 人民邮电出版社, 2014.
- Andreas C. Müller. Python机器学习基础教程[M]. 张亮, 译. 北京: 人民邮电出版社, 2018.
- 魏坤. Julia语言程序设计[M]. 北京: 机械工业出版社, 2018.
- 郝林. Julia编程基础(第2版)[M]. 北京: 人民邮电出版社, 2020.
- Ben Lauwens, Allen B. Downey. Think Julia [M]. Sebastopol: O’Reilly, 2019.
- Jalem Raj Rohit. Julia Cookbook [M]. Birmingham: Packt Publishing, 2018.
- Zacharias Voulgaris. Julia数据科学应用 [M]. 陈光欣, 译. 北京: 人民邮电出版社, 2018.
- 朱红庆. Julia机器学习核心编程:人人可用的高性能科学计算[M]. 北京: 电子工业出版社, 2019.
- Norman Matloff. R语言编程艺术[M]. 陈堰平, 译. 北京: 机械工业出版社, 2013.
- Andy Nicholls, Richard Pugh, Aimee Gott. R语言入门经典[M]. 姜佑 等, 译. 北京: 人民邮电出版社, 2018.
- Robert I. Kabacoff. R语言实战(第2版)[M]. 王小宁 等, 译. 北京: 人民邮电出版社, 2016.
- Hadley Wickham. 高级R语言编程指南[M]. 潘文捷 等, 译. 北京: 机械工业出版社, 2020.
- Brett Lantz. 机器学习与R语言(第2版)[M]. 李洪成 等, 译. 北京: 机械工业出版社, 2017.
- 程乾, 刘永, 高博. R语言数据分析与可视化从入门到精通[M]. 北京: 北京大学出版社, 2020.
- 周伟明.程序员的十层楼(一、二、三)[J]. 程序员, 2009(6):134-136; 2009(7):118-120; 2009(8):134-136.
注:本文版权归作者个人所有,如需转载请联系作者,未经授权不得转载。