学习笔记

前言

本笔记为 《Java 核心技术》和 《Java 编程思想》两本经典书籍的学习笔记。
不期望读完这两本书就编程高手,但只求能对 Java 语言本身及其生态有正确的认识,以及找到一个合适的起点。

语言特色

语言有累赘
完整的平台、易于理解的语义、高质量的执行环境、庞大的库、虚拟机和垃圾收集
不同版本的 Java 类库规模不一样
即时编译-部分字节码翻译成机器码
applet 过时了,Java 写 UI 过时了。

语言基础

Unicode 转义序列会在解析代码之前得到处理。
char 类型描述了 UTF-16 编码中的一个代码单元,建议不要使用。用 String。
boolean 类型和整型值不能互换。
浮点数默认为 double,大数应用 BigInteger BigDecimal。
运算符不能重载,字符串不应使用 == 做比较。
变量类型是变量所引用的对象类型,长度不一致但是每个元素类型一致的数组类型视为同一种变量类型。
8 种基本类型以外都是对象变量。Java 种的引用相当于 C++ 的指针。
更改器方法修改原来的对象,访问器方法仅访问
静态域被成为类域。
本地方法可以绕过 Java 语言的存取控制机制。
Java 程序设计语言总是采用按值调用。
重载 overload 一个名字不同参数。重写 override 子类覆盖父类同名方法。

运行环境

jdk,包括基础的编译器 javac、虚拟机 java、官方库和文档等。
IDE 集成开发环境可以支持多个版本的 jdk。一个项目包括多个模块 module,一个模块包括多个 package,一个 package 包括多个类文件 class,类文件的文件名与类名一致。
程序运行时必须有一个入口类。
IntelliJ IDEA project Module & Java 9 Module

基本特性

基本数据类型 8 种:4 整型、2 浮点类型、1 char 类型、1 boolean 类型
变量
运算符
输入输出
控制流程
字符串、数组
对象与类,静态方法、对象构造
类的继承
反射(或自省):能够分析类能力的程序
接口 interface
lambda 表达式:java 没有函数这一类型,只能用于函数式接口
方法引用:等价于同效果的 lambda 表达式
内部类
代理
异常
断言
日志
泛型
集合:接口有迭代器等,实现有链表、散列集、树集等

并发

线程
线程状态
线程调度器
线程优先级
守护线程 daemon thread:计时线程
未捕获的异常处理器
线程组
竞争条件下同步存取
锁对象 ReentrantLock
阻塞队列
线程安全的数据结构实现
执行器-线程池
同步器

注意事项

  1. java version “1.8.0_131” 使用 IntelliJ IDE 运行会报错,可安全忽略。安装最新的 Java 8 可解决。

IntelliJ IDEA 运行 corejava 示例的方法

  1. open 打开示例文件夹
  2. Project Structure - Project 设置 JDK 版本、language level、output
  3. Project Structure - Modules 设置 Sources
  4. 找到示例入口类,右击运行 Run

可以将所有示例的 output 地址统一设置为 /Users/caisudong/Projects/java/corejava/output

macOS 配置使用 IntelliJ IDEA 右键打开目录的方法

  1. 打开 Automator ,新建一个 Quick Action
  2. 选择 Libirary-Utilities-Run Shell Script,配置 folders in Finder.app,as arguments
  3. 在 shell 内容中输入
1
2
3
4
for f in "$@"
do
open -a "IntelliJ IDEA" "$f"
done

结果如下图
image.png

坚持原创技术分享,您的支持将鼓励我继续创作!