专栏首页维C果糖编程思想 之「语言导论」
原创

编程思想 之「语言导论」

温馨提示:本系列博文(含示例代码)已经同步到 GitHub,地址为「java-skills」,欢迎感兴趣的童鞋StarFork,纠错。

Java

Java 发展史

Java 是一门面向对象编程语言,它不仅吸收了 C++ 语言的各种优点,还摒弃了 C++ 里难以理解的多继承、指针等概念,因此 Java 语言具有功能强大和简单易用两个特征。此外,Java 还具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java 语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

Java 语言缘起于 1991 年 Sun 成立的一个名为 Green 的项目小组,这个由詹姆斯·高斯林、帕特里克、麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚州门洛帕克市沙丘路的一个小工作室里面研究开发新技术,专攻计算机在家电产品上的嵌入式应用,而这个小组的新技术成果就是 Java 语言的前身,名为 Oak 的面向对象编程语言。

虽然 Oak 是一门不错的面向对象编程语言,但是在随后的几年内,Oak 并没有受到市场的青睐。直到 1995 年,互联网的蓬勃发展给了 Oak 机会,Sun 公司首先推出了基于 Oak 的可以嵌入网页并且可以随同网页在网络上传输的 Applet(一种将小程序嵌入到网页中进行执行的技术),并于同年 5 月将 Oak 更名为 Java,这里还有一个小插曲,在申请注册商标时,由于发现 Oak 已经被人使用了,再想了一系列名字之后,最终,使用了提议者在喝一杯 Java 咖啡时无意提到的 Java 词语,Java 语言也就正式诞生。

自 1991 年 1 月 Sun 公司发布 Java 第一个开发工具包(JDK 1.0)至 2017 年 9 月 Oracle 发布 Java SE 9.0 期间,Java 经历了众多的迭代与更新,其中变化最大的一次更新当属 2004 年 9 月 30 日,J2SE1.5 发布,这是 Java 语言发展史上的又一里程碑(第一个里程碑为 1991 年 Sun 发布 JDK 1.0,它标志着 Java 成为了一种独立的开发工具)。为了表示该版本的重要性,J2SE 1.5 更名为 Java SE 5.0(内部版本号 1.5.0),代号为 Tiger,Tiger 包含了从 1996 年发布 1.0 版本以来的最重大的更新,其中包括泛型支持、基本类型的自动装箱、改进的循环、枚举类型、格式化 I/O 及可变参数等。

面向对象

亚里士多德大概是第一个深入研究类型的哲学家,他曾提出过鸟类和鱼类这样的概念。所有的对象都是唯一的,但是同时也是具有相同的特性和行为的对象所归属的类的一部分。在计算机语句的世界中,第一个面向对象的编程语句 Simula-67 就采用了上述的面向对象的思想,它在程序中使用关键字class来引入新的类型,Java 语言同样如此。

虽然 Simula-67 是第一个面向对象的编程语言,但它并不成功。第一个成功面向对象的语言是 Smalltalk ,同时它也是 Java 所基于的语言之一。Alan Kay(他是 Smalltalk 面向对象编程环境语言的发明人之一,也是面向对象编程思想的创始人之一,他还是笔记本电脑最早的构想者和现代 Windows GUI 的最初尝试者)曾总结了 Smalltalk 的五个基本特性,这些特性正是纯粹的面向对象的编程语言所该具有的,包括:

  • 万物皆对象;
    • 这是面向对象编程的终极奥义。
  • 程序是对象的集合,它们通过发生消息来告知彼此所要做的事情;
    • 简单点说,程序中包含不同的对象,对象之间通过调用方法(发送消息)来达到所要实现的具体行为。
  • 每个对象都有自己的由其他的对象所构成的存储;
    • 可以通过创建包含现有对象的方式来创建新的对象。
  • 每个对象都拥有其类型;
    • 每个对象都是某个类的实例,不同的类的区别是就可以接收不同的消息。
  • 某一特定类型的所有对象都可以接收同样的消息。
    • 如 Java 语言中的多态,导出类可以接收任何发给基类的消息。

