首先,我不是一个初学者。笔记仅仅作为知识的补充,笔记将记录其中比较特色,带入作者思考的部分。非操作性,且对实际编程有帮助的内容,会提到,不一定会展开。红色位置代表疑问,可以在后续章节,或者实际操作中完成。

1 关键术语

1.1 简单性

关于这个方面,作者的观点比较有特色。        

(1)语法简单

        一个是语法上 Java 程序相对于 C++ 而言,删减了其中一些比较复杂的,类似于指针,多重继承,运算符重载,虚基类,结构体,联合这些概念。

(2)基本解释器小

在一些微处理器上,最内核的部分仅仅需要40KB。

1.2 面向对象

         Java 它是自上而下的,从整体到局部的过程;而 C++ 是自下而上的,从局部到整体过程,C++ 本身更注重工具层次。个人的理解,这部分更深层次的意思是, Java 更多的是考虑人的开发速度, C++ 更注重工具的执行效率。

        作者认为两者的主要区别是 C++ 支持多重继承,而 Java 是以接口形式实现的,概念更简单。但是,随着 Java 版本的逐渐增加,实际上 Java 在这个方面,还是向着多重继承的方向上靠拢,或者说有这个趋势。JDK8 开始支持接口内的静态方法默认方法JDK9 开始支持接口内的私有静态方法私有默认方法。我认为后续有继续向 C++ 多继承靠拢的可能性。

运行时自省,需要在第五章解释。

1.3 分布式(网络)和多线程

        这两点,作者是分开描述的,但因为内容比较少,本身又存在共通性。所以笔记中把两者结合在一起进行叙述。他们的共同点是,都是由 Java 在较早的实际提供了系统库,使程序员再进行这两种操作的时候更方便。

        其中多线程,作者有一个强调的点,它是第一个支持并发程序设计的主流语言
       

1.4 安全性和健壮性

        因为 Java 本身不直接支持程序对于指针的操控,所以在安全性方面大大增加。无论是对于堆栈,内存,文件的控制,本身都无法通过外界直接操控,可以说在这个方面 Java 的隔离性做的比较好。但是也报出过安全性问题。

        如前一段时间,服务器通过 Log4j2 记录攻击请求中包含的基于 JNDI LDAP 的恶意负载,是攻击者控制的地址。记录的恶意负载被触发,服务器通过 JNDI 向请求。

1.5 class 文件、可移植性、解释器

        这几个其实都是体现 Java 跨平台特性。class 文件这种中间格式的产生,是的整个运行速度要比二进制格式要的多,需要在不同平台上的解释器上做特定处理,然后才能执行。

        同时也源于 Java 设计之初,把基本类型的格式大小调成一样,比如 int 整型固定为 32 位,在任何机器下运行都是一致的。

        Java 原本不提供即时解释,立刻执行这种类似于 python 的功能,直到 JDK9 除了一个 jshell 才得以实现

1.6 高性能

        这部分作者提到的观点是,即时编译器可以及时优化代码。但实际操作过程中,同一段代码可能要执行成千上万次,才会起到对应的即时编译器的期望效果。

        个人认为,性能主要体现在虚拟机版本和参数的适配上,好的调参可以充分发挥机器的性能。

1.7 动态性

        更好的描述是 JDK 自身的稳定性。高版本几乎可以完全兼容低版本的 JDK,而几乎没有副作用。同样的操作系统位数的情况下,是没有副作用的。但是实测,普遍认为 x86 版本的性能要更高一些,对空间的浪费更少。 

发展史部分跳过。。。。个人认为对编程技术提升上没有帮助。。。。

1.8 常见误解

        这部分,个人认为有一部分观点,主观性很强,这部分跳过。

(1) Java 是 HTML 的扩展

        Java 是程序设计语言, HTML 是超文本标记语言,是用来描述网页结构的,不是程序语言,两者没有共通之处。两者不冲突,可以联合使用。

(2) 使用 XML 不需要 Java

        Java 是程序设计语言,XML 是可扩展标记语言,是一种传输保存数据的格式,XML不是程序设计语言,两者不冲突,可以联合使用。

(3) Java 将成为使用与所有平台的通用性语言

        实际上苹果系统有 IOS, 微软电脑的有 WINDOWS, 这些领域,对应的系统已经具有独特优势, Java 无法进行替代。当然,理论上是可能的。

(4) Java 是解释型的,对于关键的应用程序速度太慢了

        有 JIT 和虚拟机调参的帮助,这个速度差异不会很明显。

(5) Java 有重大的安全风险

        和其它平台相比,Java 还是更安全。

(6) JavaScript 是 Java 简易版。

        两者是完全不同的程序设计语言,其中 Java 是强类型的, JavaScript 是弱类型的。

公众号:钰娘娘知识汇总,信息和其它学习内容将同步整理在这里,喜欢的话,关注一下吧!

笔记 第一章 Java程序设计概述_java