Java 核心技术卷 I —— 第1章 Java 程序设计概述

1.1 Java 程序设计平台

​ Java 于 1996 年第一次发布,引起了人们极大的兴趣。关注 Java 的人不仅限于计算机出版界,还有诸如《纽约时报》、《华盛顿邮报》和《商业周刊》这样的主流媒体。Java 是唯一一个在 National Public Radio 上占用了 10 分钟时间进行介绍的程序设计语言,且得到了 100 000 000 美元的风险投资资金。

1.2 Java 白皮书的关键术语

1.2.1 简单性

​ 对比于 C++,Java 没有指针、结构、联合、操作符重载(可惜了)、虚基类等复杂语法,是独立于但又参考借鉴了 C++ 的一种新语言。

​ 另外,Java 的目标之一是支持在小型机器上的软件开发,其基本解释器和类大小仅有 40KB,算上基础的标准类库和线程支持也仅需要 175 KB。这样的“小”也体现了 Java 的简单。

1.2.2 面向对象

​ Java 面向对象的技术非常成熟,与 C++ 旗鼓相当。且没有多重继承,取代之的是接口概念。

1.2.3 分布式

​ Java 有丰富的例程库,用于处理网络协议(TCP / IP),处理网络对象时的便携程度就如同访问本地文件一般。

1.2.4 健壮性

​ Java 编译器非常智能,能够检测许多运行时才可能出现的问题。另外,由于没有指针,不会存在内存问题。

1.2.5 安全性

​ Java 一开始便设计为能够防范各种攻击的语言,包括:

  • 运行时堆栈溢出(蠕虫和病毒常用的攻击手段)
  • 破坏自己进程空间之外的内存
  • 未经授权读写文件

​ 尽管发展途中仍遭遇了一些 bug,但时至今日 Java 已经足够值得信赖。

1.2.6 体系结构中立

​ Java 创新性地采用了虚拟机机制,编译器将 Java 代码生成为字节码(.class 文件),由虚拟机负责在不同平台上运行相同的效果。

​ 尽管解释虚拟机指令肯定比全速运行机器指令慢很多,但 Java 虚拟机有一个选项,可以将执行最频繁的字节码序列转换成机器码,这一过程称为 即时编译

1.2.7 可移植性

​ Java 明确规定了基本数据类型的大小和运算,例如 int 明确指定为 32 位。不同于 C++ 中的 int 取值是一个范围,即,可能是 16 位或者 32 位。这种做法消除了 C++ 代码移植时的一大困难。

1.2.8 解释性

​ Java 解释器可以再任何移植了解释器的机器上直接执行 Java 字节码。

​ 但对比于 Python 这种解释性语言,直到 Java 9 才提供了 jshell 工具来支持快捷交互的编程。

1.2.9 高性能

​ 现在的 Java 即时编译器已经可以与传统的编译器相媲美,甚至在某些情况下性能超越了传统编译器。

​ 主要原因是及时编译器拥有更多的代码信息,能够合理优化代码,提高运行效率。

1.2.10 多线程

​ 在设计之初,Java 超前地支持并发程序设计。

1.2.11 动态性

​ Java 能够在运行程序时增加代码,Java 库能够自由地添加新方法和实例变量,而对客户端没有任何影响。

1.3 Java applet 与 Internet(*)

1.4 Java 发展简史

​ 1991 年,Sun 公司的一个工程师小组计划设计一种小型计算机语言 “Oak”,用于有线电视转换盒之类的消费设备,项目名称为 “Green”。由于目标设备往往计算能力和内存均有限,因此该语言必须非常小,且效率高。另外,由于设备的不同厂商选择的中央处理器(CPU)不同,因此该语言还需求跨平台。后来 Sun 公司发现已经有另外一个计算机语言取名为 Oak,因此改名为 Java。

​ 1992 年,Green 项目发布了第一个产品 “*7”,能够提供智能的远程控制。但 Sun 公司对该项目不感兴趣,因此 Green 项目组投标了一个设计有线电视盒的项目,但遗憾没能拿到合同。

​ 1993 年,Green 项目更换名称为 “First Person” 公司,并寻求买家购买自己的技术,但一直没能找到,于 1994 年解散了。在当时,Internet 的万维网日渐发展壮大,人们主要使用伊利诺伊大学超级计算中心的一个非商业化 Web 浏览器 Mosaic。Sun 公司使用 Java 开发新的浏览器 HotJava,能够在网页中执行内嵌的 Java 代码,用来展示 Java 语言的强势能力,并于 1995 年在 SunWorld’95 大会上展示,引发了人们对 Java 的狂热追逐。

