文档章节

《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
新加坡
私信 提问
加载中

评论(0)

自学java很难?其实学好java只用4个月

Java学习大概需要多久?这篇文章教你自学java的学习路线 一、首先便是学习基础知识 1、书籍方面 推荐两本《Java编程思想》和《Java核心技术》这两本书有点年头了,也重新发布了好几代,但是最...

osc_y77zjayt
2019/12/28
14
0
【从零开始学Java笔记】为什么选择Java(学习资料分享:java四大名著+视频)

大家可以关注作者的账号,关注从零开始学Java笔记文集。也可以根据目录前往作者的博客园博客进行学习。本片文件将基于黑马程序员就业班视频进行学习以及资料的分享,并记录笔记和自己的看法。...

朱李洛克
04/07
0
0
学习Java,你看过哪些书籍?

三人行必有我师,人生是需要不断学习的,在这里我们相遇就是缘分,欢迎大家加群----四六零五七零八二四----让我们共同进步!希望各位可以看完这篇文章,也欢迎大家在下面留言讨论,觉得有帮助...

专业大数据
04/01
0
0
Java小白如何一步步学好Java,听听企业Java培训师的实践经验吧

今天我准备给小主展示一篇Java培训老师的文章,希望能给Java小白一个学好Java的路径或者提示。以下就是原文: 从大学到现在,我使用Java已经将近20年,日常也带实习生,还在公司内部做train...

osc_f15kijhe
2019/02/18
4
0
Java 学习之路让我帮助很大的书籍

笔主目前从事Java工作已经5年,满打满算下来,从大二上学期接触 Java 到现在也快走过了 7 个年头。在学习 Java 过程中,网上的一些视频还有一些书籍对我帮助都很大。下面就我自己看过的一些书...

osc_sa9nsts3
2019/12/04
5
0

没有更多内容

加载失败,请刷新页面

加载更多

URL 中文链接 编码错误 完美解决

直接上代码 str = "%25E4%25B8%25AD%25E6%2596%2587";console.log(str);str =decodeURIComponent(decodeURIComponent(str));console.log(str); 输出结果 %25E4%25B8%25AD%25E6%2596%25......

放只虎归个山
34分钟前
17
0
.NET中小数,浮点数和双精度之间的区别? - Difference between decimal, float and double in .NET?

问题: What is the difference between decimal , float and double in .NET? .NET中的decimal , float和double float什么区别? When would someone use one of these? 有人什么时候会使用......

fyin1314
今天
22
0
如何找出Windows上正在侦听端口的进程? - How can you find out which process is listening on a port on Windows?

问题: 如何找出Windows上正在侦听端口的进程? 解决方案: 参考一: https://stackoom.com/question/CXO/如何找出Windows上正在侦听端口的进程 参考二: https://oldbug.net/q/CXO/How-can...

技术盛宴
今天
10
0
OSChina 周三乱弹 —— 一家动物都快饿成标本了~

@黑觉非常君 :前天晚上9点开始睡觉,睡到昨天上午8点起床,昨天下午2点又睡,睡到下午7点多,晚上10点又困了,又睡,睡到今天上午8点,中途没醒过,怎么这么能睡,是不是快挂了。 能睡不是好...

小小编辑
今天
24
0
神剧推荐全剧最污片段精剪

神剧推荐,全剧最污片段精剪 豆瓣评分最高,脑洞最大,脑回路最曲折,恶搞无数经典,没有一条差评的神剧 整个系列完整版 到这里观看

a57571735
今天
22
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部