2 封装
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式,面向对象三大特点之一。
好处:
- 防止数据被任意篡改,提高安全性
- 隐藏了实现细节,仅暴露方法
如何实现封装?
- 使用private关键字修饰成员变量
- 对外提供公有的setter和getter方法
2.1private(私有的)
- private关键字:
是一个权限修饰符,用于修饰成员(成员变量和成员方法),被私有化的成员只在本类中可以直接访问。
- 常见用法:
将成员变量设置为私有,这样就防止在类外进行访问,对外提供相应的公有的setXxx/getXxx方法
- 好处:提高对数据访问的安全性。并且可以增加复杂的逻辑控制
2.2this关键字
作用:this代表当前正在调用方法的对象
使用场景:
1.setXxx方法中对成员变量赋值:区分成员变量和局部变量
2.构造方法互相调用:
this(...);
注意:构造方法中使用this或者super调用其它构造方法的话必须是构造方法的第一条语句(后面详讲)
3.方法中调用本类其它方法
2.3 构造方法/构造器-Constructor
特点:
构造方法是一种特殊的方法,它的方法名与类名相同
不用定义返回值类型,不用return关键字
其返回值可以理解为是新创建对象的引用,不用显式定义
作用:
给对象初始化,即:给成员变量赋值
注意:
如果没有写,系统提供一个默认构造方法
多个构造方法是以重载的形式存在的
使用new Student();实际上就是在调用空参构造方法
2.4标准类的定义和使用
定义标准的javabean
1成员变量:属性必须私有化,私有修饰
2成员方法:
- 空参构造方法,这个Java类必须具有一个无参的构造函数
- 普通成员方法:study() 可选
- 【get方法(不是必要)】/【set方法】。私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。
note:
如果不希望单独获取成员变量的值,可以不定义getXxx方法
给成员变量赋值的方式有两种:set方法和构造方法
JavaBean的属性:
JavaBean的属性可以是任意类型,并且一个JavaBean可以有多个属性。每个属性通常都需要具有相应的setter、 getter方法,setter方法称为属性修改器,getter方法称为属性访问器。
属性修改器必须以小写的set前缀开始,后跟属性名,且属性名的第一个字母要改为大写,例如,name属性的修改器名称为setName,password属性的修改器名称为setPassword。
属性访问器通常以小写的get前缀开始,后跟属性名,且属性名的第一个字母也要改为大写,例如,name属性的访问器名称为getName,password属性的访问器名称为getPassword。
一个JavaBean的某个属性也可以只有set方法或get方法,这样的属性通常也称之为只写、只读属性。
this关键字在构造方法中的使用
- 在某个构造方法中去调用本类的其它构造方法
- 必须放在构造方法的第一句
2.5对象初始化(实例化)过程
以Student s = new Student();为例
1.加载Student.class文件到方法区
2.在栈内存中定义变量s
3.在堆内存中开辟空间
4.对成员变量进行默认初始化(0/0.0/false/null)
5.对成员变量进行显式初始化(定义成员变量时赋值)
6.调用构造方法(成员变量赋值)
7.成员变量初始化完毕,将对象的地址值返回给栈中的变量s
Note:成员变量最多有四次赋值:
1.对成员变量进行默认初始化(0/0.0/false/null)
2.对成员变量进行显式初始化(定义成员变量时赋值)
3.调用构造方法(成员变量赋值)
4.成员方法赋值(set...)
Student s = new Student();
s一般出现在栈中(因为一般是成员方法中调用);
也会出现在堆中(在成员变量中时)
什么时候将变量定义为成员变量? 变量是用来描述类的,如果变量是这个类的描述信息,就定义为成员变量,否则,应该定义在方法形参或者方法体内,即:局部变量 变量定义的原则:范围越小越好,能被及时回收 练习: 1.定义长方形类,其中包含求周长(perimeter)和面积(area)的方法 注意:由于没有必要单独获取长和宽,所以不用定义get方法 2.定义员工类,自己分析有什么成员变量,包含一个显示所有成员变量的方法,然后测试. 3.自定义计算类,提供基本的加减乘除运算,并测试. 被计算的数和类之间没有从属关系,最好不定义成成员变量,而是方法的参数