关于javatransient修饰方法的信息

今天给各位分享javatransient修饰方法的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、transient关键字是什么?2、java 中的修饰符transient是什么意识他的原理是什么?3、java中的关键字transient是什么意思4、transient在java中的有什么作用?5、java 方法中含有 transient 是什么意思?6、transient在java中的作用

transient关键字是什么?

transient关键字是变量修饰符。如果用transient声明一个实例变量,当对象存储时它的值不需要维持,换句话来说就是,用transient关键字标记的成员变量不参与序列化过程,transient关键字只能修饰变量,而不能修饰方法和类。

transient关键字的特点

transient是Java语言的关键字,用来表示一个成员变量不是该对象序列化的一部分,当一个对象被序列化的时候,transient型变量的值不包括在序列化的结果中,而非transient型的变量是被包括进去的,注意static修饰的静态变量天然就是不可序列化的。

一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法被访问,本地变量是不能被transient关键字修饰的,变量如果是用户自定义类变量,则该类需要实现Serializable接口。

关于javatransient修饰方法的信息

java 中的修饰符transient是什么意识他的原理是什么?

transient

Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的

class A implements Serializable {

private String name;

transient private String address;

}

那么你在串行化(IO流等)A类时 给它的name和address属性赋值,那么你在提取A时,拿到了name属性,但是却拿不到address属性。

java中的关键字transient是什么意思

变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持,即不持久化。也就是说不会为这个变量分配内存来保存,不知道我这样解释你明不明白?

transient在java中的有什么作用?

java 的transient关键字的作用是需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

transient使用小结

1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。

2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。

3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

java 方法中含有 transient 是什么意思?

“transient”——“瞬态”,先不说这个翻译是否恰当,这个变量关键字一直不曾使用,简单的说就是被瞬态定义的变量不可序列号。或者这么给他换个名字——“不可序列化状态”。

打个比方,如果一个用户有一些敏感信息(譬如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输。这些信息对应的变量就可以被定义为transient类型。换句话说,这个字段的生命周期仅存于调用者的内存中。

如定义类:

public class People implements Serializable {

private static final long serialVersionUID = 8294180014912103005L;

/**

* 用户名

*/

private String username;

/**

* 密码

*/

private transient String password;

}

密码字段为transient,这时候如果对该对象进行序列化,这个密码字段是不会被保存的。

以下例子展示了这个行为:

public static void main(String[] args) throws Exception {

People p = new People();

p.setUsername(“snowolf”);

p.setPassword(“123456”);

System.err.println(“——操作前——“);

System.err.println(“username: ” + p.getUsername());

System.err.println(“password: ” + p.getPassword());

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(

“people.txt”));

oos.writeObject(p);

oos.flush();

oos.close();

ObjectInputStream ois = new ObjectInputStream(new FileInputStream(

“people.txt”));

p = (People) ois.readObject();

ois.close();

System.err.println(“——操作后——“);

System.err.println(“username: ” + p.getUsername());

System.err.println(“password: ” + p.getPassword());

}

执行结果是:

——操作前——

username: snowolf

password: 123456

——操作后——

username: snowolf

password: null

transient在java中的作用

java有个特点就是序列化,简单地来说就是可以将这个类存储在物理空间(当然还是以文件的形式存在),那么当你从本地还原这个文件时,你可以将它转换为它本身。这可以极大地方便网络上的一些操作,但同时,因为涉及到安全问题,所以并不希望把类里面所有的东西都能存储(因为那样,别人可以通过序列化知道类里面的内容),那么我们就可以用上transient这个关键字,它的意思是临时的,即不会随类一起序列化到本地,所以当还原后,这个关键字定义的变量也就不再存在。

通常,我们写的程序都要求特定信息能持久存在或保存到磁盘上,以供一个程序使用或用在同一个程序的另一次运行上.这种持久性可以通过几种方式来实现,包括写到数据库中或是利用JAVA为对象序列化提供的支持.不管我们选用什么方法,类实例的持久性都是通过保存类的域的状态来完成的,保存这些状态,以便以后可以对它们进行访问或使用它们来创建相同的实例.然而,有可能并不是所有的域都需要被保存起来.当一个实例被持久化时,其内部的一些域却不需要持久化,则可以用trainsient修饰符告诉编译器指定的域不需要被持久保存.

首先,让我们看一些Java serialization的代码:

public class LoggingInfo implements java.io.Serializable  {  

    private Date loggingDate = new Date();      

    private String uid;  

    private transient String pwd;       

    LoggingInfo(String user, String password){  

        uid = user;  

        pwd = password;      

    }  

    public String toString(){  

        String password=null;          

        if(pwd == null){  

            password = “NOT SET”;          

}else{  

            password = pwd;

}  

        return “logon info: \n   ” + “user: ” + uid +  

            “\n   logging date : ” + loggingDate.toString() + “\n   password: ” + password;      

    }  

}

现在我们创建一个这个类的实例,并且串行化(serialize)它 ,然后将这个串行化对象写入磁盘。

LoggingInfo logInfo = new LoggingInfo(“MIKE”, “MECHANICS”);  

System.out.println(logInfo.toString());  

