Java POJO 类

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习 Plain Old Java Objects(通常称为 POJO)及其约定。你还将了解 Java Bean 类。在本实验结束时,你将能够:

创建一个 POJO 类

在这一步中,我们将创建一个名为 Sample 的 POJO 类。POJO 类可以以任何方式创建,不需要遵循任何约定。

// Sample POJO class
public class Sample{
    public String field1;
    private int field2;
    double field3;

    Sample(String s, int i, double d){
        this.field1 = s;
        this.field2 = i;
        this.field3 = d;
    }

    public String getField1(){
        return field1;
    }

    public double getField3(){
        return field3;
    }
}

保存文件并在终端中使用以下命令编译它:

cd ~/project
javac Sample.java

理解 POJO 类

在这一步中,我们将运行 Sample 类并观察其工作原理。

public class Main{
    public static void main(String[] args) {
        Sample sample = new Sample("field 1", 100, 123.45);

        System.out.println("Field 1: " + sample.field1);
        System.out.println("Field 2: " + sample.field2);
        System.out.println("Field 3: " + sample.field3);
    }
}

保存文件并在终端中使用以下命令运行它:

java Main

理解 Reflection API

在这一步中,我们将使用 Reflection API 来查看 Sample 类的属性。Reflection API 是一个强大的工具,允许你检查和修改应用程序的行为。

import org.apache.commons.beanutils.BeanUtils;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws Exception {
        Sample s = new Sample("f1", 0, 0.0);
        try {
            Map<String, Object> properties = BeanUtils.describe(s);
            for (Map.Entry<String, Object> e : properties.entrySet())
                System.out.println(e.getKey() + "->" + e.getValue());
        } catch (Exception e) {
            System.out.print(e);
        }
    }
}

保存文件并在终端中使用以下命令编译它:

cd ~/project
javac -cp .:commons-beanutils-1.9.4.jar Main.java

-cp 标志用于指定类路径。:commons-beanutils-1.9.4.jarcommons-beanutils 包的路径。要运行编译后的文件,请使用以下命令:

java -cp .:commons-beanutils-1.9.4.jar Main

创建一个 Java Bean 类

在这一步中,我们将把 Sample POJO 类转换为一个 Java Bean 类。Java Bean 类是一个遵循某些约定和规则的 POJO。

import java.io.Serializable;

public class Sample implements Serializable{
    private String field1;
    private int field2;
    private double field3;

    public Sample(){}

    public Sample(String s, int i, double d){
        this.field1 = s;
        this.field2 = i;
        this.field3 = d;
    }

    public String getField1(){
        return field1;
    }

    public void setField1(String field1){
        this.field1 = field1;
    }

    public int getField2(){
        return field2;
    }

    public void setField2(int field2){
        this.field2 = field2;
    }

    public double getField3(){
        return field3;
    }

    public void setField3(double field3){
        this.field3 = field3;
    }
}

理解 Java Bean 类

在这一步中,我们将运行 Sample 类并观察其工作原理。

public class Main{
    public static void main(String[] args) {
        Sample sample = new Sample();
        sample.setField1("field 1");
        sample.setField2(100);
        sample.setField3(123.45);

        System.out.println("Field 1: " + sample.getField1());
        System.out.println("Field 2: " + sample.getField2());
        System.out.println("Field 3: " + sample.getField3());
    }
}

保存文件并在终端中使用以下命令编译它:

cd ~/project
javac Main.java

理解 Reflection API

在这一步中,我们将再次使用 Reflection API 来查看 Sample 类的属性。

public class Main {
    public static void main(String[] args) throws Exception {
        Sample s = new Sample("f1", 0, 0.0);
        try {
            Map<String, Object> properties = BeanUtils.describe(s);
            for (Map.Entry<String, Object> e : properties.entrySet())
                System.out.println(e.getKey() + "->" + e.getValue());
        } catch (Exception e) {
            System.out.print(e);
        }
    }
}

保存文件并在终端中使用以下命令编译它:

cd ~/project
javac -cp .:commons-beanutils-1.9.4.jar Main.java

-cp 标志用于指定类路径。:commons-beanutils-1.9.4.jarcommons-beanutils 包的路径。要运行编译后的文件,请使用以下命令:

java -cp .:commons-beanutils-1.9.4.jar Main

理解 Java Bean 类的序列化

在这一步中,我们将使用序列化将 Sample 类的对象存储到文件中。序列化用于将对象转换为字节流,可以保存到磁盘或通过网络传输。

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        Sample s = new Sample("f1", 0, 0.0);
        try {
            FileOutputStream fos = new FileOutputStream("sample.ser");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(s);
            oos.close();
            fos.close();
            System.out.println("Object has been serialized");
        } catch (Exception e) {
            System.out.print(e);
        }
    }
}

保存文件并在终端中使用以下命令编译它:

cd ~/project
javac Main.java

使用以下命令运行编译后的文件:

java Main

理解 Java Bean 类的反序列化

在这一步中,我们将使用反序列化从文件中读取 Sample 类的对象。反序列化用于将字节流转换回对象。

import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        try {
            FileInputStream fis = new FileInputStream("sample.ser");
            ObjectInputStream ois = new ObjectInputStream(fis);
            Sample s = (Sample) ois.readObject();
            ois.close();
            fis.close();
            System.out.println("Object has been deserialized");
            System.out.println("Field 1: " + s.getField1());
            System.out.println("Field 2: " + s.getField2());
            System.out.println("Field 3: " + s.getField3());
        } catch (Exception e) {
            System.out.print(e);
        }
    }
}

保存文件并在终端中使用以下命令编译它:

cd ~/project
javac Main.java

使用以下命令运行编译后的文件:

java Main

总结

在本实验中,你学习了 POJO(Plain Old Java Object)及其在 Java 编程中的作用。你学习了如何创建一个 POJO 类,以及 POJO 类和 Java Bean 类之间的区别。你还学习了如何将 POJO 类转换为 Java Bean 类,以及如何使用 Reflection API 查看 Java Bean 类的属性。最后,你学习了如何序列化和反序列化 Java Bean 对象。

您可能感兴趣的其他 Java 教程