关于实现接口的疑惑 比如Serializable 我们知道Serializable接口里面没有任何方法 但一个类实现了这个接口 就能序列化 我想问下 Serializable接口里面没有任何方法 它是怎么序列化的 由它的子类完成? 但它的子类跟我写的实体类没有任何关系啊 难道实现了接口 就能和接口的实现类相关联 Serializable接口里面没有方法 就不能完成多态 越想脑壳越昏 谁来解答一下小弟的疑惑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ObjectOutputStream 和 ObjectInputStream分别与FileOutpuStream和FileInputStream一起使用时可以为程序提供对对象图形的持久性存储。其优点是:即使程序运行结束,对象仍然可以保存下来。必须实现Serializable接口。一个类想实现序列化,必须实现Serializable接口。若某个属性不要求进行序列化,则使用关键字transientclass Person implements Serializable{private String name;//private int age;private transient int age;public Person(String name ,int age){this.name = name;this.age=age;}public String toString(){return this.name+" "+this.age;}}public class SerializableTest{public static void main(String args[])throws Exception{Person p = new Person("lilei",23);ObjectOutputStream oos = null;//开始序列化oos = new ObjectOutputStream(new FileOutputStream(new File("D:\\myTest.txt")));oos.writeObject(p);//反序列化ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("D:\\myTest.txt")));Person p1 = (Person)ois.readObject();System.out.println(p1);ois.close();oos.close();}} Serializable只是一个标记,代表这个类是可以序列化的,就这么简单。不是所有接口都必须有成员方法的。比如Servlet,如果实现了SingleThread的话,web服务器就对客户的每次请求都创建一次该Servlet的实例,请求结束后销毁(perl的cgi程序就是如此)。否则,所有请求都用同一个Servlet的实例。 确实起标识作用,jvm会按照这个标识去调用本地方法实现序列化。 你了解Cloneable接口么?差不多的道理 这个就是看java怎么处理的只是个标识好比给你开着120救护车 管你车里坐的什么人一样都可以飙车闯红灯了java就任这个标识 当你是120了 所以放行 Serializable只是标识哪个类可以被序列化。真正的序列化是由IO完成的。 Serializable 作为标记接口。所有的序列化实现方法都需要在序列化之前写一段这样的代码:if(!(obj instanceof Serializable)) { throw new XxxxxXxxxException();}只是人为地检查一下,标记这个类属于可序列化的类。 Serializable只是标记接口,无具体要实现的方法... 仅仅是 JVM 里面规定的,有一个原因就是:对于可能产生泄密的情况,安全的原则是”没有明确允许就表示禁止“,在 Java 中也是如此,如果一个类没有实现 Serializable 接口就表示设计者并没有打算让它可以通过序列化保存到磁盘或通过网络发送出去,那就等于多了一个不安全的因素,否则的话人家的程序就可以把所有的对象都通过网络发送出去,然后在另一个台机器上还原出来,岂不是复制了一份? 菜鸟一枚,求各位前辈指点一二。 难道这个是多态? Array/Arrays 有什么区别? dom4j怎么解析多个xml JAVA菜鸟求高手指点 java定时器问题,请帮忙看看,谢谢了 在我自己的类里编写clone,clone()函数里只写了super.clone()就实现了类里的基本字段复制,是Object实现了复制功能吗? JTable的数据显示问题 寻找根据数据库表自动生成java类的工具,线上揭帖! 字符串的运行结果的具体分析 (急)如何用JAVA解析和生成 EDIFACT 文件 JAVA串口编程
可以为程序提供对对象图形的持久性存储。
其优点是:即使程序运行结束,对象仍然可以保存下来。必须实现Serializable接口。
一个类想实现序列化,必须实现Serializable接口。
若某个属性不要求进行序列化,则使用关键字transient
class Person implements Serializable{
private String name;
//private int age;
private transient int age;
public Person(String name ,int age){
this.name = name;
this.age=age;
}public String toString(){
return this.name+" "+this.age;
}
}public class SerializableTest{
public static void main(String args[])throws Exception{
Person p = new Person("lilei",23);
ObjectOutputStream oos = null;
//开始序列化
oos = new ObjectOutputStream(new FileOutputStream(new File("D:\\myTest.txt")));
oos.writeObject(p);
//反序列化
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("D:\\myTest.txt")));
Person p1 = (Person)ois.readObject();
System.out.println(p1);
ois.close();
oos.close();}
}
不是所有接口都必须有成员方法的。
比如Servlet,如果实现了SingleThread的话,web服务器就对客户的每次请求都创建一次该Servlet的实例,请求结束后销毁(perl的cgi程序就是如此)。否则,所有请求都用同一个Servlet的实例。
只是个标识
好比给你开着120救护车 管你车里坐的什么人
一样都可以飙车闯红灯了java就任这个标识 当你是120了 所以放行
throw new XxxxxXxxxException();
}只是人为地检查一下,标记这个类属于可序列化的类。