一、什么是封装
现实中的封装例如笔记本电脑把CPU、内存、主板、磁盘等都封装起来然后组合成可以使用的笔记本,只留出数据接口,网口等供用户使用.你不用管里面是怎么运行的,只需要动动鼠标、动动键盘就可以帮你完成某种功能。
Java中也是如此,把过程和数据包围起来,对数据的访问只能通过已定义的接口。实际上就是使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。
封装的原则:把该隐藏的隐藏起来,该暴露的暴露出来
封装好处:便于对代码的修改和维护,提高代码的可维护性
二、封装示例
以下为未封装之前,所有的东西都是可见,别人可以随便修改,这就导致很不安全。
public class Employee {
public String name;
public int age;
public String gender;
public void work(){
System.out.printf("%s%d岁了还在努力工作中");
}
}
//测试
public class Test {
public static void main(String[] args) {
Employee employee = new Employee();
employee.age = 200; //修改的年龄不合理
employee.gender = "不男不女"; //修改非法性别
employee.name = "卡里克隆"; //随便修改姓名
employee.work();
}
}
下面为封装之后,仅展示部分的东西为可见,这样别的类就看不见,也不能直接修改,但是我们可以提供修改的方法(get/set)供别人来修改和获取,当然也不能随意修改,我们可以在方法中判断别人的修改是否合理,对数据进行检查,这样就可以有效地保证了对象信息的完整性和合理性。
package com.etime01;
public class Employee {
//使用private修饰成员变量
private String name;
private int age;
private String gender;
//提供公有的get/set方法
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getGender() {
return gender;
}
//可以对信息进行校验
public void setName(String name) {
if(name.length() == 0){
System.out.println("名字不能为空");
}else{
this.name = name;
}
}
public void setAge(int age) {
if(age<0 || age>140){
System.out.println("年龄输入不合法");
}else{
this.age = age;
}
}
public void setGender(String gender) {
if(gender == "男" || gender =="女" || gender =="第三性别"){
this.gender = gender;
}else{
System.out.println("性别输入错误");
}
}
public void work(){
System.out.printf("%s%d岁了还在努力工作中",this.name,age);
}
}
package com.etime01;
public class Test {
public static void main(String[] args) {
Employee employee = new Employee();
employee.setAge(-1);
employee.setName("");
employee.setGender("12");
//输出初始化时候的默认值
System.out.println(employee.getAge());
System.out.println(employee.getName());
System.out.println(employee.getGender());
//符合要求
employee.setAge(22);
employee.setName("张三");
employee.setGender("男");
System.out.println(employee.getAge());
System.out.println(employee.getName());
System.out.println(employee.getGender());
}
}
运行结果
三、JavaBean
JavaBean,也称POJO类(简单的Java对象),通常用于存储数据。
特点:
- 成员属性的可见性为private
- 每个成员属性创建get/set方法实现取值/赋值。方法命名规则是将成员属性的首字母改为大写,再加上get或set前缀
例如:
public class Employee {
private String name;
private int age;
private String gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}