文档章节

《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后端开发技术思维导图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/t4i2b10X4c22nF6A/article/details/82714797 图文里的技术如何学习,有没有免费资料? 对Java的技术,架构技术...

JAVA高级架构v
09/15
0
0
少走弯路,给Java 1~5 年程序员的建议

今天LZ是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍。这一部分的内容,同样适用于一些希望转行到Java的同学。 在大家看之前,LZ要先声...

重走Java
05/29
0
0
Java 后端技术栈,到底如何深入学习?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/t4i2b10X4c22nF6A/article/details/83118587 很多人做Java开发4,5年后,都会感觉自己遇到瓶颈。什么都会又什...

JAVA高级架构v
前天
0
0
Java程序员编程学习—Java新手职业生涯规划分享

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
05/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

区块链教程以太坊源码分析chain-indexer区块链索引一

兄弟连区块链教程以太坊源码分析chain-indexer区块链索引一 chain_indexer 区块链索引 chain_indexer.go 源码解析 chain_indexer 顾名思义, 就是用来给区块链创建索引的功能。 之前在eth协议...

兄弟连区块链入门教程
24分钟前
1
0
社会化分享插件集成分享

一.前提摘要 社会化分享每个app必备的推广需求,无论是拉新,邀请,游戏奖励,等等都离不开分享的影子,下面我们介绍下社会化分享的插件; 首先要说下,现在的社交App,社区App等,国内外的...

佳妮
25分钟前
3
0
IOC 之 Spring 统一资源加载策略

统一资源:Resource org.springframework.core.io.Resource 为 Spring 框架所有资源的抽象和访问接口 它继承 org.springframework.core.io.InputStreamSource接口 作为所有资源的统一抽象,S...

职业搬砖20年
25分钟前
2
0
Python爬虫实战入门一:工具准备

一、基础知识 使用Python编写爬虫,当然至少得了解Python基本的语法,了解: 基本数据结构 数据类型 控制流 函数的使用 模块的使用 不需要过多过深的Python知识,仅此而已。 个人推荐《Pytho...

糖宝lsh
29分钟前
2
0
Hanlp中使用纯JAVA实现CRF分词

Hanlp中使用纯JAVA实现CRF分词 与基于隐马尔可夫模型的最短路径分词、N-最短路径分词相比,基于条件随机场(CRF)的分词对未登录词有更好的支持。本文(HanLP)使用纯Java实现CRF模型的读取与...

左手的倒影
31分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部