| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 232 人关注过本帖
标题:【Java序列化引发的思考】
只看楼主 收藏
bubble_soup
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2018-1-21
结帖率:0
  已结贴   问题点数:20  回复次数:12   
【Java序列化引发的思考】
我们知道Java通过实现java.io.Serializzation接口实现序列化。
但,序列化对于static属性无效。
为什么?
若,该类的一个对象通过某种方法修改了这个类的static属性(通过实例访问静态属性),那它的static属性不久改变了吗?
这是我的看法。不知道大家怎么看。
2018-04-06 20:36
疯狂的小a
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:6
帖 子:224
专家分:766
注 册:2018-2-6
  得分:20 
Serializable接口....

假如人生没有梦想,和咸鱼有什么区别!
2018-04-06 20:56
bubble_soup
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2018-1-21
  得分:0 
Serializable接口。谢谢提醒。
2018-04-06 22:12
疯狂的小a
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:6
帖 子:224
专家分:766
注 册:2018-2-6
  得分:0 
你了解一下实现Serializable接口的目的作用,就知道了,为什么static修饰的变量不会被序列化

假如人生没有梦想,和咸鱼有什么区别!
2018-04-06 23:35
bubble_soup
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2018-1-21
  得分:0 
我知道,序列化就是为了便于传输数据(可以这样说吧,同时从长远考虑也是为了持久化)。
但是为什么就不能对static属性实现序列呢?
能说下您的理解吗?
2018-04-07 07:48
疯狂的小a
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:6
帖 子:224
专家分:766
注 册:2018-2-6
  得分:0 
回复 5楼 bubble_soup
static修饰的东西属于类,序列化是序列化对象,所以两个就没什么关系....不知道可不可以这么理解

假如人生没有梦想,和咸鱼有什么区别!
2018-04-07 09:07
bubble_soup
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2018-1-21
  得分:0 
嗯。话是这样说没错。但是我认为Java规定『序列化不能序列化static属性』更像是一种约定,或者说是硬性规定。
想吧,为什么Java不支持多继承?难道不是为了方便,为了方便开发者更好的使用Java进行开发,避免出错?
回归主题,之所以Java不支持序列化那些static属性,要从Java本身的语言特点进行分析:
public class {
    ...
        public static void main(String[] args){
            ...
        }
}
这便是Java的基本框架格式。
可以看出Java的所有代码都是被限制在class(类)中的。static关键字修身的静态属性,而总是和类相联系。
实现java.io.Serializable接口实现序列化。
比如:
public class Person implements java.io.Serializable{
    ...
    public static void main(String[] args){
        ...
        Person p = new Person();
        //通过ObjectOutputStream将p实现序列化
        }
}

再看Python,支持面向对象,但是却不向Java样的「死板」——代码只能限制在class中。
import pickle
d = {'1':1, '2':2}
pickle.dump(d)
这就进行了序列化。
相比于「Java只能序列化类的实例对象」,显然Python允许的对象范围更广。
而且Python也没有static关键字(为什么?我觉得很大一部分是因为它的脚本属性、它的灵活性,即既支持面向对象,也支持面向过程)。

综上,static属性为什么不能被序列化——这个问题似乎也只限于Java了(虽然C语言也有这样的关键字,但是含义不完全相同)。
我们应该跳出语言层面看到static深层次代表的东西。怎么说呢,绕来绕去,我觉得总结起来一句话:因为方便开发,就是这样的硬性规定——也是Java的语言特点。
2018-04-07 09:29
疯狂的小a
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:6
帖 子:224
专家分:766
注 册:2018-2-6
  得分:0 
你到java论坛来讨论python好?
python就是一个脚本,弱语言,速度慢,效率地下,目测过几年就被淘汰了

假如人生没有梦想,和咸鱼有什么区别!
2018-04-07 10:00
疯狂的小a
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:6
帖 子:224
专家分:766
注 册:2018-2-6
  得分:0 
看看差距
附件: 您没有浏览附件的权限,请 登录注册

假如人生没有梦想,和咸鱼有什么区别!
2018-04-07 10:04
bubble_soup
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2018-1-21
  得分:0 
你这话说的也太绝对了吧,各种语言有各自的优势。
Python时一门胶水语言,语法简洁、优雅,功能强大。怎么就『过几年就淘汰了』?!
Python还在进步,不会淘汰的。我向来不以任何语言为目标进行评价,编程重要的是思维本身。Java有Java的好,就像Python有Python的好一样。
2018-04-07 11:37







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.088479 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved