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对象引用
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对象引用
相关文章推荐
- JAVA学习日记---Thinking in Java学习笔记,6章总结
- Thinking in java 学习笔记(2)
- thinking in java学习笔记-第一章
- thinking in java 学习笔记之Composition vs Inheritance
- Thinking in java学习笔记 第二章:一切都是对象
- Thinking in java学习笔记-并发(二)
- Thinking in java 学习笔记 001
- selenium 学习笔记 ---新手学习记录(3) 问题总结(java)
- 我的Thinking in Java学习笔记(一)
- Java学习笔记(十九)——Java 日志记录 AND log4j
- 我的Thinking in Java 3rd 的学习笔记
- thinking in java 学习笔记(一)
- selenium 学习笔记 ---新手学习记录(8) 问题总结(java)
- Thinking in Java学习笔记,可以被Future.cancel()中断的资源
- java学习笔记-excel表格形式记录
- thinking in java——0316学习笔记
- java学习记录笔记--多态,接口,UML简介
- selenium 学习笔记 ---新手学习记录(10) 问题总结(java)--poi--excel 操作
- Thinking in Java [Java编程机制] 学习笔记 -- 操作符Operator
- 《Java编程思想_ 深入理解java虚拟机_Thinking in java__Effiect java__设计模式》学习笔记7——泛型编程基础