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 方法来控制数据的安全性和合理性即可。对于复杂的对象类型,则可以采用序列化和反序列化来实现。

阅读剩余 65%

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

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

相关文章

  • SpringBoot+Security 发送短信验证码的实现

    下面详细讲解 Spring Boot 和 Spring Security 实现发送短信验证码的完整攻略 1. 简介 Spring Boot 是一个快速开发和方便配置的 Java Web 开发框架。它可以帮助开发人员快速构建可部署的、生产级别的、面向互联网的应用程序。 Spring Security 是用于保护 Java Web 应用程序的框架。它可以保护 W…

    Java 2023年5月20日
    00
  • 相册管理系统(Java表单+xml数据库存储)

    相册管理系统(Java表单+xml数据库存储)是一个使用Java开发的Web应用程序,可以让用户上传和查看图像,并能够对这些图像进行管理。该系统使用了Java表单和xml数据库存储进行数据交互和管理。下面是该系统的完整攻略。 前提条件 在开始使用相册管理系统之前,您需要确保您已经满足以下要求: 电脑已经安装了Java开发环境和Tomcat服务器 您已经掌握了…

    Java 2023年5月20日
    00
  • Java的Hibernate框架中的双向主键关联与双向外键关联

    Java的Hibernate框架提供了双向主键关联和双向外键关联两种关联方式,这两种方式有着各自特点和适合的场景。下面将分别对这两种关联方式进行详细解析,并给出相关示例。 双向主键关联 双向主键关联是指关联关系中两个实体类都具有主键,并且相互之间通过持有对方主键的引用来建立关联。双向主键关联可以通过@MapsId和@ManyToOne注解来实现,在Java中…

    Java 2023年5月19日
    00
  • 使用AJAX完成用户名是否存在异步校验

    使用AJAX可以在不刷新页面的情况下向服务器发送请求,并获取服务器端响应,从而达到异步更新页面内容和验证用户输入的目的。下面是使用AJAX完成用户名是否存在异步校验的攻略: 1.前端页面 在前端页面中,需要先引入jQuery库,然后编写一个函数进行异步校验,具体代码如下: <!DOCTYPE html> <html> <head…

    Java 2023年6月15日
    00
  • Intellij Idea中进行Mybatis逆向工程的实现

    IntelliJ IDEA是一款功能强大的开发工具,Mybatis是一个流行的Java持久化框架。在IntelliJ IDEA中进行Mybatis逆向工程的实现可以大大提高开发效率,本文将提供详细的攻略。 1. 安装插件 在IntelliJ IDEA中使用MyBatis逆向工程需要安装插件,具体步骤如下: 打开IntelliJ IDEA,选择菜单栏的File…

    Java 2023年5月20日
    00
  • 基于springEL表达式详解及应用

    1. 什么是SpringEL表达式 SpringEL表达式全称Spring Expression Language,是Spring框架中的一种表达式语言,用于在运行时访问和操作对象的属性及执行方法。 SpringEL表达式的语法大致可以分为如下几个部分: 取值表达式(Value Expression) 属性访问表达式(Property Access Expr…

    Java 2023年6月15日
    00
  • java实现计算周期性提醒的示例

    下面我将为大家详细讲解如何使用Java实现计算周期性提醒的示例,包括代码实现和演示两个示例。 如何实现周期性提醒 使用计时器:使用Java中自带的计时器类Timer,可以通过该类的schedule(TimerTask task, long delay, long period)方法,设置一个TimerTask任务和一个开始执行的延迟时间、执行周期。在该任务的…

    Java 2023年5月20日
    00
  • JAVA开发中的一些规范讲解(阿里巴巴Java开发规范手册)

    Java开发中的规范是非常重要的,可保持代码的可维护性,提高开发效率,防止出现不必要的错误,减少维护成本等。而阿里巴巴Java开发规范手册是一个有影响力的规范手册,下面我做一个阐述: 一、命名规范 类名使用 UpperCamelCase 大驼峰命名法,方法名、属性名以及变量名使用 lowerCamelCase 小驼峰命名法。 示例代码: public cla…

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