标题:【Java序列化引发的思考】
取消只看楼主
bubble_soup
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2018-1-21
结帖率:0
已结贴  问题点数:20 回复次数:5 
【Java序列化引发的思考】
我们知道Java通过实现接口实现序列化。
但,序列化对于static属性无效。
为什么?
若,该类的一个对象通过某种方法修改了这个类的static属性(通过实例访问静态属性),那它的static属性不久改变了吗?
这是我的看法。不知道大家怎么看。
搜索更多相关主题的帖子: Java 序列化 思考 static 属性 
2018-04-06 20:36
bubble_soup
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2018-1-21
得分:0 
Serializable接口。谢谢提醒。
2018-04-06 22:12
bubble_soup
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2018-1-21
得分:0 
我知道,序列化就是为了便于传输数据(可以这样说吧,同时从长远考虑也是为了持久化)。
但是为什么就不能对static属性实现序列呢?
能说下您的理解吗?
2018-04-07 07:48
bubble_soup
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2018-1-21
得分:0 
嗯。话是这样说没错。但是我认为Java规定『序列化不能序列化static属性』更像是一种约定,或者说是硬性规定。
想吧,为什么Java不支持多继承?难道不是为了方便,为了方便开发者更好的使用Java进行开发,避免出错?
回归主题,之所以Java不支持序列化那些static属性,要从Java本身的语言特点进行分析:
public class {
    ...
        public static void main(String[] args){
            ...
        }
}
这便是Java的基本框架格式。
可以看出Java的所有代码都是被限制在class(类)中的。static关键字修身的静态属性,而总是和类相联系。
实现接口实现序列化。
比如:
public class Person implements {
    ...
    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
bubble_soup
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2018-1-21
得分:0 
你这话说的也太绝对了吧,各种语言有各自的优势。
Python时一门胶水语言,语法简洁、优雅,功能强大。怎么就『过几年就淘汰了』?!
Python还在进步,不会淘汰的。我向来不以任何语言为目标进行评价,编程重要的是思维本身。Java有Java的好,就像Python有Python的好一样。
2018-04-07 11:37
bubble_soup
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2018-1-21
得分:0 
2018-04-07 12:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-485801-1-1.html




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

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