第5章-第3节-Java中对象的封装性以及局部变量、this、static

2023-12-23 06:15:17

1、局部变量

【问题1】:什么是局部变量?
答:定义在局部位置的变量就是局部变量。

【问题2】:什么是局部位置?
答:方法的形参位置、方法体的内部。

【位置关系图】:
class Xxx {
?? ?//成员位置
?? ?public ...(局部位置) {
?? ??? ?//局部位置
?? ?}
?? ?//成员位置
}

作用:限制变量的使用范围


成员变量和局部变量的区别:

1).代码定义位置

成员变量:定义在类的成员位置;
局部变量:定义在类的局部位置;

2).作用域

成员变量:作用域大,可以在整个class的大括号内部被使用;
局部变量:作用域小,只能在定义的作用范围内被使用;

3).内存所在位置

成员变量:在堆中;
局部变量:在栈中;

4).默认值

成员变量:有默认值;
局部变量:没有默认值;

5).生命周期现象

成员变量:随着对象在堆中被创建也一并生成,随着对象被gc回收一并被清理;
局部变量:随着方法进栈在栈中创建空间区域,随着方法的弹栈也一并被回收;


2、类和对象的关系

搭建场景:

?? ?对象:某人、某车、某房子...

?? ?类型:老师(Teacher)

类型:
?? ?由多个对象共性内容进行抽取得到的抽象描述,称为:类型;
?? ?类可以理解为一张设计图,创建对象的模板。

对象:
?? ?通过类的实例化得到,在内存中占用资源 ==> 实实在在的个体;
?? ?一旦得到了对象就可以访问类中的成员完成需求。


3、面向对象特性之封装性

生活层面:食品、快递、机箱...

作用:提高安全性

程序层面:
?? ?1)、类、方法
?? ?2)、私有化与隐藏

关键字:private
实例化对象完毕后,使用对象名.属性名的方式为对象属性进行显示赋值操作,
很有可能赋的值会违背生活的逻辑和常态 ==> 数据不安全
所以我们考虑没收外界对象名访问属性的权利,私有化该属性 ==> 使用private修饰
在本类中提供外界访问属性的一组公共的方法(getter&setter)
格式如下:
?? ?getter方法
?? ??? ?public 数据类型 get属性名(){
?? ??? ??? ?return 属性名;
?? ??? ?}

?? ?setter方法
?? ??? ?public void set属性名(数据类型 形参名){
?? ??? ??? ?属性名 = 形参名;
?? ??? ?}

举例:
?? ?属性:private double money;

?? ?getter方法:
?? ??? ?public double getMoney(){
?? ??? ??? ?return money;
?? ??? ?}

?? ?setter方法:
?? ??? ?public void setMoney(double m){
?? ??? ??? ?money = m;
?? ??? ?}

【结论】:
?? ?在之后的学习和开发环境下,绝大多数情况,类中的属性都需要被私有化,
?? ?并且提供对应的getter&setter方法,记住:上述两个方法内部都不需要提供数据合理性校验操作


4、this关键字

使用在三个领域/三个作用:

1)、记录了正在被创建或者已经创建完毕对象的内存地址;
2)、区分同名的成员变量和局部变量;
3)、本类重载构造方法之间相互调用。

5、this关键字

第三个作用:本类构造方法之间相互调用

格式:
?? ?this(...);

注意:
?? ?1)、构造方法内部调用本类重载构造,只能在首行位置进行调用
?? ?2)、构造方法之间相互调用不能形成闭合回路


6、static关键字

解释:静态的

核心理解:
?? ?1)、静态的成员和类有关,非静态的成员和对象有关;
?? ?2)、类加载要远远早于对象加载 ==> 先有类,后有对象;
?? ?3)、早出现的不能调用晚出现的,晚出现的可以调用早出现的。

修饰的领域:

1)、修饰方法

称为:静态方法、类方法


格式:
?? ?类名.静态方法名(...);

好处:
?? ?不依赖于对象,即不需要创建对象,类名直接调用
?? ?理解:
?? ??? ?1)、代码定义更加简洁;
?? ??? ?2)、更加节省内存资源,提高开发效率。

【问题】:什么方法需要设计为静态方法,什么方法需要设计为非静态方法?
? ? ? 答:在设计自定义方法的过程中:
?? ? ?发现方法体中不需要访问调用非静态成员(属性、方法),则该方法可以设计为静态方法,
?? ? ?返之一旦方法体中有访问调用非静态成员(属性、方法),则该方法就必须设计为非静态方法。


2)、修饰属性

称为:静态属性、类属性

访问静态属性的格式:
?? ?类名.静态属性名

好处:
?? ?静态属性和类有关,不依赖于对象,不需要创建对象
?? ?理解:
?? ??? ?1)、代码定义更加简洁;
?? ??? ?2)、更加节省内存资源,提高开发效率。

【问题】:什么属性可以被定义为静态属性,什么属性可以被定义为非静态属性?
? ? ? 答:某属性对于该类所有对象都是唯一的值,则该属性可以被定义为静态属性;
?? ? ?否则就必须定义为非静态属性。

本电子书目录:《Java基础的重点知识点全集》

文章来源:https://blog.csdn.net/jnbbwyth/article/details/135162762
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。