从头再学Java——Java核心技术卷I读书笔记1
第一章 Java程序设计概述
无论是以前本科时学习的课程还是后来跟着网上教程学做的Java Web项目,实际上都对java用到的概念和细节有很多模糊的地方,或者是对背后的底层原理不是很懂。这次打算通过阅读Java核心技术并辅以自己的理解以及查阅的其他资料整理成读书笔记记录下来以把Java从底层原理到实现细节详细的学习一遍。
1.1 Java程序设计平台
Java语言具有令人赏心悦目的语法和易于理解的语义。同时Java是一个完整的平台,有一个庞大的库,库中包含了很多可重用的代码和一个提供诸如安全性、跨操作系统的可移植性以及自动垃圾收集等服务的执行环境。
1.2 Java的12个关键术语
1.简单性
Java在设计之初尽可能的接近C++,但提出了C++中许多很少使用、难以理解、易混淆的特性(如:头文件、指针、结构、联合、操作符重载、虚基类)。即Java语法是C++语法的一个“纯净”版本,不过设计者没有清除C++中所有不适当的特性(如:switch)
同时,简单性还指Java在设计之初的解释器以及类支持较小。现在随着不断的扩展,类库已经相当庞大,具有最初设计目的(嵌入式消费电子设备)和较小类库的则是JavaME版本(Java Micro Edition)。
2.面向对象
面向对象设计指将重点放在数据(将其对象化)再考虑这个数据在事件中的行为。
举个例子:如果在程序中需要实现 a add b这样一个运算步骤。面向对象设计需要先创建一个类和类中方法
,然后由该类的实例化对象调用方法,即:a.add(b);这个步骤是对象a的行为。
面向过程设计则关注程序中的每一个步骤,将步骤设计为函数
直接使用:add(a,b)。
相比于面向过程,面向对象需要实例化对象,因此性能会差一些。但是具有使用的灵活度高、扩展性强的特点。同时由于接口的特点,可以设计出高内聚低耦合的系统。
3.分布式
方便在程序中处理HTTP、FTP之类的TCP/IP协议。
4.健壮性
Java的健壮性体现在对问题检测和问题的处理上,包括编译器的早期问题检测和运行时的动态检测。
5.安全性
分为两方面:
首先是高级特性-平台安全性,Java的平台基于一个动态、可扩展、标准、可操作的安全架构。内置加密、身份验证、授权、秘钥等基础架构确保安全特性。
其次是低级特性-Java的编译器与虚拟机的内置语言安全特性
*数据类型管理-满足类型转换规则才能转换成功
*内存自动管理-垃圾回收、去除指针使用引用避免内存泄漏
*字节码校验-一系列字节码校验规则
*安全的类加载-类加载机制
6.体系结构中立
Java语言在编译时会先生成一个
平台无关
的字节码文件。在执行时将字节码文件交由对应平台的JVM进行解释执行
因此,在解释执行时的速度会低于编译型语言直接执行编译之后的机器码的速度。不过虚拟机存在一个即时编译选项可以将执行最频繁的字节码序列翻译成机器码以加速执行。
7.可移植性
Java的基本数据类型大小固定,相关运算有明确说明而
不依赖于平台去实现
。所以在程序编写时可以不考虑底层操作系统进而具有强大的可移植性。
8.解释型
Java并非是编译型语言,而是最终需要字节码在不同JVM上进行解释执行。
9.高性能
即时编译器可以监控经常执行的代码并优化以提高执行速度。同时还具有内联的优化功能。
10.多线程
Java是第一个支持并发程序设计的主流语言,多线程的设计可以让线程轮流执行而不用担心某种阻塞(如I/O)使整个系统卡住。
11.动态性
允许将某些代码添加到正在运行的程序中去。
原文地址:https://www.cnblogs.com/zjq-blog/p/15302414.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 【LeetCode每日一题】25. Reverse Nodes in k-Group
- upload-labs第一关
- upload-labs第2~8关
- dotnet OpenXML 文本 ParagraphProperties 的属性作用
- 相信坚持的力量!Elastic 日报 1000期+ 了......
- dotnet OpenXML 文本 EndParagraphRunProperties 的作用
- dotnet OpenXML 文本字体的选择规则
- 获取手机nfc的MW version 和 FW version 记录
- Sublime编辑器配置Python环境
- dotnet OpenXML 从文档生成创建文档的代码的库
- 【LeetCode每日一题】24. Swap Nodes in Pairs
- 【LeetCode每日一题】26. Remove Duplicates from Sorted Array
- K8S 生态周报| NGINX Ingress Controller又添新特性
- 网络安全实验室平台(脚本关)
- shell 多线程及线程数控制实现