文档章节

《Java核心技术(卷一)》学习笔记(一)

l
 liutongl_5
发布于 2017/09/11 21:33
字数 2338
阅读 5
收藏 1

第一章 Java 简介

1.1 作为编程平台的 Java

  • Java 曾经有机会成为一个伟大的编程语言,但是为了追求兼容性与多功能的扩展性,Java变得更像一个编程平台。
  • 臃肿的 Java 有着强大的库,可复用的代码,运行时环境,还有诸如安全性,跨平台,自动垃圾回收之类的服务。
  • 当然,Java 和许多编程语言一样,有着良好的语法(而 C++ 没有),同时拥有着高质量的服务,这使得他不可避免的吸引着很多程序员。

虽然略显臃肿,但是好用,而且自成平台。

1.2 Java 白皮书中的关键词

  • Java 的创造者们写了一个颇具影响力的白皮书来阐述发明这个新语言的目标。挑选出的这 11 个关键词可以进行简洁的概括:

1.2.1 简单

  • Java 的设计理念是易学但又不颠覆 C++ 的优秀传统。因此 Java 是简洁版的 C++,取缔了头文件、指针运算,结构体,联合体等笨拙的语法。当然有些笨拙的语法,例如switch并没有被移除。
  • 在设计之初,Java 的简洁性还体现在占用空间小。当然随着兼容性的考虑,Java 标准版(Java SE)标准库也越做越大。为了秉持初衷,Java又推出了微型版(Java ME)。

1.2.2 面向对象

  • 面向对象的设计使得对象包含的数据和接口变得更重要,而无需把工作重点放在如何创建对象,用什么工具管理数据和接口。
  • 对比 C++ 中的面向对象设计,Java 用概念上更简单的接口interface)实现了多继承的问题(一个子类 继承了 多个 父类 的特征),Java也有更充裕的空间进行自我审查(第五章将详细讨论)。

1.2.3 分布式

  • Java 有一个配合 TCP/IP 协议(如 HTTP 和 FTP等)使用的扩展库。这个特性让 Java 访问网络中的远程文件和访问本地文件一样容易。【现在这个特性已经成为编程标配,但在1995年这是个新颖的概念。】

1.2.4 稳健性

  • Java 平台在寻找潜在错误上付出了很大的努力。很多其他语言在运行时才出现的问题,Java 可以提早发现。相比 C++ ,Java内含的指针模型也免去了内存溢出、数据损坏之类可能花去几小时才能发现的细微问题。

1.2.5 安全

  • 由于 Java 设计之初就是面向网络和分布式环境,Java 从设计之初就在建设反病毒反篡改系统。
  • 当然各种各样的漏洞依然存在,而随着 Java 的日渐臃肿,发现并修复这些漏洞也越来越困难。
  • 虽然 Java 的安全模型并不像当初想象的那样安全,但他还是处于时代的前列。

1.2.6 跨平台架构

  • Java 编译器先编译出与平台无关的字节码(bytecode)。之后任何安装了 Java 运行时系统的平台都可以解释运行这些代码,实现了可以在多平台运行。
  • 通过运行时系统解释运行伪机器指令(字节码)当然会比直接运行机器码慢一些。Java通过将一些常用伪机器指令提前翻译成机器码提高一部分运行速度,这个过程被称作及时(JIT,just-in-time)编译。
  • 先生成字节码交给“虚拟机”运行在当时也并不新鲜,Lisp、Smalltalk、Pascal等语言多年来已经采用这种机制。
  • Java 的虚拟机的另一大优势是提高安全性,他会在运行过程中监测指令序列并发现可疑指令。

1.2.7 可移植性

  • 可移植性是指 Java 尽力让代码在不同环境下运行结果相同。
  • 对比 C/C++ 语言中对 整数型int)的定义,各个平台环境的 Java 虚拟机都使得它拥有相同的范围(32位),而 C/C++ 则可能由于编译器、运行环境不同(32/64位系统)得出不一样的结果。
  • 在 Java 中,很多类别都有很好的可移植性,比如文件系统、正则表达式、XML、时间日期、数据库操作、网络连接、线程等等。
  • 有趣的是,在白皮书原文中,举出的用户界面 Window 类的例子反而并不是很恰当。因为Window类在不同操作系统中显示出的窗口并不尽如人意,跨平台的用户界面统一性至今仍是问题。

1.2.8 解释型(运行过程中)

  • 解释型语言的优点在于每步单独执行,每一步代码量小,因此迅速而及时,能看到当时的结果并及时发现错误。用过 Lisp、VB、Python、R 等语言的人都体验过这种优势。
  • Java 提出的解释型语言有点强词夺理,因为你需要先编译才能用解释器运行。所以 Java 的开发环境并不完全有这种优势。

1.2.9 高性能

  • 早期的用户并不十分认同这个特点,因为解释器的存在对于整体运行速度有所减缓。(运行时每一步都需要额外转化成机器码)。
  • 但随着及时(JIT)编译系统的引入,Java 有了很大的性能提升。因为 JIT编译器可以大量优化常用代码,减少函数调用,当某个类的函数尚未重载时只加载一次并在遇到重载时再加载新函数,等等各种优化方案。

1.2.10 多线程

  • 多线程可以减少互动过程中的响应时间,提高及时性。
  • 现如今随着摩尔定律走向尽头,单个核心处理性能的提升放缓,多核心共同工作越来越重要。Java 在这方面走在时代前列,他是主流语言中第一个支持并发编程的。
  • 当然,当年使用并发的特性并不是为了应对摩尔定律,而是由于网络传输速度过慢,单核心等待结果时空转的时间太长,使用并发多线程可以在等待时处理其他任务。