​ 1996 年,Sun 公司发布了 Java 第 1 个版本,但 Java 1.0 并不能很好地用来完成应用开发,后来推出的 Java 1.1 弥补了第 1 版的大部分缺陷,大大改进了反射能力,并为 GUI 编程添加了新内容,但仍有很大的局限性。

​ 1998 年,JavaOne 会议上发布了 Java 1.2 版本,完善了之前玩具式的 GUI 和图形工具包。发布仅 3 天后,Sun 公司将 “Java 1.2” 改名为 “Java 2 标准版(Standard Edition,JAVA SE)软件开发包 1.2 版” 以吸引眼球。除了标准版之外,Sun 公司还推出了另外两个版本:用于手机等嵌入式设备的“微型版”(Micro Edition,Java ME)和用于服务器端处理的“企业版”(Enterprise Edition,Java EE)。此后的 1.3 和 1.4 版本对 Java 2 做出了增量式的改进,提供了不断扩展的标准类库,并提高了性能,同时修正了一些 bug,Java 逐渐成为服务器端应用的首选平台。

​ 2004 年,Java 1.5 版推出,但在当年的 JavaOne 会议后直接改为 Java 5.0 版本。Java 5.0 添加了泛型类型,且受到 C# 语言的启发,添加了 “for each” 循环、自动装箱和注解。

​ 2006 年,Java 6(没有后缀 .0)于年底发布,该版本没有对语言进行修改,而是提高了性能并增强了类库。

​ 2009 年,Sun 公司被 Oracle 公司收购,Java 开发因此停滞,直至 2011 年,Java 7 发布,但只进行了一些简单的改进。

​ 2014 年,Java 8 发布,添加了 “函数式” 的编程方式,能够轻松地表述能并发执行的计算。

​ 2017 年,Java 9 发布,实现了 “模块” 系统。该 “模块” 系统最早于 2008 年提出,耗时 11 年实现,该版本同时提供了一些新特性。

​ 2018 年后,Java 每半年就会发布一个新版本,并且每过一段时间,会将某个版本(Java 11、Java 17)指定为长期支持版本,而中间版本会提供一种试验新特性的机制。

​ 表 1-1 展示了 Java 语言及类库的演进。

表 1-1 Java 语言及类库的演进
版本年份新语言特性类与接口的数量
1.01996语言本身211
1.11997内部类477
1.21998strictfp 修饰符(目前已被弃用)1524
1.320001840
1.42002断言2723
5.02004泛型类、“for each” 循环、可变参数、自动装箱、元数据、枚举、静态导入3279
620063793
72011基于字符串的 Switch 语句、菱形运算符、二进制字面量、异常处理增强4024
82014Lambda 表达式、包含默认方法的接口、流和日期/时间库4240
92017模块、其他的语言和类库增强6005
112018局部变量类型推导(var)、HTTP 客户端、移除 Java FX、 JNLP、Java EE 重叠模块和 CORBA4410
172021Switch表达式、文本块、instanceof 模式匹配、记录、密封类4859

1.5 关于 Java 的常见误解

​ 没啥误解,谢谢!

补充 1:Java 术语缩写

  • Java SE:Java Standard Edition

    Java 平台的标准版,应用于桌面环境。

  • Java EE:Java Enterprise Edition

    Java 平台的企业版,应用于基于 Java 的应用服务器。

  • Java ME:Java Micro Edition

    Java 平台的微型版,应用于移动、无线及有限资源的环境。

  • SDK:Sofare Develop Kit

    软件开发工具包,用于帮助开发人员的提高工作效率,不同类型的软件开发都有自己的 SDK。

  • JVM:Java Virtual Machine

    运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,给出相同的结果。

  • JRE:Java Runtime Environment

    Java 运行时环境,是运行已编译 Java 程序所需的所有内容的集合。主要包括 Java 虚拟机(JVM)、Java 基础类库(Class Library)。

  • JDK:Java Development Kit

    功能齐全的 Java SDK,提供给开发者使用,能够创建和编译 Java 程序。包含了 JRE,同时包含了编译 Java 源码的编译器 javac 以及一些其他工具,比如 javadoc(文档注释工具)、jdb(调试器)、jconsole(基于 JMX 的可视化监控⼯具)、javap(反编译工具)等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔗理苦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值