经验没有,
不过个人认为《Thinking in java》上写得很清楚了!

解决方案 »

  1.   

    呵呵,多谢,盼有经验的人士来说明.
    我在阅读BORLAND的DATAEXPRESS 类库源码时发现不少Java之极品经典,也有不少迷惑之处,其中就包括transient关键字在何时使用.
      

  2.   

    比如说在一个实体Bean中,transient和 static字段是非持久性字段,不能保存在数据库中。
    另外,如果你的对象需要序列化到数据库、JDNI或通过Object流传递给其他对象的话,对象中的非持久性字段应该加transient关键字。
      

  3.   

    就horseliu()的回答再详细举个例子吧!
    你如果写了一个程序并需要序列化到本地或者数据库中(不只是你一个人需要用),并且因为测试的缘故,你认为加上了自己的一些信息,例如用户名,密码(例如数据库的身份),这样方便测试.但是,这些信息是肯定不应该被别人知道或者了解的,同时呢,又不想每次自己都去写都去改,这样,你可以用transient定义这样的变量存储它们.
       这个例子很浅显,至于更详细的用法就只有你自己去研究了.有什么不懂的问题可以问我!
      

  4.   

    to  horseliu() 
    transient应该是一个用于节约序列化的空间的关键字.但是非持久一言难尽,到底一个Object的什么字段才是非持久的呢?怎么决定一个字段是transient?希望真正的高手能解惑.
      

  5.   

    TO hh_fwhy(凤舞凰扬) 
    你说得不错,我觉得transient主要应该是一个用于节约序列化的空间的关键字,您看法如何?
      

  6.   

    to hicharlie(黑查理):
      下面是java规范中对transient关键字的解释:
      The transient er is not fully specified by The Java Language  Specification but is used in object serialization to  member variables that should not be serialized. 
      

  7.   

    to horseliu
    呵呵,我看了,再看看高手怎么说.
      

  8.   

    我觉得一个非持久就应该表达出这个意思,如果一个Object的某个属性依赖与其他属性,那么他应该是可再现的,就不需要持久化,也就是说一个属性值如果丢失后无法再次获得就应该序列化。同时这也可以理解为一种对空间的节约
      

  9.   

    说到底大家可能没有能理解我的原意。
    transient关键字的含义当然大家都可以轻易找到它的解释。
    可以从类的设计上来说,决定一个字段是不是transient,真的不是那么简单。希望大家不要再copy各种解释了。为什么不去看看Borland的ejb_DataExpress呢?上面有不小的transient的用法都让人比较疑惑。
      

  10.   

    一个建议:把ejb_DataExpress中相关的内容贴出来,大家讨论一下
      

  11.   

    我是这么认为的。
    你用过writeObjectToFile 吗,这就是将一个 Object 完全保留下来。
    在Corba中的远程调用的时候,如果是一个Thread,他只能是在特定的环境下才能记录下来的,是不能序列化的。如
    class A {
       Thread B=new Thread("test");
       int i=0;
    }你想把A这个对象动态生成后再传到客户端,那Thread B 的环境就没有了,因为你无法知道目前B处于那个状态。
    我觉得transient关键字是用在分布式的对象的传递中的。
    分布式也包括系统的不一样。如jni.
    目前,我个人认为是用于那些又要得到整个对象,但是却得不到其中的一些动态的数据的时候。防止出现脏数据,不同步的数据。
    欢迎大家指正。