您的位置:首页 > 编程语言 > Java开发

java学习笔记【五】--thinking in java 小记录2

2013-04-14 23:20 344 查看
set不允许相同对象,相同会不放入。list有顺序,collection有一定规则,map按键=值。都自带toString方法重载,
ArrayList是能够自动扩展的数组add,get ,size方法可用
collection的方法是add,set和map都会改变顺序,如果想要顺序,那就用LinkedHashMap或者LinkedHashSet
map是put.

Collection有一个辅助类Collections,fill复制list型的集合
用法:List l=new ArrayList()
Collections.fill(l,"hello")

对象的克隆浅层: 用Vector v=new Vector
v.addElements(o1)
o2=(Vector)v.clone()
vector的方法:addElement(),v.elementAt(i),nextElement()
Integer.toString(i)
克隆接口:Cloneable是空的,只是一个标记,object.clone()会检查这个接口,想使用克隆方法的必须实现接口,instanceof Cloneable检查是否能克隆(可以作为可克隆断代)。
object类的clone方法是保护的,不能用x=new object()来x.clone(),而是使用继承衍生类。并且也是只复制一次内存到新区域的浅层复制
例子:
class MyObject implements Cloneable{
public Myobject clone(){
o=super.clone()//可能会抛出CloneNoSupportedException
return o;
}
}
手动深层复制:
o=super.clone()
o.obj1=(obj1)o.obj1.clone()

o.obj2=(obj2)o.obj2.clone()

对象的序列化:实现了serializable接口的类可以把对象序列化成一系列字节。自动构建对象内的对象引用关系网
方法:
class1 先实现接口,然后
o=new class1()
out=new ObjectOutputStream( new FileOutputStream("haha.TXT"));//存入
out.writeObject()
读取:
in=new ObjectInputStream(new FileInputStream("haha.txt"))
w2=(Class1)in.readObj()
序列化后生成的对象不能getClass()和getName。除非文件在类路径。
而用Externalizable接口,可以实现控制序列化的具体过程
增加2个实现:readExternal(InputObject) 和writeExternal(OutputObject),复原时自动使用,而且会调用所有默认构造器(无参数)除此之外没有其他任何自动序列化的数据(用以控制敏感数据)。
 System.currentTimeMillis()

serializable也可以控制,用自定义方法,这些方法必须含有下列准确的签名:  

private void  writeObject(ObjectOutputStream stream)

    throws IOException;

 

private void  readObject(ObjectInputStream stream)

    throws IOException, ClassNotFoundException
另外用defaultwriteObject来表示系统默认执行的。
static的变量序列化时只复制一次。
RTTI:基本类型也有类对象,存在着:void.TYPE字段指向他们的句柄。
isInstanceof要优于instanceof
对象句柄的常用方法:getInterfaces,newInstance(克隆一个对象的另一种方法),getSuperclass,getName,isInterface。对象可用getClass。
Class.forName("")主要是只知道类名时方便获取class对象引用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: