关于java封装的那些事

封装

  • 让写代码更加方便,更加简单地去使用,对属性特征更加负责。

封是什么?

  • 可以使用受限制的访问修饰符对类中的属性和方法进行修饰
  • 可以使这些类和方法在其他范围(作用域),其他类中,不同包中,不能被直接调用。

为什么要用封限制作用范围?

  • 定义属性时除了需要考虑什么数据类型可以储存这个值以外,还要考虑这个数据本身的数据特征。
    • 例如:
    • 用户名:长度在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;
}
/**
* name赋值方法
*
* @param name 传入的name
* 需要符合: 不为null 不为”“ 长度大于1 不能包含字母 数字 符号 必须是汉字
*/
public void setName(String name) {
if (name == null) {
System.out.println("不为null");
return;
}
if (name.length() <= 1) {
System.out.println("长度小于2");
return;
}
// 汉字的范围
// char 每个字符对应的编码范围 0-127 ASCII 包含各种字母 符号
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;
}
/**
* 获取日期的get方法,有时候需要对存储好的数据进行转化 以便用户可以看懂
*
* @return
*/
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);
}
}
}
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值