封装的含义及流程
下面类是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来实现