Snowdream

I'm awake but my world is half asleep
posts - 398, comments - 234, trackbacks - 0, articles - 7
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2007年5月4日

     摘要: 1. 面向对象语言的四个要素:封装、聚合(Aggregation)、继承、多态。ps. Aggragation - the capability to store one object inside of another object(貌似这本书并没有区分Object-based和Object-oriented)2. 创建对象基本和Java一样,但对于无参构造器,也可以使用类似Delphi的没有括...  阅读全文

posted @ 2007-05-04 23:06 ZelluX 阅读(194) | 评论 (0)编辑 收藏

越来越发现JavaScript其实是一门很强大、很精深的语言,要好好学习下。
以下例子都摘自于Professional JavaScript for Web Developers

1. JavaScript中函数不能重载。

2. 每个函数有一个对应的arguments[]数组,包含所有的参数,且数量不需固定。

function howManyArgs() {
    alert(arguments.length);
}

3. 函数也是一个对象,使用Function类创建函数的方法是:
var function_name = new Function(argument1, argument2,..,argumentN, function_body);
这里所有的参数都必须是字符串。
var sayHi = new Function("sName", Message""alert(\"Hello \" + sName + \", \" + sMessage + \”);”);
从这个角度看,不支持函数重载的原因也很简单。
doAdd = new Function("iNum""alert(iNum + 100)");
doAdd 
= new Function("iNum""alert(iNum + 10)");
doAdd(
10);
可以推出的几个结论:
a) 第二次函数声明使得doAdd指向了另一个对象,自然不可能实现重载。
b) 函数可以通过句柄很容易的复制。
c) 函数能作为参数传递给另一个函数。
d) func.toString()可以得到函数的具体内容。

4. 闭包 Closure
简单的定义就是使用了函数体之外的引用。
var sMessage = “Hello World!”;
function sayHelloWorld() {
    alert(sMessage);
}

sayHelloWorld();
var iBaseNum = 10;
function addNumbers(iNum1, iNum2) {
    
function doAddition() {
        
return iNum1 + iNum2 + iBaseNum;
    }

    
return doAddition();
}
例二中的内嵌方法doAddition()使用了外部方法的参数。

posted @ 2007-05-04 22:20 ZelluX 阅读(96) | 评论 (0)编辑 收藏

java.util.AbstractCollection
感谢BBS上的outerheaven解答了add(E o)方法的问题。在把add方法写成抛出异常不是为了防止子类向上转型时错误地调用AbstractCollection的这个方法,而是为了让不支持add方法的子类继承,比如EnumSet类,它的元素是在创建时就决定的,不支持add方法。

java.util.AbstractList
1) 包含了
private class Itr implements Iterator<E>
private class ListItr extends Itr implements ListIterator<E>
而ListIterator又是继承Iterator接口的。
分成两个类写是不是为了使代码清晰呢?

2) 使用了modCount变量检查并发操作时容易发生的问题。
Iterator中有一个expectedModCount变量,每次通过Iterator操作时,都会调用checkForComodification()方法,检查expectedModCount是否和AbstractList的modCount相等,如果不同则抛出ConcurrentModificationException。

3) subList方法和SubList类和视图view有关(是不是Observer模式的应用呢?),先不看了

4) equals方法中最后那个判断语句有点新颖(或者我土了)
public boolean equals(Object o) {
  
if (o == this)
    
return true;
  
if (!(o instanceof List))
    
return false;

  ListIterator
<E> e1 = listIterator();
  ListIterator e2 
= ((List) o).listIterator();
  
while(e1.hasNext() && e2.hasNext()) {
    E o1 
= e1.next();
    Object o2 
= e2.next();
    
if (!(o1==null ? o2==null : o1.equals(o2)))
      
return false;
    }

    
return !(e1.hasNext() || e2.hasNext());
  }

}

5) hashCode的生成:
hashCode(e1, e2, ..., en) = Sigma(hashCode(ei) * 32^i)
没有考虑溢出之类的情况,因为只是个hashCode嘛

posted @ 2007-05-04 13:11 ZelluX 阅读(433) | 评论 (0)编辑 收藏