Java 知识体系梳理汇总
写这些文章的初衷是什么?
中文世界的Java教材亦或者视频教程使用的JDK版本大多比较滞后,且带有传统编程思维的局限性(从面向过程到面向对象的转变)。内容编排和知识体系也比较陈旧,无法和英文世界的Java知识体系接轨。因此我决定梳理自己的Java知识体系,分享给大家。Java语言的内容翻译自 dev.java,内容非常棒。
主要针对哪些问题?
- 碎片化的Java知识体系
- 过时的Java编程思维
类型推断是Java编译器通过分析每个方法调用及其对应声明,来确定使该调用成立的类型实际参数的能力。推断算法会确定参数的类型,并在条件允许时确定结果被赋值或返回的类型。最后,推断算法会尝试找出能与所有参数兼容的最具体类型。
为说明最后一点,在下例中,推断机制判定传递给 pick 方法的第二个实参属于 Serializable 类型:
static <T> T pick(T a1, T a2) { return a2; }
Serializable s = pick("d", new ArrayList<String>());
定义新接口时,您实际上是在定义一种新的引用数据类型。接口名称可在任何可使用其他数据类型名称的位置使用。若定义类型为接口的引用变量,则赋值给该变量的任何对象都必须是实现该接口的类的实例。
例如,以下是一种在任意对象对中查找最大对象的方法,适用于从实现 Relatable 接口的类实例化的所有对象:
public Object findLargest(Object object1, Object object2) {
Relatable obj1 = (Relatable)object1;
Relatable obj2 = (Relatable)object2;
if ((obj1).isLargerThan(obj2) > 0)
return object1;
else
return object2;
}
要声明实现接口的类,需在类声明中包含一个 implements 子句。一个类可以实现多个接口,因此 implements 关键字后需跟随由逗号分隔的该类所实现接口的列表。按惯例,如果存在 extends 子句,则 implements 子句应紧随其后。
考虑一个定义如何比较对象大小的接口。
public interface Relatable {
// this (object calling isLargerThan())
// and other must be instances of
// the same class returns 1, 0, -1
// if this is greater than,
// equal to, or less than other
public int isLargerThan(Relatable other);
}
若需比较相似对象的大小(无论对象类型如何),则实例化这些对象的类应实现 Relatable 接口。