
继承主要为了复用代码
多态主要为了改变对象行为



javac test.java
java test



创建线程有三种方式:
1,实现Runnable接口,包括使用Runnable内部类,和外部类实现Runnable接口
2,继承Thread类
3,使用Callable和Future(在此未介绍)







原因 : java中存在两种绑定方式,一种是静态绑定,一种是动态绑定
静态绑定和动态绑定的区别:
静态绑定发生在编译期间,动态绑定发生在运行期间
使用private,static,final(都是不能被子类重写的方法修饰符)修饰的方法,使用静态绑定,而虚方法(可以被子类override的方法)根据运行时的对象进行动态绑定
静态绑定使用类信息来完成,动态绑定使用对象信息来完成
重载(overload)使用静态绑定来完成
重写(override)使用动态绑定来完成
name为private属性, 属于静态绑定,在编译期间完成静态绑定,所以会在编译期间发现错误,而不是运行期间


1,HashMap是线程不安全的,而Hashtable里面的方法大多是synchronized方法,因此Hashtable是同步的
2,HashMap允许null作为键和值,而Hashtable不允许null作为键和值
从Hashtable的源码来看其不允许null作为键和值的原因:
如果value == null ,就会throw NullPointerException
如果key == null,那么在调用Object类的hashcode()方法的时候,就会因为null.hashcode()而报NullPointerException



无符号右移/左移 >> <<
有符号右移>>: 如果最左位为1,则右移N位,就在左侧补N个1,如果最高位为0,就在左侧补N个0
无符号右移>>>: 右移N位,则在最左侧补N个0
0000 0010 >> 1 = 0000 0001
0000 1010 >> 2 = 0000 0010
1000 0010 >> 1 = 1100 0001
1000 1010 >> 3 = 1111 0001






radians 弧度
degree角度

链地址法: 如果hash之后冲突,则形成链表
开放地址法: 如果hash之后冲突,则通过探测算法,寻找空的地址(开放地址)
再哈希法
HashMap和Hashtable采用的是链地址法解决hash冲突
此外,HashSet使用HashMap来保存value,将value作为HashMap的key,这就是HashSet的value不能重复的原因




Applet,内嵌于Web文件中,由浏览器来观看
Application,可以独立运行
Servlet,运行在服务端

上面这题关于Struts ,还没弄明白

java中关键字和保留字不能用作标识符




集合中线程安全的类只有:Vector,Stack(Vector的子类),Hashtable,Properties(Hashtable的子类)是线程安全的,其余的都不是线程安全的


controller层,处理与用户的交互

对于static方法,子类是不能override的,而abstract有要求子类必须override,矛盾
