1. 子类和父类的关系是 is-a,父类和子类的关系不是 has-a
2. List<?extendsString> list ?表示元素是String 类型或者他的子类(Part B. Question11)
3. Arrays.binarySearch(Object[]a, Object key) (question 16)
使用该搜索方法前要先对a[]进行排序。 如果搜素的key包含在数组中,则返回其在数组中的索引值,若数组中不含key,则返回其应当被插入位置的索引值。会抛出ClassCastException
4. Treeset (question17)
Treeset在存储对象的时候会自动为对象排序。 (Integer 和 String 有默认顺序, 若是自定义的类想要通过Treeset排序,则该类需要先实现Comparable接口,重写compareto方法)
5. Thread (question19)
start() : Causes this thread to begin execution; the Java Virtual Machine calls the run
method of this thread.
join() : Waits for this thread to die.
6. (转载)JAVA的synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。假如再细的分类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class literals(类名称字面常量)身上。在进一步阐述之前,我们需要明确几点:
A.无论synchronized关键字加在方法上还是对象上,他取得的锁都是对象,而不是把一段代码或函数当作锁――而且同步方法很可能还会被其他线程的对象访问。
B.每个对象只有一个锁(lock)和之相关联。
C.实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。
synchronized关键字的几种使用情况。
1)放在方法的返回类型和access privilege之间。
Public synchronized void method(){}这是同步方法,这时synchronized锁定的是调用这个同步方法对象。上边的示例代码等同于如下代码:
- public void method()
- {
- synchronized (this) // (1)
- {
- //…..
- }
- }
2)同步块
- public void method(SomeObject so) {
- synchronized(so)
- {
- //…..
- }
- }
这时,锁就是so这个对象
3)将synchronized作用于static 函数
- Class Foo
- {
- public synchronized static void method1() // 同步的static 函数
- {
- //….
- }
- public void method2()
- {
- synchronized(Foo.class) // class literal(类名称字面常量)
- }
- }
代码中的method2()方法是把class literal作为锁的情况,他和同步的static函数产生的效果是相同的,取得的锁很特别,是当前调用这个方法的对象所属的类(Class,而不再是由这个Class产生的某个具体对象了)。