封装
- 让写代码更加方便,更加简单地去使用,对属性特征更加负责。
封是什么?
- 可以使用受限制的访问修饰符对类中的属性和方法进行修饰
- 可以使这些类和方法在其他范围(作用域),其他类中,不同包中,不能被直接调用。
为什么要用封限制作用范围?
- 定义属性时除了需要考虑什么数据类型可以储存这个值以外,还要考虑这个数据本身的数据特征。
- 例如:
- 用户名:长度在5-16个字符之间,不能用数字开头,不能有标点符号。
- 密码:8-32个字符,不能有中文,必须包含大小写字母和数字
- 年龄:0-150,采用储存生日日期来计算
- 手机号:11位数字
- 数据特征不匹配,也称作数据特征不安全。
访问修饰符有哪些?
- public:公共的 整个项目下可以调用
- private :私有的只在本类中使用的
- protected:受到保护的,可以在同一个包下使用,但是不同包下只有子类可以使用
- 什么都不写:包默认的 可以在同一个包下调用
项目的结构
- pro24-3:项目名称,整个项目的根目录
- out:src编译之后的代码文件:class格式
- src :source code源代码目录
- com:包 管理分类的代码文件
- HelloWorld.java:类的文件名
- public class HelloWorld{}:一个类
什么是装?
- 通过不受限制的权限修饰的方法,对本类受限制的属性和方法进行访问
- 普通方法:
- set方法:public void set属性名(属性类型 参数名){this.属性名=参数名;}
- get方法:public 属性类型 get属性名() {return 属性名}
- is:对布尔变量判断的方法
封装的目的
- 封装的主要目的是隐藏对象的属性和实现细节,仅对外提供公共的访问方式来操作数据。
- 这样,我们可以控制对对象属性的访问级别,并保护数据的完整性。
以下为演示代码
public class Student {
private String name;
private String stu_id;
private String phone;
private int age;
private String password;
private long birDay;
public void setBirDay(long day) {
this.birDay = day;
}
public void setName(String name) {
if (name == null) {
System.out.println("不为null");
return;
}
if (name.length() <= 1) {
System.out.println("长度小于2");
return;
}
for (int i = 0; i < name.length(); i++) {
char c = name.charAt(i);
if (name.charAt(i) < 128) {
System.out.println("姓名中包含不合法字符");
return;
} else {
if (c < '\u4e00' || c > '\u9fff') {
System.out.println("姓名中包含非中文字符");
return;
}
}
}
this.name = name;
}
public String getDate() {
Date date = new Date(birDay);
return date.toString();
}
}
}
public class Manage {
public static void main(String[] args) {
Student stu = new Student();
stu.setName("中文");
long time = System.currentTimeMillis();
stu.setBirDay(time);
System.out.println("生日:" + stu.getDate());
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入姓名:");
String name = sc.nextLine();
stu.setName(name);
}
}
}