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

yizhihongxing

下面是详细讲解“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异常? 在Java中,异常是指程序在运行时发生错误的情况。当程序出现异常时,其会抛出一个Java异常对象,然后我们可以通过捕获(catch)异常对象来在代码中处理这些错误。 Java异常类型 在Java中,异常类型主要分为三种类型:未受检异常、受检异常和错误。 未受检异常(Unchecked Exception…

    Java 2023年5月26日
    00
  • Mac配置 maven以及环境变量设置方式

    下面是具体操作步骤: 安装Maven 打开官方网站 (https://maven.apache.org/),进入下载页面。 下载最新版本的Maven,选择Binary Zip Archive 中的zip文件进行下载并解压。 将解压后的Maven目录移动到您喜欢的位置,例如 /usr/local/maven。 打开终端,进入Maven安装目录的bin目录,运行…

    Java 2023年5月19日
    00
  • Spring MVC—数据绑定和表单标签详解

    SpringMVC 数据绑定和表单标签详解 SpringMVC是一个非常流行的Java Web框架。它通过模型-视图-控制器(MVC)架构,实现了对Web应用程序的易于扩展和维护的分层设计。在实际开发中,数据绑定和表单标签是SpringMVC中最重要的两个特性之一。 数据绑定 数据绑定指的是将请求参数(如表单提交的数据)自动绑定到JavaBean对象上。Sp…

    Java 2023年6月15日
    00
  • Spring Boot2开发之Spring Boot整合Shiro两种详细方法

    SpringBoot2开发之SpringBoot整合Shiro两种详细方法 Shiro是一个强大且易于使用的Java安全框架,可以提供身份验证、授权、加密和会话管理等功能。本文将详细讲解如何在Spring Boot应用程序中整合Shiro,包括两种详细方法。 方法一:使用Shiro Spring Boot Starter Shiro Spring Boot …

    Java 2023年5月15日
    00
  • 浅谈java对象转json,数字精确出现丢失问题

    浅谈Java对象转JSON, 数字精确出现丢失问题 在Java中,JSON序列化是一项常见的处理任务。通过将对象序列化成JSON,使得数据更容易传递和存储。但是在转换基本数据类型时,小数点精确度丢失的问题也经常出现。本文将深入探讨Java对象转JSON时数字精确出现丢失的问题,并提供解决方案。 问题描述 在Java中进行JSON序列化时,会将Java中的数字…

    Java 2023年5月26日
    00
  • java自动根据文件内容的编码来读取避免乱码

    为了让Java程序自动根据文件内容的编码来读取,避免乱码问题,可以使用以下步骤: 判断文件编码类型 首先需要判断文件的编码类型,以便正确地读取该文件。可以使用Java提供的 CharsetDetector 工具库来进行判断。该工具库会根据文件内容自动检测文件编码类型。 示例代码: import org.mozilla.universalchardet.Uni…

    Java 2023年5月20日
    00
  • 微信公众号开发之设置自定义菜单实例代码【java版】

    下面是针对“微信公众号开发之设置自定义菜单实例代码【java版】”的完整攻略: 概述 本文主要介绍使用 Java 编写微信公众号自定义菜单的示例代码。自定义菜单包括一级菜单和二级菜单,每个一级菜单下可以有多个二级菜单,一级菜单最多包含3个二级菜单。 步骤 步骤一:获取授权 首先,您需要前往微信公众平台申请账号并通过审核。审核通过后,就可以在管理后台获取到 A…

    Java 2023年5月20日
    00
  • Java多线程之多种锁和阻塞队列

    Java多线程之多种锁和阻塞队列 前言 在Java语言中,多线程编程经常涉及到线程的同步和互斥操作,为了实现这些操作,需要使用各种不同的锁和阻塞队列。本文将介绍Java多线程中几种常见的锁和阻塞队列的使用方法,并给出相应的示例说明。 可重入锁(ReentrantLock) 可重入锁是一种可重入的互斥锁,可以使线程在获得锁的情况下,多次调用同步方法而不产生死锁…

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