编程思想 之「语言导论」
温馨提示:本系列博文(含示例代码)已经同步到 GitHub,地址为「java-skills」,欢迎感兴趣的童鞋
Star
、Fork
,纠错。
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 的那些事儿 <- 目录 —— ☆☆☆ ————
- Java多线程高并发学习笔记——阻塞队列
- 使用javascript+xml实现分页
- 使用OAuth打造webapi认证服务供自己的客户端使用
- 洛谷P3381 【模板】最小费用最大流(dijstra费用流)
- 使用OAuth打造webapi认证服务供自己的客户端使用(二)
- JavaScript基础1
- JavaScript实例-----反选
- 1303: [CQOI2009]中位数图
- 1050: [HAOI2006]旅行comf
- 某厂2016实习招聘安全技术试题答案及解析
- 3732: Network
- 洛谷P3388 【模板】割点(割顶)(tarjan求割点)
- 每天学一点Docker(3)(制作你的第一个容器)
- 1635: [Usaco2007 Jan]Tallest Cow 最高的牛
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python MQTT
- 从键盘输入一个十进制个位数,在屏幕上显示相应数量的该数。 例如,输入3,屏幕上将显示“333”。
- ESP32 OTA详解-中文翻译版
- 汇编语言从键盘输入一个字符串(串长不大于80)以十进制输出字符串中非字母字符的个数(不是a to z或 A to Z)
- 求100以内所有奇数的和,存于字变量X中。
- pyinstaller打包出错numpy.core.multiarray failed to import
- 从包含10个无符号数的字节数组array中选出最小的一个数存于变量MIN中,并将该数以十进制形式显示出来。
- 可修改内容的优先级队列
- STM32定时器与中断整理
- 计算CNN卷积神经网络中各层的参数数量「附代码」
- C++ 万字长文第一篇---拿下字节面试
- 家国梦自动收取金币、货物、升级建筑、拆相册等脚本
- matplotlib 设置移动边框
- 发布你的第一个nodejs c++插件
- nodejs多线程的探索和实践