//2015年6月28日
//未完成
1.HashMap
提高冲突时性能
好的初始值
扩容
list底层用数组实现,asList会改变次序,但传给新的arraylist则不会
2.继承、组合、接口
继承:父类改了,子类都要改;耦合度太高
3.静态工厂:
类的创建模式,静态方法模式
4.广义接口的真正意义是在类的继承中体现多态的功能;重载不是多态
5.final:终态
final类:不能被继承
final方法:不能被覆盖
final容器:本身不能改变,但可以改变其中的对象
6.protected(应用:clone方法)
包外子类看到的是继承来的protected方法和属性,而不是父类对象的
clone不能被object直接调用(object中并没有实现),但可以被子类调用。调用时会检查子类是否实现了cloneable接口
7.this作用
局部变量重名
访问对象而不是实例
在一个构造函数中调用另一个构造函数
8.synchronized与lock
后者可实现前者所有功能
前者会自动释放锁,后者需在finally中人工释放
注意synchronized锁定的是对象而不是一段代码或方法
9.serializable不保存成员方法和静态成员变量
10.进程与线程
不同进程地址空间独立,而同一进程内线程共享地址空间
进程是资源调度和分配的基本单位;线程是cpu调度的基本单位
切换线程代价低,且多线程间同步,通信容易实现
前者为静态概念,一个进程不会运行,运行的是主线程
11.static(运用:静态工厂,JDBC中的用户名密码)
当类被java载入时,会对static进行初始化,而其他变量需等到实例化。
static方法是静态绑定,其他方法默认为动态绑定
C中则是改变存储方式,作用域;默认为0
static final 全局常量
12.malloc free javaGC
new=malloc+构造函数
C/C++ 申请内存需要系统调用,开销大
JVM先一次性分配较大内存,如何每次new的时候都在该空间上进行分配和回收就和GC原理有关了
13.java 栈、堆
对象引用放在栈,new出来的东西放在堆
栈空间小,速度快,但数据大小必须固定,生命周期固定;heap大
14.String不是基本数据类型;而是对象
String str=””;String str=new String (“”);的区别:
前者编译期决定,放在常量池;后者new在运行期,放在堆里
15.string用equal而不是==
字面值引用与对象引用的不同;前者会先去找字面值为3的引用
string其实是一个final类,每个改变string的值,会创建一个新的对象;没创建string对象而是指向string类的引用
stringbuffer当string需要经常变动时;而且要在初始化时指定较大内存,避免复制数组开销
16.stringbuffer
stringbuffer a=“”;
b=a.append("ss");
a也改变了