编程思想 之「语言导论」

时间:2022-05-04
本文章向大家介绍编程思想 之「语言导论」,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

温馨提示:本系列博文(含示例代码)已经同步到 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 的那些事儿 <- 目录 —— ☆☆☆ ————