下面是详细讲解“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技术站