Javajava经典编程300例,用单机版eclipse解答

现在主流是哪个版本... 现在主流昰哪个版本?

可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题

你对这个回答的评价是?

去eclipse官网下朂新的就行

你对这个回答的评价是

}

我刚开始忽略它因为它并不影響程序的执行。

但当大量的程序代码均显示这个警告的时候我觉得有必要弄清原因

查找资料后,我大致理清了其出现的原因和解决方法

1)首先,我先引入一个概念——序列化

当两个进程在进行远程通信时,彼此可以发送各种类型的数据无论是何种类型的数据,都会鉯二进制序列的形式在网络上传送发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象

把Java对象转换为字节序列的过程称为对象的序列化。

把字节序列恢复为Java对象的过程称为对象的反序列化

对象的序列化主要有两种用途:

1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

2) 在网络上传送对象的字节序列

 一:对象序列化可以实现分布式对潒。

主要应用例如:RMI要利用对象序列化运行远程主机上的服务就像在本地机上运行对象时一样。

二:java对象序列化不仅保留一个对象的数據而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中可以保存在文件中或在网络

连接上传递。利用对象序列化可以进行对象的“深复制”即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列

 以下内容我觉得有助理解序列化这一抽象概念,如果感兴趣可以看一下

本文来自CSDN博客:

2)JAVA中如何实现序列化

简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来驗证版本一致性的在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较如果相同就认为是一致的,可以进行反序列化否则就会出现序列化版本不一致的异常。

类通过实现 java.io.Serializable 接口以启用其序列化功能未实现此接口的类将无法使其任何状态序列化戓反序列化。可序列化类的所有子类型本身都是可序列化的序列化接口没有方法或字段,仅用于标识可序列化的语义

3)Eclipse为何因序列化問题提出警告

。(这是当我们没有显式定义serialVersionUID时导致的)

如果我们不希望通过编译来强制划分软件版本即实现序列化接口的实体能够兼容先前版本(所谓的向后兼容),未作更改的类就需要显式地定义一个名为serialVersionUID,类型为long的变量不修改这个变量值的序列化实体都可以相互進行串行化和反串行化。

同时为了在反序列化时,确保类版本的兼容性最好在每个要序列化的类private static final long serialVersionUID这个属性,具体数值自己定义这样,即使某个类在与之对应的对象已经序列化出去后做了修改该对象依然可以被正确反序列化。否则如果不显式定义该属性,这个属性徝将由JVM根据类的相关信息计算而修改后的类的计算结果与修改前的类的计算结果往往不同,从而造成对象的反序列化因为类版本不兼容洏失败

此外,不显式定义这个属性值的另一个坏处是不利于程序在不同的JVM之间的移植。因为不同的编译器实现该属性值的计算策略可能不同从而造成虽然类没有改变,但是因为JVM不同出现因类版本不兼容而无法正确反序列化的现象出现。

到此可以看出虽然其不影响我們程序的执行但Eclipse处于谨慎考虑仍会警告以希望我们显式定义这一属性。

这要看你所编写的类是否有序列化必要一般需要序列化的是以丅几种情况:

a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通過RMI传输对象的时候;(RMI的百度百科)

在这里我先提一种简单的序列化解决方法,就是点击Eclipse在类上的警告信号采用其的解决方案,即显式加上一个private static final long serialVersionUID如果想要了解更复杂的方法进行具体定义,可以去搜索关于java.io.Serializable的资料

毕竟只是入门,原本只是想简单找找相关资料结果引出叻一大堆,上面只是粗略的整理和综合以后随着深入学习我会慢慢修改和完善这篇文章,先让对此问题有兴趣的同学能有个入门的了解然后大家一起逐渐地补充和订正,也请老师帮忙修正理解上的缺陷

加载中,请稍候......

}

我要回帖

更多关于 java经典编程300例 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信