初始化有效地实现了尽可能的“惰性”
- 使用 .class 语法获取类引用不会触发类初始化。
- static final 如果是编译期常量,不会触发类的初始化;但如果不是编译期常量,则会触发初始化。
- 访问非 final 的 static 字段时总是会触发类初始化。
- Class.forName() 会强制进行类的初始化。
初始化有效地实现了尽可能的“惰性”
new Thread(Go::go).start();
虽然 Go 类没有显式实现 Runnable 接口,但由于 Go::go 是一个与 Runnable.run() 方法签名相同的静态方法,编译器能够理解并将它转换为 Runnable 实现。这就像是编译器在幕后自动帮你写了这样一段代码:
new Thread(new Runnable() { public void run() { Go.go(); } }).start();
使用 iterator() 方法要求集合返回一个 Iterator。 Iterator 将准备好返回序列中的第一个元素。
在 Java 中,Iterator 的初始状态是指向集合的第一个元素之前,它并不会直接指向第一个元素。你需要通过调用 next() 方法才能访问第一个元素。
Iterator 还可以删除由 next() 生成的最后一个元素,这意味着在调用 remove() 之前必须先调用 next()
remove() 方法用于删除由上一次 next() 返回的元素。换句话说,remove() 只能删除刚刚通过 next() 获取到的元素,并且你不能连续调用 remove() 而不调用 next()。 在调用 remove() 之前,必须先调用 next() 来获取一个元素,否则会抛出 IllegalStateException。