java实现两个对象之间传值及简单的封装

下面是详细讲解“java实现两个对象之间传值及简单的封装”的完整攻略。

什么是对象间传值

Java 中,变量本身是没有值的,它只是指向内存中存储数据的位置,也就是说,对象间传值其实就是将一个对象中的数据(值)赋值给另一个对象,使它们拥有相同的数据。

简单的封装

Java 中的封装是将数据和操作数据的方法(行为)包装在一起,对数据的访问进行限制,使其不能随意的被外部所访问或者修改,从而保证数据的安全性和合理性。

Java 中的封装通过使用访问修饰符来实现:

  • public:公有访问修饰符,可以被外部访问和修改
  • private:私有访问修饰符,只能在类的内部访问和修改

我们可以使用getter和setter方法来访问和修改对象的数据,同时对数据进行简单的校验和控制。

两个对象之间传值示例

下面以一个简单的 Person 类为例来讲解如何实现两个对象之间传值及简单的封装:

public class Person {

    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) throws Exception {
        if (name.equals("")) {
            throw new Exception("姓名不能为空!");
        }
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) throws Exception {
        if (age < 0 || age > 150) {
            throw new Exception("年龄必须在0到150之间!");
        }
        this.age = age;
    }

    public void introduce() {
        System.out.println("我叫" + this.name + ",今年" + this.age + "岁。");
    }
}

在上面的代码中,我们定义了一个 Person 类,包含了姓名和年龄两个变量,以及获取和设置这两个变量的方法。在设置方法中,我们通过简单的校验来保证数据的合理性和安全性。在 introduce 方法中,我们输出了一个人的基本信息。

下面我们来使用这个类进行两个对象之间传值的示例:

public class Main {

    public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Person();
        try {
            person1.setName("张三");
            person1.setAge(20);
            System.out.println("person1:");
            person1.introduce();
            person2.setName(person1.getName());
            person2.setAge(person1.getAge());
            System.out.println("person2:");
            person2.introduce();
            person1.setName("");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

在上面的代码中,我们创建了两个 Person 对象 person1 和 person2。首先为 person1 设置姓名和年龄,并输出 person1 的基本信息。然后将 person1 的姓名和年龄分别赋值给 person2,使 person2 拥有同样的数据,最后输出 person2 的基本信息。注意,在赋值时,我们调用的是 person1 和 person2 的 getter 和 setter 方法,以此来控制数据的安全性和合理性。最后为了测试异常情况,我们将 person1 的姓名设置为空字符串,这时将会抛出一个异常。

另一个对象之间传值示例

对于简单的数据类型,我们可以通过传递参数的方式来实现另一个对象之间传值。但对于复杂的数据类型,可以采用序列化和反序列化的方式来实现。以下是一个简单的序列化和反序列化示例:

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Person person1 = new Person("张三", 20);
        Person person2;
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
        // 序列化对象
        objectOutputStream.writeObject(person1);
        objectOutputStream.flush();
        objectOutputStream.close();
        // 反序列化对象
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
        ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
        person2 = (Person) objectInputStream.readObject();
        objectInputStream.close();
        System.out.println("person1:");
        person1.introduce();
        System.out.println("person2:");
        person2.introduce();
    }
}

class Person implements Serializable {

    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void introduce() {
        System.out.println("我叫" + this.name + ",今年" + this.age + "岁。");
    }
}

在上面的代码中,我们定义了一个 Person 类实现 Serializable 接口,以支持序列化和反序列化。我们创建了一个 person1 对象,并将其序列化到一个字节数组中。然后再从字节数组中反序列化出 person2 对象,并输出两个对象的基本信息。

