文档章节

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

l
 liutongl_5
发布于 2017/09/11 21:33
字数 2338
阅读 3
收藏 1
点赞 0
评论 0

第一章 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

少走弯路,给Java 1~5 年程序员的建议

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

重走Java ⋅ 05/29 ⋅ 0

Java程序员编程学习—Java新手职业生涯规划分享

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

Java小辰 ⋅ 05/17 ⋅ 0

Java编程语言:学JAVA没有基础,给你4个方向少走弯路。

Java java常常跟"企业"联系在一起, 因为具备一些很好的语言特性, 以及丰富的框架, 在企业应用中最被青睐, 你总可以听到关于J2EE, JSP, Hibernate之类的东西的讨论. 同时, java在手机领域也有...

启示录是真的 ⋅ 05/24 ⋅ 0

阿里年薪50WJAVA工程师转大数据学习路线!

大数据有两个方向,一个是偏计算机的,另一个是偏经济的。你学过Java,所以你可以偏将计算机的。 Java程序员想转大数据可行吗?Java是全世界使用人数最多的编程语言。不少程序员选择Java做为...

JAVA丶学习 ⋅ 04/25 ⋅ 0

sharding-jdbc源码分析—准备工作

原文作者:阿飞Javaer 原文链接:https://www.jianshu.com/p/7831817c1da8 接下来对sharding-jdbc源码的分析基于tag为源码,根据sharding-jdbc Features深入学习sharding-jdbc的几个主要特性...

飞哥-Javaer ⋅ 05/03 ⋅ 0

JavaWeb07-HTML篇笔记(二)

1.1 案例一:使用JDBC完成CRUD的操作:1.1.1 需求: 对分类管理使用JDBC进行CRUD的操作. 1.1.2 分析:1.1.2.1 技术分析: 【JDBC的概述】 Ø JDBC:Java DataBase Connectivity Java数据库的连...

我是小谷粒 ⋅ 05/16 ⋅ 0

java程序员基础进阶篇,万丈高楼平地起

一.final,finally,finalize 三者区别 Final是一个修饰符: 当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值 当final修饰的变量为静态变量(即由static修饰)时,必须在声明这...

启示录是真的 ⋅ 05/26 ⋅ 0

Java程序员是吃青春饭的吗?还是自身的能力达不到年龄的要求?

近期,我与团队同学探讨了职业发展规划的问题。有些同学表示希望后续能进一步在技术领域(或管理方向)有进一步的积累;有的同学表示希望在新的一年能具有更好的技术影响力,自己能做一些技术...

Jack丶miss ⋅ 06/15 ⋅ 0

Java多线程学习(二)synchronized关键字(2)

系列文章传送门: Java多线程学习(一)Java多线程入门 Java多线程学习(二)synchronized关键字(1) java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Ja...

一只蜗牛呀 ⋅ 04/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 24分钟前 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 50分钟前 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 58分钟前 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

容器之查看minikue的environment——minikube的环境信息

执行如下命令 mjduan@mjduandeMacBook-Pro:~/Docker % minikube docker-envexport DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://192.168.99.100:2376"export DOCKER_CERT_PATH="/U......

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部