第1章 Java程序设计概述
1.1 Java程序设计平台
完美与缺陷
- 一旦一种语言应用于某个领域,与现存代码的相容性问题就摆在了人们的面前。
- 由于相容性这个严肃的问题确实存在于现实,所以,或多或少地还是有一些“累赘”被加到语言中,这就导致Java并不如想象中的那么完美无瑕。
定义
- Java是一个完整的平台,有一个庞大的库,其中包含了很多可重用的代码和一个提供诸如安全性、跨操作系统的可移植性以及自动垃圾收集等服务的执行环境。
功能
- 有奇特的绘图功能、网络连接功能和数据库存取功能
1.2 Java “白皮书” 的关键术语
白皮书
- 简单性
- 面向对象
- 分布式
- 健壮性
- 安全性
- 体系结构中立
- 可移植性
- 解释型
- 高性能
- 多线程
- 动态性
1.2.1 简单性
简化
- 这里没有头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等。
保留
- switch语句的语法在Java中就没有改变。
嵌入式
- 简单的另一个方面是小。
- 一个独立的具有较小库的Java微型版(Java micro edition),这个版本适用于嵌入式设备。
1.2.2 面向对象
多重继承和接口
- Java与C++的主要不同点在于多重继承,在Java中,取而代之的是更简单的接口概念。
1.2.3 分布式
网络
- Java有一个丰富的历程库,用于处理像HTTP和FTP之类的TCP/IP协议。
- Java应用程序能够通过URL打开和访问网络上的对象,其便捷程度就好像访问本地文件一样。
1.2.4 健壮性
异常
- Java编译器能够检测许多在其他语言中仅在运行时才能够检测出来的问题。
指针
- 对于曾经花几个小时来检查由于指针bug而引起内存冲突的人来说,一定很喜欢Java的这一特性
1.2.5 安全性
沙箱
- 不可信代码在一个沙箱环境中执行,在这里它不会影响主系统。
安全策略
- Java浏览器插件不再信任远程代码,除非代码具有数字签名而且用户同意执行这个代码。
1.2.6 体系结构中立
字节码
- 只要有Java运行时系统,这些编译后的代码可以再许多处理器上运行。
- Java编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。
虚拟机
- 为虚拟机生成代码并不是一个新思路。
解决:即时编译
- 解释虚拟机指令肯定会比全速运行机器指令慢很多。
- 然而,虚拟机有一个选项,可以将执行最繁琐的字节码翻译成机器码,这一过程被称之为即时编译。
1.2.7 可移植性
数据类型
- Java规范中没有“依赖具体实现”的地方。
- 基本数据类型的大小以及运算都做了明确的说明。
- Java中的int永远为32位的整数。
可移植接口
- 作为系统组成部分的类库,定义了可移植的接口。
缺陷地方
- 花费了大量的心血,却构建了一个在各个平台都难以让人接受的库。
优点
- 可以处理文件、正则表达式、XML、日期和时间、数据库、网络连接、线程等,而不用操心底层操作系统。
1.2.8 解释型
Java解释器
- Java解释器可以在任何移植了解释器的机器上执行Java字节码。
1.2.9 高性能
更快追求
- 尽管对解释后的字节码性能已经比较满意,但在有些场合下还需要更加高效的性能。
- 字节码可以(在运行时刻)动态地翻译成对应运行这个应用的特定CPU的机器码。
常用优化
- 即时编译器可以监控经常执行哪些代码并优化这些代码以提高速度。
使用内联
- 更为复杂的优化是消除函数调用(即“内联”)。
- 如果特定的函数不会被覆盖,就可以使用内联。
1.2.10 多线程
追求并发
- 我们不再追求更快的处理器,而是着眼于获得更多的处理器,而且要让它们一直保存工作。
1.2.11 动态性
增加代码
- 当需要将某些代码添加到正在运行的程序中,动态性将是一个非常重要的特性。
1.3 Java applet 与 Internet
applet
- 在网页中运行的Java程序称为applet。
形容
- 在网页中插入一个applet就如同在网页中嵌入一幅图片。
- 关键的一点是这个图片是活动的。
结果
- adobe的flash技术变得更为流行。
- Java遭到了严重的安全问题,浏览器和Java浏览器插件变得限制越来越多。
1.4 Java发展简史
开局
- 想要设计一种小型计算机语言,主要用于像有线电视转换盒这类的消费设备。
特性
- 代码短小、紧凑且与平台无关。
- 可移植的语言,可以为虚拟机生成中间代码。
命名
- Sun公司的人厚礼发现Oak是一种已有的计算机语言的名字,于是,将其改名为Java。
变局
- 我们已经拥有在客户机/服务器主流模型中所需要的体系结构中立、实时、可靠、安全——这些在工作站环境并不太重要,所以,我们决定开发浏览器。
发布
- 1996年初,Sun公司发布了Java的第1个版本.
分类
- 除了“标准版”之外,Sun公司还推出了两个其他版本:一个用于手机等嵌入式设备的“微型版”;另一个是用于服务器端处理的“企业版”。
重大改进
- 5.0版是自1.1版以来第一个对Java语言做出重大改进的版本(这一版本原来被命名为1.5版,在2004年的JavaOne会议之后,版本数字升至5.0).
- 添加了泛型、“for each”循环、自动装箱和注解。
- 版本6(没有后缀.0)于2006年年末发布。
又一改变
- 2014年,Java8终于发布,在近20年中这个版本有了最大的改变。
- Java8提供了一种“函数式”编程方式,可以很容易地表述并发执行的计算。
Java语言地发展状况
版本 | 年份 | 语言新特性 | 类与接口地数量 |
---|---|---|---|
1.0 | 1996 | 语言本身 | 211 |
1.1 | 1997 | 内部类 | 477 |
1.2 | 1998 | strictp修饰符 | 1524 |
1.3 | 2000 | 无 | 1840 |
1.4 | 2002 | 断言 | 2723 |
5.0 | 2004 | 泛型类、"for each"循环、可变元参数、自动装箱、元数据、枚举、静态导人 | 3279 |
6 | 2006 | 无 | 3793 |
7 | 2011 | 基于字符串的switch、钻石操作符、二进制字面量、异常处理改进 | 4024 |
8 | 2014 | lambda表达式,包含默认方法的接口,流和日期/时间库 | 4240 |
1.5 关于Java地常见误解
1. Java是HTML地扩展
- HTML是一种描述网页结构地方式。
2. 使用XML,所以不需要Java
- XML是一种描述数据地方式
Java是一种非常容易学习地程序设计语言
- 像Java这种功能强大的语言大都太容易学习。
4. Java将成为适用于所有平台的通用性编程语言
- 某些领域其他语言又更出色的表现。
5. Java只不过是另一种程序设计语言
- 意思是说优点喽?
人们关注
- 提供了易于实现某些功能的易用、便捷和标准的库。
- 有开发工具商能建立强大的编程和调试环境。
- 语言和工具能够与其他计算基础架构整合在一起。
Java成功源于
- 其库类能够让人们轻松地完成原本有一定难度地事情。
- Java减少了指针错误,这是另一个好处。
6. Java是专用地,应该避免使用
- 虚拟机和库类地源代码可以免费获得,不过仅限于查看,而不能修改和再发布。
- 不过,这些专利在未来十年就会到期,那时候Java就完全免费了。
Java是解释型地,因此对于关键地应用程序速度太慢了
狡辩
- 一个较慢地Java程序与几年前相当快的C++程序相比还要快一些。
8. 所有的Java程序都是在网页上运行的
- Java applet都是在网页浏览器中运行的。
- 大多数Java程序是运行在web浏览器之外的独立应用程序。
9. Java程序是主要的安全风险
- 对applet安全模型的强度和复杂度发起挑战。
- 有些系统管理员甚至在公司浏览器中禁用了Java。
JavaScript是Java的简易版
- JavaScript是一种在网页中使用的脚本语言。
11. 使用Java可以用廉价的Internet设备取代桌面计算机
- 舍近求远
- 一些公司已经生产出Java网络计算机的原型,不过用户还不打算放弃功能强大而便利的桌面计算机,而去使用没有本地储存功能而且功能有限的网络设备。