通过以上两个示例,我们可以看到,Java 实现两个对象之间传值及简单的封装非常简单,只需使用 getter 和 setter 方法来控制数据的安全性和合理性即可。对于复杂的对象类型,则可以采用序列化和反序列化来实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现两个对象之间传值及简单的封装 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java实现字符串反转

    下面我将详细讲解Java实现字符串反转的完整攻略,包含以下内容: 反转字符串的常规思路 Java中的三种实现方式 示例说明 1. 反转字符串的常规思路 在进行Java实现字符串反转之前,我们先来了解下反转字符串的常规思路。一般来说,我们可以先将字符串转换为字符数组,然后再通过双指针的方式进行反转,具体步骤如下: 将字符串转换成字符数组; 定义头指针head指…

    Java 2023年5月29日
    00
  • Java Swing组件文件选择器JFileChooser简单用法示例

    下面我就详细为您讲解“Java Swing组件文件选择器JFileChooser简单用法示例”的完整攻略。 什么是JFileChooser? JFileChooser是Java Swing组件库中的一个组件,它提供了一个通用的、可自定义的对话框,用于允许用户选择文件或目录。用户可以通过对话框打开或者保存文件或目录,并进行其他一些相关操作。 如何使用JFile…

    Java 2023年5月20日
    00
  • jsp的九大内置对象深入讲解

    一、JSP九大内置对象 JSP的九大内置对象是指:1. request:封装客户端的请求,其中包含了与HTTP请求相关的信息,例如:请求参数、头信息等;2. response:封装服务器对客户端的响应,其中包含了HTTP响应本身以及向客户端发送的数据;3. pageContext:JSP页面上下文,包含了对该JSP页面的Servlet上下文、请求、响应等对象…

    Java 2023年6月15日
    00
  • JSP教程(四)-JSP Actions的使用

    下面是“JSP教程(四)-JSP Actions的使用”的完整攻略。 一、JSP Actions概述 JSP Actions是一种特殊的标记,它提供了一些特殊的操作和功能,可以让我们更加灵活地控制JSP页面的生成过程。JSP Actions可以分为以下三类: 动作标签(Action Tags) JSP指令(Directive) 注释标签(Comment Ta…

    Java 2023年6月15日
    00
  • Apache log4j2-RCE 漏洞复现及修复建议(CVE-2021-44228)

    针对“Apache log4j2-RCE 漏洞复现及修复建议(CVE-2021-44228)”,我将为您提供完整攻略,分为漏洞复现和修复建议两个部分。 一、漏洞复现: 环境搭建: 首先,需要搭建一个漏洞环境来进行复现。我们可以使用Apache官方提供的Docker镜像搭建该环境。可以参考以下命令来启动该镜像 docker run –rm -it -p 80…

    Java 2023年5月19日
    00
  • 使用Spring Boot 2.x构建Web服务的详细代码

    下面就是针对使用Spring Boot 2.x构建Web服务的完整攻略: 1. 创建Spring Boot项目 首先,我们需要在IDE或者命令行中创建一个Spring Boot项目。使用IDE可以直接创建一个Spring Boot项目模板;使用命令行则需要使用Maven构建,具体做法如下: 首先,我们需要在本地装好Maven,然后在命令行中输入 mvn ar…

    Java 2023年5月19日
    00
  • Security 登录认证流程详细分析详解

    Security 登录认证流程详细分析详解 什么是Security Security 是 Spring 家族中的一个安全框架,它提供了诸如认证、授权、攻击保护等功能,可以很方便地集成到 Spring 应用中,为应用提供高效、灵活的安全控制。 Security 登录认证流程 Security 登录认证流程是一个经典的“过滤器链”(FilterChain)结构。…

    Java 2023年6月3日
    00
  • java中tomcat的80端口被占用问题解决

    当我们在运行Tomcat服务器时,可能会遇到端口被占用的问题,这就意味着我们无法使用Tomcat服务器。幸运的是,这个问题可以有多种方法进行解决。下面是一些常见的解决办法: 技巧一:检查端口是否被占用 首先,我们需要确认80端口是否真的被占用。我们可以利用一些命令来查看占用端口的情况。例如,在Windows中,可以使用以下命令检查: netstat -ano…

    Java 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部