try{  

    ObjectOutputStream o = new ObjectOutputStream(                 

    new FileOutputStream(“logInfo.out”));     

    o.writeObject(logInfo);     

    o.close();  

}catch(Exception e) 

    {//deal with exception}  

To read the object back, we can write 

  

try  {  

    ObjectInputStream in =new ObjectInputStream(

    new FileInputStream(“logInfo.out”));     

    LoggingInfo logInfo = (LoggingInfo)in.readObject();     

    System.out.println(logInfo.toString());  }  

catch(Exception e) 

    {//deal with exception}

如果我们运行这段代码,我们会注意到从磁盘中读回(read——back (de-serializing))的对象打印password为”NOT SET”。这是当我们定义pwd域为transient时,所期望的正确结果。 现在,让我们来看一下粗心对待transient域可能引起的潜在问题。假设我们修改了类定义,提供给transient域一个默认值, 代码如下:

public class GuestLoggingInfo implements java.io.Serializable  {  

    private Date loggingDate = new Date();      

    private String uid;  

    private transient String pwd;       

    GuestLoggingInfo(){  

        uid = “guest”;          

        pwd = “guest”;      

    }  

    public String toString() {  

        //same as above       

    }  

}

现在,如果我们穿行化GuestLoggingInfo的一个实例,将它写入磁盘,并且再将它从磁盘中读出,我们仍然看到读回的对象打印password 为 “NOT SET”。  当从磁盘中读出某个类的实例时,实际上并不会执行这个类的构造函数, 而是载入了一个该类对象的持久化状态,并将这个状态赋值给该类的另一个对象。

javatransient修饰方法的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、javatransient修饰方法的信息别忘了在本站进行查找喔。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月29日 03:02:13
下一篇 2024年3月29日 03:09:20

相关推荐

  • c语言输入数组,C语言输入数组的方法

    如何用c语言从键盘输入10个数存入数组并求和? 1、用C语言编写一段程序,用来输入10个整数保存到数组中,求出这10个整数的和并输出。 2、,数组是相同数据类型的元素的集合。 2,数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。 3,数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。 3、void main(){ fl…

    2024年5月23日
    5100
  • 关于avrstudio6c语言的信息

    c语言的程序员们你们公司用的开发工具是什么呢? 学c语言可以用的软件推荐如下:TurboC是由美国Borland公司开发的一套C语言程序开发工具,Borland公司是一家专门从事软件开发、研制的大公司。 Code:Blocks是一个开放源码的全功能的跨平台C/C++集成开发环境。Code:Blocks是开放源码软件。Code:Blocks由纯粹的C++语言开…

    2024年5月23日
    4700
  • 关于java如何查找线程的信息

    kill-3生成的线程堆栈怎么查看 通过给JVM发送一个SIGQUIT信号,您可以得到一个线程堆。 threaddump文件就是文本文件,可以使用任何文本查看工具进行查看; 建议使用比较高效的工具,比如more, less 等。 “Full thread dump”是一个全局唯一的关键字,你可以在中间件和单机版本Java的线程堆栈信息的输出日志中找到它(比如…

    2024年5月23日
    4100
  • 关于javasocketreader的信息

    用JAVA编写一个socket通信程序。 1、java编程对于Socket之间的通信过程如下:服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。 2、服务端初始化ServerSocket,然后对指定的端口进行绑定,接着对端口及进行监听,通过调用accept方法阻塞。 此时,如果客户端有一个socket连接到服务端,那…

    2024年5月23日
    8000
  • 关于javapitfallspdf的信息

    怎么用java动态生成pdf文档 1、首先,您需要在 Java 程序中添加 Spire.Xls.jar 文件作为依赖项。您可以从这个链接下载 JAR 文件;如果您使用 Maven,则可以通过在 pom.xml 文件中添加以下代码导入 JAR 文件。 2、iText是着名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通…

    2024年5月23日
    4400
  • 关于pythonexcel打印设置字体的信息

    如何使用python更改excel表中的字体属性 字体,背景,边框等的颜色都可以通过三种方式设置:索引,aRGB或主题。 索引颜色是旧版实现,颜色本身取决于工作薄或应用程序默认提供的索引。主题颜色可用于互补色,但也取决于工作薄中存在的主题,因此,建议使用RGB颜色。 有着一定的参考价值,有需要的朋友可以参考一下可使用的第三方库python中处理excel表格…

    2024年5月23日
    4700
  • 关于linuxjpeg下载的信息

    请问怎么用grub2直接引导win10,本人Linux新手 第一步,当然是下载linux ubuntu1x的镜像了,这个小伙伴可以百度,去正规的网站现在,这里,我先提供一个站点:mirrors.xmu.edu.cn,厦门大学的信息与网络中心。里面有很多linux版本。有Deepin CenOS ubuntu什么什么的。 第一步:\x0d\x0a当然是下载Ub…

    2024年5月23日
    5400
  • 关于excel2013vc的信息

    如何利用VC++自动生成Excel表格 1、首先,我们需要点击文件菜单栏按钮。然后,我们点击生成EXE按钮。接下来,我们点击保存路径。然后,我们输入我们想要保存的文件名。最后,我们点击确定按钮。然后,我们便可以看到,在桌面生成了Excel表格了。 2、在主对话框中加入一个按钮 ID IDC_EXCELTEST Caption Test Excel 双击该按钮…

    2024年5月23日
    5400
  • java的split方法的源码,如何理解java中的split方法

    请问java中split()方法怎么用? 1、split 的实现直接调用的 matcher 类的 split 的方法。“ . ”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义。 2、split() 方法用于把一个字符串分割成字符串数组。 语法 stringObject.split(separator,howmany) 参数与描述 separato…

    2024年5月23日
    4500
  • 关于2t硬盘linux分区的信息

    linux硬盘2TB限制问题 1、Linux中进行磁盘分区一般是用fdisk这个命令,但是fdisk命令无法支持大于2TB以上的分区,而parted命令却是用于2TB以上大小的磁盘分区的工具。 2、asm无法识别2t磁盘是因为在分区的时候造成的,所以asm和linux都会有这个2T的限制。磁盘分区主要有MBR和GPT两种方式,发生2T限制的正是这个MBR方式…

    2024年5月23日
    8300

发表回复

登录后才能评论



关注微信