Java核心技术(Java白皮书)卷Ⅰ 第一章 Java程序设计概述

         第1章 Java程序设计概述
1.1 Java程序设计平台
 具有令人赏心悦目的语法和易于理解的语言,与其他许多优秀语言一样,Java满足这些要求.
 可移植性
 垃圾收集
 提供大型的库
  如果想要有奇特的绘图功能,网络连接功能和数据库存取功能无需自己动手编写代码
 功能齐全的出色语言
 高质量的执行环境,提供庞大的库。集多种优势于一身
 注:
  白皮书:www.oracle.com/technetwork/java/langenv-140151.html
  11个关键术语的论述:http://horstmann/corejava/java-an-overview/7Gosling.pdf

1.2 Java "白皮书" 的关键术语
  1)简单性   2)面向对象  3)分布式  4)健壮性  5)安全性
  6)体系结构中立  7)可移植性  8)解释性  9)高性能  10)多线程 11)多态性
 1.2.1 简单性
  无需深奥的专业培训就可以进行的编程系统,并且符合当今的标准惯例
  尽可能地接近C++,以便系统更易于理解 Java剔除了C++中许多很少用,难以理解,易混淆的特性(这些特性带来的麻烦远远多于其带来的好处)
  支持开发能够在小型机器上独立运行的软件(基本的解释器以及类支持大约仅为40KB)
  再加上基础的标准类库和对线程的支持(基本上是一个自包含的微内核)大约需要增加175KB
  由于不断的扩展,类库已经相当庞大
   现在有一个独立的具有较小类库的Java微型版(Java Micro Edition),这个版本适用于嵌入式设备
 1.2.2 面向对象
  面向对象设计是一种程序设计技术  它将重点放在数据(即对象)和对象的接口上
   面向对象:始终关注的是所制作的椅子,第二位才是所使用的工具;
   非面向对象:首先考虑的是所用的工具
  在本质上,Java的面向对象能力与C++是一样的  旗鼓相当
  Java与C++的主要不同点在于多重继承,在Java中,取而代之的是更简单的接口概念
  Java提供了更丰富的运行时自省空间
 1.2.3 分布式
  Java有一个丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议
  Java应用程序能够通过URL打开和访问网络上的对象,其便捷程度就好像访问本地文件一样
 1.2.4 健壮性
  具有多方面的可靠性
  Java与C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性
  Java编译器能够检测许多在其他语言中仅运行时才能够检测出来的问题
 1.2.5 安全性 相对安全,凡事无绝对
  适用于网络/分布式环境
  可以构建防病毒,防篡改的系统
  防范各种攻击:
    运行时堆栈溢出。如蠕虫和病毒常用的攻击手段
    破坏自己的进程空间之外的内存
    未经授权读写文件
  Java代码不论来自哪里,都不能脱离沙箱
   不可信代码在一个沙箱中执行,在这里它不会影响主系统
  安全模型很复杂
   Java浏览器插件不信任远程代码,除非代码有数字签名而且用户同意执行这个代码
 1.2.6 体系结构中立
  很容易地在任何机器上解释执行
  可以动态地翻译成本地机器代码
  Java虚拟机优点:
   可以检测指令序列的行为,从而增强安全性
 1.2.7 可移植性
  Java规范中没有 "以来具体实现" 的地方
  基本数据类型的大小以及有关运算都做了明确的说明
  在Java中,数据类型具有固定的大小,这消除了代码移植时令人头疼的主要问题
  二进制数据以固定的格式进行存储和传输,消除了字节顺序的困扰
   int为永远的32位的整数
   字符串是用标准的Unicode格式储存的
  作为系统组成部分的类库,定义了可移植的接口
  Java库很好地支持平*立性
   处理文件,正则表达式,XML,日期和时间,数据库,网络连接,线程等
  不仅程序是可移植的,Java API往往也比原生API质量更高
 1.2.8 解释型
  java虚拟机可以在任何安装了jre的环境中运行
  Java解释器可以在任何移植了解释器的机器上执行Java字节码
  链接是一个增量式且轻量级的过程(开发过程变得更加快捷,更加具有探索性)
 1.2.9 高性能
  更加高效的性能
  字节码可以(在运行时刻)动态地翻译成对应这个应用的特定CPU的机器码 即时编译器可以监控经常执行代码,并且优化这些代码以提高速度。更为复杂的优化是消除函数调用(即 "内联") 知道哪些类已经加载 基于当前加载的类集,如果特定函数不会被覆盖,就可以使用内联 (必要时,还可以撤销优化)
 1.2.10 多线程
  多线程可以带来更好的交互响应和实时行为
  并发性 摩尔定律 更多的处理器
  第一个支持并发程序设计的主流语言
  java提供接口,操作接口以便操作系统多个处理器
 1.2.11 动态性
  库中可以*地添加新方法和实例变量(对客户端却没有任何影响)
  可轻易找到运行时类型信息(十分简单)
  非常重要的特性
  引入主流程序设计语言中
  注:
   J++ Java 有几乎相同的编程语言以及虚拟机
   C# Java 有很多相似之处,然而使用的却是完全不同的虚拟机
1.3 Java applet与Internet
 从Internet下载Java字节码,并在自己机器上运行(在网页上运行的Java程序成为applet)
  动态: 利用鼠标进行旋转,调整焦距等操作
 applet:http://jmol.sourceforge.net
 "如今,要在浏览器中使用applet,不仅需要一定的水平,而且要付出努力"
