0%

并发得专门开个分类 x

到时候把这篇删掉 x

零碎

所有实例域、静态域和数组元素都储存在堆内存中,堆内存在线程之前共享。
JMM 定义了:线程之间的共享变量储存在主内存中,每个线程都有一个私有的本地内存,本地内存储存了该线程已读写共享变量的副本。

  • 线程 A 把本地内存 A 中的共享变量副本刷新到主内存中。
  • 线程 B 去读取主内存中线程 A 刷新过的共享变量。
  • 从整体来看,这两个步骤实质上是线程A向线程B发送消息,而通信必须经过主内存。JMM 通过控制主内存与每个线程的本地内存之间的交互,来提供内存可见性的保证。
阅读全文 »

具体集合部分

链表 LinkedList
List 接口描述有序集合,有两种访问元素的协议,迭代器或 get set 方法,后者更适合数组。链表对于删除插入元素很有效,允许对象有重复的值。
Java 中链表都是双向链接的,即每个结点存放前驱结点和下一个结点的引用。如果链表有 n 个元素则有 n+1 个位置可以插入新元素。
链表只跟踪结构性修改,set 方法不被视为结构性修改。
避免使用整数索引表示链表中位置的方法,如果需要对集合进行指定访问,就使用数组或 ArrayList 而非链表。

阅读全文 »

类型变量限定
对类型变量 T 设置限定 <T extends BoundingType>。T 的绑定类型可以是类也可以是接口,只是 extends 关键词更接近子类概念,并非表达继承的意思。
一个类型变量或通配符可以有多个限定,限定类型用 & 分隔,类型变量用逗号分隔。但限定中至多有一个类,并是限定列表的第一个。

阅读全文 »

异常部分

概念
非受查 unchecked 异常:派生于 Error 类或 RuntimeException 类的所有异常,其它的异常称为受查 checked 异常。

创建异常类
派生于 Exception 或其子类。应该包含两个构造器:默认构造器和带描述信息的构造器(超类 Throwable 的 toString 方法会打印出详细信息)。

阅读全文 »

接口部分

特性
可以使用 instanceof 检查一个对象是否实现某个接口:

1
if (anObject instanceof Comparable) { ... }

接口中不能包含实例域或静态方法( Java 8 支持静态方法),允许常量。接口中的方法默认为 public,域默认为 public static final。

阅读全文 »

超类子类部分

this 和 super

this super
引用隐式参数 调用超类方法
调用该类其他构造器 调用超类的构造器

但是:super 不是一个对象的引用,只是一个指示编译器调用超类方法的关键词

is-a 规则
出现超类对象的任何地方都可以通过子类对象置换。即置换法则。

方法调用
假设调用 x.f(args),x 是类 C 的一个对象:

阅读全文 »

预定义类部分

更改器和访问器
更改器方法:调用方法后,会改变对象的状态。
访问器方法:只访问对象而不修改对象,通过生成新对象的方式应用改动。

自定义类部分

封装
注意是否返回了引用可变对象,即访问器方法返回了一个有更改器方法的对象;返回可变对象的引用时,应该先进行 clone。
Date 类有更改器方法 setTime,破坏了封装性:

阅读全文 »

使用 git branch 命令创建分支。git branch -d 删除分支。git branch -v 命令查看每个分支的最后一次提交。git branch –no-merged 查看未合并的分支,未合并的分支 -D 才能删除。
切换到一个已存在的分支,使用 git checkout 命令。

1
2
3
4
git checkout -b name
等同于
git branch name
git checkout name
阅读全文 »

Git 有三种状态:已提交(committed)、已修改(modified)和已暂存(staged)。

  • 已提交表示数据已保存在本地数据库中。
  • 已修改表示修改了文件,但还没保存到数据库中。
  • 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 从其它计算机克隆仓库时,拷贝的就是这里的数据。
工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作“索引”。

阅读全文 »