读书笔记——《Java核心技术 卷一》
第一章 Java程序设计概述
Java程序设计平台
Java是一个完整的平台
- 提供一个庞大的
库
,包含了很多可重用
代码,例如数据库存取功能,无需手动编写代码 - 提供了一个高质量执行环境,这个环境提供了诸如
安全性
、跨操作系统的可移植性
以及自动垃圾收集
等服务
功能齐全
- 具备赏心悦目的
语法
和易于理解的语义
(原话)
Java存在兼容性
问题(作者的想法)
- 为了与现存代码的兼容,新增的特性就
没有
原有特性那么简洁精炼
Java“白皮书”的关键术语
简单性
- 语法上的简单
- 剔除了C++中许多很少使用又难以使用和理解的特性,例如头文件、指针运算、结构、联合、操作符重载、虚基类等,因为这些特性带来的麻烦远远多于它的好处
- 另一个方面是“
小
”
- 基本的解释器以及类支持大约40KB
- 基础的类库和对线程的支持,大约再增加175KB
- 当然,这是在当时刚发布时的情况了,由于不断发展,类库已经相当庞大了,现在提供了一个Java微型版(Java Micro Edition),适用于嵌入式设备
面向对象
- 简单来讲
- 面向对象设计是一种程序设计技术,重点放在数据(即对象)与对象的接口上
- 比方:一个“面向对象”的木匠始终首先关注最终的成品:”椅子“,其次才是制作的工具
- 与C++的对比
- 面向对象特性两者旗鼓相当
- Java不同之处在于可以接口多重继承,同时接口也是更简单的概念,提供了更加丰富的
分布式
Java提供一个例程库,用于处理TCP/IP协议,因而可以通过url访问网络上的对象,就像访问本地文件一样便捷
健壮性
- Java强调前期的问题检测,后期的运行时检测,其编译器能够检测出在其它语言中仅在运行时才能够检测出来的问题
- Java采用的指针模型能够消除重写内存的可能性,而C++就会出现这种由于指针bug引起的内存冲突
安全性
为什么要重视安全性?
- 这是由于Java是要适用于分布式网络环境的,重视安全性是必然的
能够防范各种攻击手段
- 蠕虫和病毒:运行时堆栈溢出
- 破坏进程空间之外的内存
- 未经授权读写文件
小插曲,Java对不可信代码下载的态度转变
- 起初的态度是,“放马过来吧,我们有沙箱环境“,但是不久后就猛地打脸了,Java的安全模型尽管相当复杂,但黑客却擅长从中找出小漏洞,导致不可信的代码直接攻击到主系统,sum以及oracle公司为了修复漏洞也是经历了一段很艰难的日子
- 至此,Java浏览器不再信任任何不可信代码,除非代码有数字签名以及经过用户的同意
体系结构中立
为“虚拟机”生成代码,它就是大名鼎鼎的字节码文件,这是一种编译过的代码,与特定的计算机体系结构无关
主要有两个优点
即时编译:将执行最频繁的字节码序列转换为机器码,提升执行效率
. 检查指令序列的行为,增强安全性
可移植性
Java数值类型有固定的字节数,例如int永远是32位的整数,消除了代码移植时的主要问题
二进制数字以固定格式进行存储和传输,消除了字节顺序的困扰,字符串采用标准的Unicode格式存储
绝大部分的Java类库都很好支持平台独立性,而不必操心底层操作系
解释型
Java解释器可以直接执行Java字节码
Java9提供了Jshell工具支持快捷且具备探索性的编程
高性能
上面讲到,Java编译器具备即时编译的优点
监控哪些代码频繁执行并优化执行速度
如果一个特定函数不会被覆盖,就可以使用内联,即消除函数调用
多线程
多线程有什么作用?
\- 带来更快的交互响应和实时行为
因为摩尔定律(自行百度)即将走到尽头,不再追求更快的处理器了,而是着眼于获得更多的处理器,
Java是第一个支持并发程序设计的主流语言并且表现很出色
动态性
能够适应不断发展的环境,类库中可以自由添加新方法和实例变量,对客户端没有任何影响
支持为正在运行的程序增加代码,可以十分简单找到运行时类型信息
Java applet与Internet
可自行了解,applet这块已经淘汰不知道多久了。。
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 | 泛型类、循环、可变元参数、自动装箱、元数据、枚举、静态导入 | 3279 |
6 | 2006 | 无 | 3793 |
7 | 2011 | switch支持字符串、菱形运算符、二进制字面量、异常处理增强 | 4024 |
8 | 2014 | lambda表达式、包含默认方法的接口、流和时间/时间库 | 4240 |
9 | 2017 | 模块、其他的语言和类库增强 | 6005 |
关于Java的常见误解以及解释
Java是HTML的扩展
Java是一种程序设计语言,HTML是一种描述网页结构的方式,不考虑applet的HTML扩展,两者没有任何联系
使用XML,所以不需要Java
Java是一种程序设计语言,XML只是一种描述数据的方式,而Java API对XML处理提供了很好的支持
Java是一种十分容易学习的程序设计语言
作者大大原话:像Java这种功能强大的语言大都不太容易学习,必须将编写玩具式程序的轻松与开发实际项目的艰难区分
Java将成为适用于所有平台的通用性编程语言
理论上将有可能,但实际上在其它领域其它语言会更合适
比如
浏览器中的处理完全由JavaScript掌控
window程序通常都用C++或C#编写
Java在服务器端或跨平台客户端的应用领域则很有优势
Java只不过是另外一种程序设计语言
Java的成功缘于其类库能够轻松完成原本由一定难度的开发任务,例如网络连接、Web应用和并发编程,减少了指针错误,这是个额外的好处,但是这些并不是Java成功的全部原因