1.2.11 动态性

  • Java 比C/C++更动态,可以很好的适应变化的运行环境。
  • Java 可以在运行过程中向库中添加新的方法和实例变量并且不影响正在使用这些库的关联部分。同时,在 Java 运行过程中获取类别信息也非常容易。
  • 动态性使得在运行的程序中添加运行代码也很容易,例如在运行的浏览器中,从网络上下载并执行一段新的 Java 代码。用 C/C++ 很难实现这一点。

在 Java 初露峥嵘后不久,微软发布了和 Java 很像的 J++ 语言和虚拟机。现在微软不再支持 J++ 而是又发布了和 Java 有很多共同点的 C#,C# 可以在另一种虚拟机上运行。

1.3 Java 网页应用(Java applet)与互联网

  • Java 网页应用通过从网站服务器下载字节码,使得动态交互的应用可以在网页浏览器中运行。起初人们认为这种技术会推进 Java 的发展,但由于不同浏览器对 Java 版本支持不同,开发兼容性成为了问题。
  • 随着 Flash 的崛起和安全性的因素,Java 网页应用渐渐退出了舞台。

1.4 Java 简史

  • 1991年,升阳电脑(Sun Microsystems)的由 Patrick Naughton 和 James Gosling 领导的工程师想开发一种能应用于小型设备的编程语言,并希望它能跨平台、可移植。由于大多数人来自 UNIX 背景,因此新的语言也基于 C++ 语法。
  • 最初项目叫做“Green Project”,希望开发有限电视有关的产品。语言被起初命名为“Oak”,发现与一个已有语言重名后,改叫“Java”。
  • “Green Project”的产品长期无人问津,直到互联网的兴起,1994年,团队开始转行做浏览器,并以当时的 Mosaic 浏览器为参照。1995年,HotJava浏览器面世并使得 Java 和 Java 网页应用得到关注。
  • 后来浏览器虽然不温不火,但是 Java 的图形界面以及其他功能得到关注,Java 开始广泛发展。其中,初始几个版本过后最大的一次更新在于2005年从 1.4 版直接晋升为 5.0 版,并加入了泛型等重要特性。
  • 2014年的 Java 8 引入了函数式编程使得 Java在计算上的并发效率大大提高。Java 语言历久弥新。

1.5 常见 Java 误解

  • Java 容易学;
  • Java 只是一个编程语言;
  • Java 是网页的补充;
  • 等等等等……(略)

© 著作权归作者所有

共有 人打赏支持
l
粉丝 1
博文 3
码字总数 7844
作品 0
新加坡
私信 提问
Java程序员必读书单,家族又添新成员

点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 有些革命出其不意地吸引了全世界的眼球。Twitter、Linux操作系统和...

异步社区
05/09
0
0
java学习路线及资源下载,持续整理中

学习路线图:http://blog.csdn.net/shenzhq1980/article/details/48470337 1、java学习经典书籍_基础编程篇 下载地址:http://blog.csdn.net/shenzhq1980/article/details/48375543 书籍: ......

迷茫80
2015/09/21
512
1
最近危机感爆棚,内心不安,虽然想学新东西,但是却不知道自己的路线是否正确?

先简单的介绍一下自己,去年毕业的,到现在算是快两年的工作经验了,其中实习了半年。 当初的热情有点消退了,最近来杭州找了一份工作,小半年过去了,感觉自己完全停滞了,没有看书,没有做...

谁偷了我的名字
2017/09/18
2.6K
11
阿里P8架构师总结的互联网Java架构系统化学习路线

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/t4i2b10X4c22nF6A/article/details/83181980 网络应用,最常见的研发语言是Java的和PHP。 后端服务,最常见的...

JAVA高级架构v
10/19
0
0
如何自学 Android

看到很多人提问非科班该如何学习编程,其实科班也基本靠自学。有句话叫“师傅领进门修行靠个人”,再厉害的老师能教你的东西都是很有限的,真正的修行还是要靠自己。我本科是学数学的,虽然研...

oschina
2016/05/02
7.2K
26

没有更多内容

加载失败,请刷新页面

加载更多

Andrew Ng教你如何引领公司进入AI时代

摘要: 人工智能时代,企业转型遇到困难?看看Andrew Ng的建议吧! AI(人工智能)技术就像100年前的电力一样,正准备改变每个行业。从现在到2030年,它将创造约13万亿美元的GDP增长。虽然它...

阿里云官方博客
9分钟前
0
0
斗图咖(www.doutuka.com)上线纪念

网站名称:斗图咖 网站描述:是一款年轻人都在玩的斗图网站,来斗图咖一起斗图装逼交朋友吧。站长每天上传收集的最新最火斗图,供大家娱乐聊天发表情;后期也会开发表情自主设计,自己设计表...

focusone
30分钟前
3
0
Spring AOP 切面编程记录日志和接口执行时间

最近客户现在提出系统访问非常慢,需要优化提升访问速度,在排查了nginx、tomcat内存和服务器负载之后,判断是数据库查询速度慢,进一步排查发现是因为部分视图和表查询特别慢导致了整个系统...

编程SHA
41分钟前
7
0
15个Spring的核心注释示例

众所周知,Spring DI和Spring IOC是Spring Framework的核心概念。让我们从org.springframework.beans.factory.annotation和org.springframework.context.annotation包中探索一些Spring核心注......

java菜分享
47分钟前
2
0
[LintCode] Binary Tree Level Order Traversal(二叉树的层次遍历)

描述 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 样例 给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7 返回他的分层遍历结果: [ [3], [...

honeymose
56分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部