封装的含义及流程

下面类是public来修饰,对于成员变量和方法而言,在项目中的任意一个地方都可以访问

public class UserInfo {
    public int id;
    public String name;
    public void stu(){    
    }
}

封装含义及流程

封装含义:

封装数据/功能,也就是成员变量和方法,限制对数据的访问

封装流程

1.1、使用private访问修饰符来修饰,进行私有化
private int id;
    private String name;
    private void stu(){
    }
1.2、提供入口:public set/get方法 利用工具来生成alt+insert
private int id;
    private String name;
    private void stu(){
    }
    public void setId(int id) {
        this.id = id;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public String getName() {
        return name;
    }

但是可以看到上面的get/set方法只给成员变量提供了入口,没有给私有方法访问入口,所以在访问私有方法的时候,需要在本类中满足某种条件(例如登录成功)才可以访问,其他类仍旧无法访问该方法,需要在本类中利用其他公有方法来调用该方法,然后在其他类中调用本类中的公有方法

   private void stu(){
        System.out.println("学生的名字"+name+"准考证号"+id);
    }
    public void login(){
        //登录学生账号成功之后
        stu();
    }

访问权限修饰符

public private protected 默认
修饰对象 class,成员方法和对象 成员方法和变量 成员方法和变量 class,成员方法和对象
作用域 整个项目 本类 本包和继承子类 本包
有默认值 没有默认值需要初始化
1.3、在方法中进行数据校验

定义一个私有变量:

private int age;

对于年龄来说,我们得控制一个范围来限制,这时候就得进行数据校验处理,可以在main里面加上判断语句,但是每个测试类都需要添加这些条件,数量会太多,所以可以直接把数据校验处理放在本类中

 public int getAge() {
        return age;
    }
    public void setAge(int age) {
        //数据校验处理
        if(age<18||age>65)return;
        this.age = age;
    }

后面对于很多来说,不推荐在set和get方法里面编写功能,会增加排查问题的难度,这里只是为了让数据校验易于理解而举的一个例子。但是如果不用set/get编写功能,那么我们怎么校验数据呢?由于数据是用户在客户端提交过来的,因此在客户提交信息之前就得进行数据校验,校验用户输入的信息是否合法,

private String number;//例如输入电话号码的时候不允许输入字母或者其他小于11位数的数

因此会进行很多校验: 页面会进行校验>后端也需要进行校验(实体校验)>业务层判断>数据库约束

在开发中,不在set中写逻辑,一般在类中也就不写set/get,而是用lombok来实现
posted @ 2022-10-16 10:28  Liku007  阅读(195)  评论(0编辑  收藏  举报