1.4 Java的发展史
 语言只是实现目标的工具,而不是目标本身  --Gosling
 Oak --> Java
 万维网 关键 把超文本页面转换到屏幕上的浏览器
 一处编写,随处运行 

                       Java语言的发展状况
 版本  年份  语言特性  类与接口数量
 1.0  1996  语言本身  211
 1.1  1997   内部类   477
 1.2  1998  strictfp修饰符  1524
  1.3  2000  无   1840
 1.4  2002  断言  2723
  5.0  2004  泛型类,"for eath"循环,可变元参数, 自动装箱,元数据,枚举,静态导入  3279
 6  2006   无  3793
 7  2011   基于字符串的switch,钻石操作符,二进制字面量,异常处理改进  4024
 8  2014    lambda表达式,包含,默认方法的接口,流和日期/时间库  4240


1.5 关于Java的常见误解
 1.Java是HTML的扩展?
  Java是一种程序设计语言;HTML是一种描述网页结构的方式。除了用于在网页上放置Java applet的HTML扩展之外,两者没有任何共同之处。
 2.使用XML,所以不需要Java?
  Java是一种程序设计语言;
  XML是一种描述数据的方式。
  可以使用任何一种程序设计语言处理XML数据,而Java API对XML处理提供了很好的支持。
  此外,许多重要的第三方XML工具采用Java编写。
 3.Java是一种非常容易学习的程序设计语言?
  像Java这种功能强大的语言大都不太容易学习。 首先,必须将编写玩具式程序的轻松和开发实际项目的艰难区分开来。 Java类库包含了数千种类和接口以及数万个函数。幸运的是,并不需要知道它们中的每一个,然而,要想Java解决实际问题,还是需要了解不少内容的。
 4.Java将成为适用于所有平台的通用性编程语言?
  从理论上讲,这是完全有可能的。
  但在实际中,某些领域其他语言有更出色的表现,比如,Objective C和后来的Swift在iOS设备上就有着无可取代的地位。 浏览器中的处理几乎完全由JavaScript掌控。
  Windows程序通常都用C++或C#编写。
  Java在服务器端编程和跨平台客户端应用领域则很有优势。
5.Java只不过是另外一种程序设计语言?
  Java是一种很好的程序设计语言,很多程序设计人员喜欢Java胜过C、C++或C#。有
  上百种好的程序设计语言没有广泛地流行,而带有明显缺陷的语言,如:C++和Visual Basic却大行其道。
  程序设计语言的成功更多地取决于其支撑系统的能力,而不是优美的语法。
  人们主要关注:
   是否提供了易于实现某些功能的易用、便捷和标准的库?
   是否有开发工具提供商能建立强大的编程和调试环境?
   语言和工具集是否能够与其他计算基础架构整合在一起?
  Java的成功源于其类库能够让人们轻松地完成原本有一定难度的事情。
   例如: 联网Web应用和并发。Java减少了指针错误,这是一个额外的好处,因此使用Java编程的效率更高。但这些并不是Java成功的全部原因。
 6.Java是专用的,应该避免使用?
  最初创建Java时,Sun为销售者和最终用户提供了免费许可。 尽管Sun对Java拥有最终的控制权,不过在语言版本的不断发展和新库的设计过程中还涉及很多其他公司。 虚拟机和类库的源代码可以免费获得,不过仅限于查看,而不能修改和再发布。
  Java是“闭源的,不过可以很好地使用”。  
  根据GPL,任何人都可以得到专利许可,允许其使用和修改Java,不过仅限于桌面和服务器平台。
  如果你想在嵌入式系统中使用Java,就需要另外一个不同的许可,这很可能需要付费。
  不过,这些专利在未来十年就会到期,那时Java就完全免费了。
 7.Java是解释型的,因此对于关键的应用程序速度太慢了?
  现在Java虚拟机使用了即时编译器,因此采用Java编写的“热点”代码其运行速度与C++相差无几,有些情况下甚至更快。
  今天的计算机速度远比人们发出抱怨的时候快了很多。
  一个较慢的Java程序与几年前相当快的C++程序相比还要快一些。
 8.所有的Java程序都是在网页中运行的?
  所有的Java applet都是在网页浏览器中运行的。
  这也恰恰是applet的定义,即一种在浏览器中运行的Java程序。
  大多数Java程序是运行在Web浏览器之外的独立应用程序。
  实际上,很多Java程序都在Web服务器上运行并生成用于网页的代码。
 9.Java程序是主要的安全风险?
  尽管距离Java诞生已经20年之久,与其他常用的执行平台相比,Java还是安全得多。
 10.JavaScript是Java的简易版?
  JavaScript是一种在网页中使用的脚本语言,它是由Netscape发明的,原来的名字叫做LiveScript
  JavaScript的语法类似Java,除此之外,两者无任何关系。
  JavaScript的一个子集已经标准化为ECMA-262。
  与Java applet相比,JavaScript更紧密地与浏览器集成在一起。
  特别是JavaScript程序可以修改正在显示的文档,而applet只能在有限的区域内控制外观。
 11.使用Java可以用廉价的Internet设备取代桌面计算机
  当Java刚刚发布的时候,一些人打赌:肯定会有这样的好事情发生。一些公司已经生产出Java网络计算机的原型,不过用户还不打算放弃功能强大而便利的桌面计算机,而去使用没有本地存储而且功能有限的网络设备。当然,如今世界已经发生改变,对于大多数最终用户,常用的平台往往是手机或平板电脑。这些设备大多使用安卓平台,这是Java的衍生产物。学习Java编程肯定也对Android编程很有帮助。

~~~~~~~~~~房上的猫~~~~~~~~~~