在理想的面向对象的编程语言中,每个对象都有一个接口(并非绝对,例如我们单纯的想定义一个对象来表示某种类型体系,我们就可以不在对象里面定义接口),我们通过发送消息(调用对象的接口)来告知对象我们要实现什么行为或者动作。反言之,每个对象都提供服务,我们通过想要实现的服务来确定给那个对象发送消息。

相比于「非面向对象编程」的编译器产生的函数调用引起的所谓的「前期绑定」,即编译器产生一个对于具体函数名字的调用,而运行时将这个调用解析到将要执行的代码的绝对地址;「面向对象编程」最重要的地方就是:编译器不可能产生传统意义上的函数调用,而是使用了「后期绑定」的概念,即当向对象发送消息时,被调用的代码直到运行时才能确定。

除上述内容之外,Java 还提供了很多其他的特性供来为我们编程做助力,例如单根(Object)继承体系、容器类、参数化类型(泛型)、高效的对象创建及生命周期(垃圾回收机制)、异常和错误处理、并发编程等。Java 的魅力,并不止于此!


———— ☆☆☆ —— 返回 -> 那些年,关于 Java 的那些事儿 <- 目录 —— ☆☆☆ ————

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java 内存溢出(OOM)异常完全指南

    Java 应用程序在启动时会指定所需要的内存大小,它被分割成两个不同的区域:Heap space(堆空间)和Permgen(永久代):

    CG国斌
  • 编程思想 之「对象漫谈」

    在「语言导论」中,我们曾提到过「万物皆对象」,事实上,也确实如此。在面向对象编程的世界中,我们创建对象、操作对象、销毁对象,我们所做的一切动作都离不开对象。在本...

    CG国斌
  • 深入理解 GitHub Flow

    GitHub Flow 是一个轻量级,基于分支的工作流,支持团队和项目的定期部署。本指南介绍了 GitHub Flow 的工作原理。 Step 1. 创建...

    CG国斌
  • Spring Boot、Java多线程、分布式、Java架构的高级架构师进阶之路

    Java这门语言从诞生到今天经历了20多个年头,不可否认,它的学习难度不低,Java作为静态面向对象编程语言的代表,能够以优雅的思维方式进行复杂的编程

    java思维导图
  • 10个用Java谋生非常有趣的方式

    令我惊讶的是,有些人觉得编程并不令人兴奋——只将它当作是一份枯燥的工作。不过,虽然可能的确有很多无聊的编程工作,但这并不意味着你不得不接受这些工作中的一个。程序...

    哲洛不闹
  • 零基础快速入门Java的秘诀

    这几天有同学问我零基础学习Java,要学习哪些内容,基于上一篇《给入门程序员的一些学习建议》,今天我又给出了它的姊妹篇,这两篇结合着看,对你的学习肯定会起到很大...

    硕人其颀
  • 25 个喜欢 Java 的理由

    JetBrains 喜欢所有编程语言,还有所有开发者!2020 年 5 月,Java 迎来了 25 岁生日!因此我们想做点特别的事情,想想我们喜欢 Java 和...

    用户2781897
  • 疯狂软件对Oracle放弃Java EE的看法

    自从Java发展壮大以来,无论是以前的Sun公司,还是后来Oracle公司,一直都无力左右Java的发展:实际上Java的规范制定,都需要通过JCP审核,一些新...

    博文视点Broadview
  • 今天 Java 14 正式发布了!放弃 Java 8 行吗?

    Java 14今天正式发布了。那么,14版究竟有什么新功能,对于整天写代码、维护代码的Java开发者来说,哪些功能最有用呢?

    搜云库技术团队
  • 【001期】 | JavaSE面试题(一):面向对象

    大家好,我是Java面试题库的提裤姐,今天这篇是JavaSE系列的第一篇,主要总结了面向对象概念中会出现的相关面试题,在后续,会沿着第一篇开篇的知识线路一直总结...

    java进阶架构师

扫码关注云+社区

领取腾讯云代金券