对象的保存和载入

2024-05-30 19:32
文章标签 保存 对象 载入

本文主要是介绍对象的保存和载入,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

static       http://t240178168.iteye.com/blog/1667275

1.第一种方法:采用手动的方法

手动的将对象的各个字段写入到文件中,读取时再通过特定的标识符从文件中获取各个属性的值,生成对象。可以手工编辑文件

缺点:缺乏灵活性,代码量大

实现:略

2.第二种方法:采用Java的序列化机制

实现简洁,代码量小,生成的文件都是二进制的

缺点:文件不可编辑

实现:略

3.第三种方法:以XML文件的形式保存和读取(方法很多,以下使用两种方式简单实现)

①采用 java.beans.XMLEncoder 或者 java.beans.XMLDecoder

首先建立  Contact.java  (JavaBean)

import java.io.Serializable;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;/**
 * @Author:胡家威  
 * @CreateTime:2011-9-27 下午09:28:57
 * @Description:联系人的类
 */@XmlRootElement //注意注解,XML的根元素
public class Contact implements Serializable {private static final long serialVersionUID = 4445549905840681824L;private long id;private String name;private String email;public Contact() {}public Contact(long id){this.id = id;}//每个getter方法上面都有一个注解,表明它是一个XML的元素@XmlElementpublic long getId(){return id;}@XmlElementpublic String getName() {return name;}@XmlElementpublic String getEmail() {return email;}public void setName(String name) {this.name = name;}public void setEmail(String email) {this.email = email;}public void setId(long id) {this.id = id;}}

 

建立测试的类:

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;/**
 * @Author:胡家威  
 * @CreateTime:2011-9-27 下午09:27:55
 * @Description:JAXB的简单使用实例
 */public class JaxbTest {private Marshaller marshaller;private Unmarshaller unmarshaller;private String filename;public JaxbTest() {try {JAXBContext context = JAXBContext.newInstance(Contact.class);marshaller = context.createMarshaller();unmarshaller = context.createUnmarshaller();        filename="contact.xml";} catch (Exception e) {e.printStackTrace();}}// 创建一个新的联系人public void creatContact(Contact contact) {FileWriter fw = null;try {fw = new FileWriter(filename);marshaller.marshal(contact, fw);} catch (Exception e) {e.printStackTrace();} finally{try {fw.close();} catch (IOException e) {e.printStackTrace();}}}// 读取一个联系人public Contact readContact() {FileReader fr = null;Contact contact = null;try {fr = new FileReader(new File(filename));contact = (Contact)unmarshaller.unmarshal(fr);} catch (Exception e) {e.printStackTrace();} finally{try {fr.close();} catch (IOException e) {e.printStackTrace();}}return contact;}public static void main(String[] args) {JaxbTest test = new JaxbTest();Contact contact = new Contact();contact.setId(1);contact.setName("name");contact.setEmail("email");test.creatContact(contact);System.out.println("---");Contact contact2 = test.readContact();if(contact2!=null){System.out.println(contact2.getId());System.out.println(contact2.getName());System.out.println(contact2.getEmail());}}}

 

生成的xml文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<contact><email>email</email><id>1</id><name>name</name>
</contact>

 

②采用JAXB

Javabean使用上面的Contact类

import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;/**
 * @Author:胡家威  
 * @CreateTime:2011-9-27 下午10:20:20
 * @Description:XMLEncoder和XMLDecoder的使用实例
 */public class XMLEDncoder {private static String filename = "javabean.txt";public static void main(String[] args) {Contact contact = new Contact();contact.setId(1);contact.setName("name");contact.setEmail("email");writeJavaBean(contact);System.out.println("---");Contact contact2 = (Contact)readJavaBean();if(contact2!=null){System.out.println(contact2.getId());System.out.println(contact2.getName());System.out.println(contact2.getEmail());}}/**
     * 向文件中写入对象
     */public static void writeJavaBean(Object javabean) {if(javabean==null){return;}try {OutputStream out = new BufferedOutputStream(new FileOutputStream(new File(filename)));XMLEncoder encoder = new XMLEncoder(out);encoder.writeObject(javabean);encoder.close();out.close();} catch (Exception e) {e.printStackTrace();}}/**
     * 从文件中读取对象
     */public static Object readJavaBean() {try {InputStream in = new BufferedInputStream(new FileInputStream(new File(filename)));XMLDecoder decoder = new XMLDecoder(in);Object object = decoder.readObject();in.close();decoder.close();return object;} catch (Exception e) {e.printStackTrace();return null;}}}

 

生成的txt文件:

<?xml version="1.0" encoding="UTF-8"?> 
<java version="1.6.0_21" class="java.beans.XMLDecoder"> <object class="Contact"> <void property="email"> <string>email</string> </void> <void property="id"> <long>1</long> </void> <void property="name"> <string>name</string> </void> </object> 
</java> 
分类: JavaSE学习


static

  • 博客分类: 
  • java
static
是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。这样做有什么意义呢? 
在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是有种情况例外,就是该成员是用static声明的(在这里所讲排除了类的访问控制),例如: 
未声明为static 
class ClassA{ 
int b; 
public void ex1(){ 
… 


class ClassB{ 
void ex2{ 
int i; 
ClassA a = new ClassA(); 
i = a.b; //这里通过对象引用访问成员变量b 
a.ex1; //这里通过对象引用访问成员函数ex1 



声明为static 
class ClassA{ 
static int b; 
static void ex1(){ 
… 


class ClassB{ 
void ex2{ 
int i; 
i = ClassA.b; //这里通过类名访问成员变量b 
ClassA.ex1; //这里通过类名访问成员函数ex1 


通过以上两种比较,就可以知道static用来修饰类成员的主要作用了 

,在java类库当中有很多类成员都声明为static,可以让用户不需要 
实例化对象就可以引用成员,最基本的有Integer.parseInt(),Float.pa 
rseFloat()等等用来把对象转换为所需要的基本数据类型。这样的变量和 
方法我们又叫做类变量和类方法。 
接下来讲一下被static修饰后的变量的值的问题,刚才在前面讲过,被s 

tatic修饰后的成员,在编译时由内存分配一块内存空间,直到程序停止运行 
才会释放,那么就是说该类的所有对象都会共享这块内存空间,看一下下面 
这个例子: 
class TStatic{ 
static int i; 

public TStatic(){ 
i = 4; 


public TStatic(int j){ 
i = j; 


public static void main(String args[]){ 
TStatic t = new TStatic(5); //声明对象引用,并实例化 
TStatic tt = new TStatic(); //同上 
System.out.println(t.i); 
System.out.println(tt.i); 
System.out.println(t.i); 


,第一个用于初始化I为4,第二个用于初始化i为传进函数的值, 
在main中所传的值是5,程序首先声明对象的引用t,然后调用带参 
数的构造函数实例化对象,此时对象t的成员变量I的值为5,接着 
声明对象tt,调用无参数的构造函数,那么就把对象tt的成员变量 
i的值初始化为4了,注意了,在这里i是static,那就是说该类 
所有对象都共享该内存,那也就是说在实例化对象tt的时候改变了 
i的值,那么实际上对象t的i值也变了,因为实际上他们引用的 
同一个成员变量。最后打印的结果是三个4。呵呵,写到这里大家 
是否明白了呢?不明白就再看看书或者多写几个例子印证一下, 
呵。 


是这样的,static定义的变量是个所有该类对象共有的变量,那 


么我们可以举个例子来说明,比如,我编写一个Student类,该类中有个 
static变量count用来记录学生的个数,在构造方法中做count++。那么当 
我每创建一个对象时count都会做自加,也就是每创建一个Student的对象系统 
就会记录一个,那么很显然,我就可以调用这个count知道一共有多少Student对象 
了。这个是个很简单的例子,不过应该可以说明问题了。 
问题:雇员类有个雇员基本工资,对于员工A员工B都是一样的,但是管理员又有可能需要对这个工资做调整,也就是不能定义成常量.像这样的变量你要怎么处理呢?怎么保证这样的一致性? 
于是static成员变量和成员方法就产生咯: 
static int salary; 
public static void setSalary(int salary){this.salary = salary;} 
public static int getSalary(){return salary;} 
这样的话我就直接用员工类.方法得到统一的基本工资值啦: 
Employee.setSalary(800); 
Employee.getSalary(); 
至于每个员工嘛,也可以调用这个方法查看自己的基本工资 
Employee A = new Employee(); 
A.getSalary();

这篇关于对象的保存和载入的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016774

相关文章

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

Java实现将byte[]转换为File对象

《Java实现将byte[]转换为File对象》这篇文章将通过一个简单的例子为大家演示Java如何实现byte[]转换为File对象,并将其上传到外部服务器,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言1. 问题背景2. 环境准备3. 实现步骤3.1 从 URL 获取图片字节数据3.2 将字节数组

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C

SpringBoot实现导出复杂对象到Excel文件

《SpringBoot实现导出复杂对象到Excel文件》这篇文章主要为大家详细介绍了如何使用Hutool和EasyExcel两种方式来实现在SpringBoot项目中导出复杂对象到Excel文件,需要... 在Spring Boot项目中导出复杂对象到Excel文件,可以利用Hutool或EasyExcel

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

Java对象和JSON字符串之间的转换方法(全网最清晰)

《Java对象和JSON字符串之间的转换方法(全网最清晰)》:本文主要介绍如何在Java中使用Jackson库将对象转换为JSON字符串,并提供了一个简单的工具类示例,该工具类支持基本的转换功能,... 目录前言1. 引入 Jackson 依赖2. 创建 jsON 工具类3. 使用示例转换 Java 对象为