封装
封装(Java面向对象三大特征之一)
1.成员(全局)变量和局部变量
- 类中位置不同 ,成员变量在类中方法外,局部变量在方法内部或方法声明上;
- 内存中位置不一样,成员变量在(堆内存) ,局部变量在(栈内存);
- 作用域不一样,成员变量可以多方法共享,包括其他类里的方法,局部变量只有本方法可以使用;
- 生命周期不同,成员变量随着对象的存在而存在,随机对象销毁而销毁
局部变量随着方法调用而存在,随着方法调用结束而销毁;
- 初始化值不一样:成员变量有默认初始化值;局部变量没有初始值,必须先定义,赋值才能使用。
2.注意
同一方法中,不允许出现同名局部变量;
不同方法中,可以出现同名局部变量;
在同一类中,成员变量和局部变量同名时,局部变量有更高得优先级(就近使用);
3.为什么要使用封装
封装的思想:
-
封装是面向对象三大特征之一,是面向对象编程语言对客观世界的模拟,客观世界里成员变量都隐藏在对象内部,外部是无法直接操作的。
-
封装的原则是将类的信息隐藏在类内部,不允许外部程序直接访问,而是要通过该类提供的方法来实现对象隐藏信息的操作和访问,成员变量 private 同时对应的gettter/setter方法
-
封装好处,通过方法来控制成员变量的操作,提高代码的安全性,把代码用方法进行封装,提高代码的复用性,提高系统独立性,提高软件可重用性。
封装的两个大致原则:
把尽可能多的东西藏起来,对外提供便捷的接口;
把所有的属性藏起来;
4.如何实现封装
- 属性的可见性——> 设为private,防止错误的修改
- 创建公有的getter/setter方法——> 用于属性读写// 可使用快捷键Alt+insert自动生成
- 在setter/getter方法中加入属性控制语句——> 对属性值的合法性判断
private关键字
- private是一个修饰符,可以修饰成员(成员变量,成员方法)
- private 修饰成员,只能在本类进行访问,其他类访问pirvate修饰的属性,必须通过专门方法
- getter方法 用于获取私有成员变量的值,方法用public 修饰
- setter方法 用于设置私有成员变量的值,方法用public 修饰
- 修改属性的可见性来限制对属性的访问
public class Dog{
private int age;// 成员变量私有化
}
-
3.创建一对赋取值方法,用于对私有属性的访问;
this修饰的变量用于指代成员变量,其主要作用是(区分成员变量和局部变量的重名问题)
public void setAge(int age) {
// 判断输入的是否符合要求
if (age<=0){
this.age=60;// 如果赋值不合法,强制给定60,然后结束方法
System.out.println("年龄大于0喔");
return;
}
this.age = age;// 合法
}
public int getAge() {
return this.age;
}
public void print(){
System.out.println("年龄:"+age);
}
}
// 测试类
public class TestDog {
public static void main(String[] args) {
Dog dog=new Dog();
dog.setAge(80);// 合法
System.out.println(dog.getAge());// 打印输入值
dog.print();
}
}
实现封装的两种方式:
1.隐藏属性
2.包机制(导包用import)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY