对象的保存和载入

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

相关文章

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

Java第二阶段---09类和对象---第三节 构造方法

第三节 构造方法 1.概念 构造方法是一种特殊的方法,主要用于创建对象以及完成对象的属性初始化操作。构造方法不能被对象调用。 2.语法 //[]中内容可有可无 访问修饰符 类名([参数列表]){ } 3.示例 public class Car {     //车特征(属性)     public String name;//车名   可以直接拿来用 说明它有初始值     pu

HTML5自定义属性对象Dataset

原文转自HTML5自定义属性对象Dataset简介 一、html5 自定义属性介绍 之前翻译的“你必须知道的28个HTML5特征、窍门和技术”一文中对于HTML5中自定义合法属性data-已经做过些介绍,就是在HTML5中我们可以使用data-前缀设置我们需要的自定义属性,来进行一些数据的存放,例如我们要在一个文字按钮上存放相对应的id: <a href="javascript:" d